diff --git a/TwosideKeeper.jar b/TwosideKeeper.jar index a8b5352..23b99db 100644 Binary files a/TwosideKeeper.jar and b/TwosideKeeper.jar differ diff --git a/src/plugin.yml b/src/plugin.yml index 610da6b..2cc1954 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: TwosideKeeper main: sig.plugin.TwosideKeeper.TwosideKeeper -version: 3.8.2r2 +version: 3.8.3 commands: money: description: Tells the player the amount of money they are holding. diff --git a/src/sig/plugin/TwosideKeeper/EliteMonster.java b/src/sig/plugin/TwosideKeeper/EliteMonster.java index ee8d923..c1f82dd 100644 --- a/src/sig/plugin/TwosideKeeper/EliteMonster.java +++ b/src/sig/plugin/TwosideKeeper/EliteMonster.java @@ -76,6 +76,7 @@ public class EliteMonster { List targetlist = new ArrayList(); List participantlist = new ArrayList(); + HashMap dpslist = new HashMap(); //Contains all functionality specific to Elite Monsters. //These are checked every 5 ticks, so have very high control over the monster itself. EliteMonster(Monster m) { @@ -117,6 +118,7 @@ public class EliteMonster { } m.teleport(myspawn); m.setHealth(m.getMaxHealth()); + dpslist.clear(); } } @@ -274,7 +276,7 @@ public class EliteMonster { } //Triggers when this mob is hit. - public void runHitEvent(LivingEntity damager) { + public void runHitEvent(LivingEntity damager, double dmg) { if (!targetlist.contains(damager) && (damager instanceof Player)) { targetlist.add((Player)damager); } @@ -284,8 +286,13 @@ public class EliteMonster { } if (damager instanceof Player) { Player p = (Player)damager; + double currentdps=0; + if (dpslist.containsKey(p.getName())) { + currentdps = dpslist.get(p.getName()); + } + dpslist.put(p.getName(), currentdps+dmg); if (!p.hasPotionEffect(PotionEffectType.WEAKNESS)) { - p.addPotionEffect(new PotionEffect(PotionEffectType.WEAKNESS,20*2,9),true); + p.addPotionEffect(new PotionEffect(PotionEffectType.WEAKNESS,35,9),true); } } last_regen_time=TwosideKeeper.getServerTickTime(); @@ -513,4 +520,34 @@ public class EliteMonster { public void removeAllHealthbars() { bar.removeAll(); } + + public String generateDPSReport() { + //Sorts a list of players by DPS contribution. + List sorted_dmg = new ArrayList(); + List sorted_pl = new ArrayList(); + double totaldmg = 0; + for (String pl : dpslist.keySet()) { + double dmg = dpslist.get(pl); + int slot = 0; + totaldmg+=dmg; + for (int i=0;isorted_dmg.get(i)) { + break; + } else { + slot++; + } + } + sorted_pl.add(slot,pl); + sorted_dmg.add(slot,dmg); + } + StringBuilder finalstr = new StringBuilder(); + DecimalFormat df = new DecimalFormat("0.00"); + for (int i=0;i"+(dmg+TwosideKeeper.CUSTOM_DAMAGE_IDENTIFIER),5); @@ -3491,4 +3530,40 @@ public class GenericFunctions { return false; } } + + public static void RandomlyCreateFire(Location loc, int size) { + Block b = loc.getBlock(); + //Pick a random block + for (int i=-size;i lore = item.getItemMeta().getLore(); for (int i=0;i patterns = banner.getPatterns(); + DyeColor color = banner.getBaseColor(); + ItemStack newbanner = new ItemStack(Material.BANNER); + BannerMeta newban = (BannerMeta)(newbanner.getItemMeta()); + newban.setBaseColor(color); + newban.setPatterns(patterns); + newbanner.setItemMeta(newban); + meta = newbanner.getItemMeta(); + } + + if (meta instanceof BannerMeta) { + BannerMeta banner = (BannerMeta)meta; /* Code to generate banners with ENUMs listed respective to the patterns applied in the lore. for (int j=0;j patternlist = new ArrayList(); + for (int i=0;i patternlist = new ArrayList(); + for (int i=0;i patternlist = new ArrayList(); + for (int i=0;iSetting a monster with Difficulty "+md.name()+" w/"+m.getHealth()+"/"+m.getMaxHealth()+" HP to a Leader.",5); } else { m.setMaxHealth(m.getMaxHealth()*2.0); m.setHealth(m.getMaxHealth()); @@ -717,6 +741,7 @@ public class MonsterController { m.setMaxHealth(1200); //Target is 1200 HP. m.setHealth(m.getMaxHealth()); MonsterStructure.getMonsterStructure(m).SetLeader(true); + TwosideKeeper.log("->Setting a monster with Difficulty "+md.name()+" w/"+m.getHealth()+"/"+m.getMaxHealth()+" HP to a Leader.",5); } else { m.setMaxHealth(m.getMaxHealth()*3.0); m.setHealth(m.getMaxHealth()); @@ -746,6 +771,7 @@ public class MonsterController { m.setMaxHealth(1600); //Target is 1600 HP. m.setHealth(m.getMaxHealth()); MonsterStructure.getMonsterStructure(m).SetLeader(true); + TwosideKeeper.log("->Setting a monster with Difficulty "+md.name()+" w/"+m.getHealth()+"/"+m.getMaxHealth()+" HP to a Leader.",5); } else { m.setMaxHealth(m.getMaxHealth()*4.0); m.setHealth(m.getMaxHealth()); @@ -789,6 +815,7 @@ public class MonsterController { m.setHealth(m.getMaxHealth()); m.setCustomName("Zombie Leader"); MonsterStructure.getMonsterStructure(m).SetLeader(true); + TwosideKeeper.log("->Setting a monster with Difficulty "+md.name()+" w/"+m.getHealth()+"/"+m.getMaxHealth()+" HP to a Leader.",5); } else { m.setMaxHealth(m.getMaxHealth()*1.0); m.setHealth(m.getMaxHealth()); diff --git a/src/sig/plugin/TwosideKeeper/NewCombat.java b/src/sig/plugin/TwosideKeeper/NewCombat.java index 22dc32c..c2506d5 100644 --- a/src/sig/plugin/TwosideKeeper/NewCombat.java +++ b/src/sig/plugin/TwosideKeeper/NewCombat.java @@ -601,7 +601,7 @@ public class NewCombat { if (shooter instanceof Monster) { basedmg = 1.0 *calculateMonsterDifficultyMultiplier(shooter); - TwosideKeeper.log("New Base damage is "+basedmg, 2); + TwosideKeeper.log("New Base damage is "+basedmg, 4); } return basedmg * basemult; @@ -1019,7 +1019,13 @@ public class NewCombat { if (GenericFunctions.isArtifactEquip(p.getEquipment().getItemInMainHand()) && GenericFunctions.isArtifactWeapon(p.getEquipment().getItemInMainHand())) { double ratio = 1.0-CalculateDamageReduction(1,target,p); - AwakenedArtifact.addPotentialEXP(p.getEquipment().getItemInMainHand(), (int)((ratio*20)+5)*((headshot)?2:1), p); + if (p.getEquipment().getItemInMainHand().getType()!=Material.BOW) { + AwakenedArtifact.addPotentialEXP(p.getEquipment().getItemInMainHand(), (int)((ratio*20)+5)*((headshot)?2:1), p); + } else { + PlayerStructure pd = PlayerStructure.GetPlayerStructure(p); + pd.storedbowxp+=(int)((ratio*20)+5)*((headshot)?2:1); + pd.lasthittarget=TwosideKeeper.getServerTickTime(); + } increaseArtifactArmorXP(p,(int)(ratio*10)+1); List hitlist = getAOEList(weapon,target); @@ -1265,14 +1271,14 @@ public class NewCombat { } if (damager instanceof Player) { - Player p = (Player)damager; + Player p = (Player)damager; double lifestealpct = calculateLifeStealAmount(p); double healamt = finaldmg*lifestealpct; //log("Healed "+healamt+" damage.",2); double newhealth = p.getHealth()+healamt; if (newhealth>p.getMaxHealth()) { - p.setMaxHealth(p.getMaxHealth()); + p.setHealth(p.getMaxHealth()); } else { p.setHealth(newhealth); } @@ -1573,6 +1579,35 @@ public class NewCombat { } return dodgechance; } + + public static double calculateDefenderAbsorbtion(LivingEntity entity, double dmg) { + //See if we're in a party with a defender. + if (entity instanceof Player) { + Player p = (Player)entity; + List partymembers = TwosideKeeperAPI.getPartyMembers(p); + for (int i=0;i partyplayers; - public List lastorder; - int color; - Location region; - - Party(int color, Location rawPos) { - partyplayers = new ArrayList(); - lastorder = new ArrayList(); - rawPos.setX((int)(rawPos.getX()/(16*TwosideKeeper.PARTY_CHUNK_SIZE))*(16*TwosideKeeper.PARTY_CHUNK_SIZE)); - rawPos.setZ((int)(rawPos.getZ()/(16*TwosideKeeper.PARTY_CHUNK_SIZE))*(16*TwosideKeeper.PARTY_CHUNK_SIZE)); - region=rawPos; - TwosideKeeper.log("Party Region Position: "+region.toString(),5); - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "scoreboard objectives remove Party"+color); //Make sure the party is cleared out if it was used for something before... - //Bukkit.getScoreboardManager().getMainScoreboard().registerNewObjective("Party"+color, "dummy"); - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "scoreboard objectives add Party"+color+" dummy Party"); - //Bukkit.getScoreboardManager().getMainScoreboard().getObjective("Party"+color).setDisplaySlot(DisplaySlot.SIDEBAR); - String color_txt = ""; - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "scoreboard objectives setdisplay sidebar.team."+ConvertColor(color)+" Party"+color); - this.color=color; - } - - String ConvertColor(int val) { - - switch (val%16) { - case 0:{ - return "white"; - } - case 1:{ - return "yellow"; - } - case 2:{ - return "light_purple"; - } - case 3:{ - return "red"; - } - case 4:{ - return "aqua"; - } - case 5:{ - return "green"; - } - case 6:{ - return "blue"; - } - case 7:{ - return "dark_gray"; - } - case 8:{ - return "gray"; - } - case 9:{ - return "gold"; - } - case 10:{ - return "dark_purple"; - } - case 11:{ - return "dark_red"; - } - case 12:{ - return "dark_aqua"; - } - case 13:{ - return "dark_green"; - } - case 14:{ - return "dark_blue"; - } - case 15:{ - return "black"; - } - default:{ - return "white"; - } - } - } - - public void addPlayer(Player p) { - partyplayers.add(p); - for (int l=0;l=2) { - //partyplayers.get(l).sendMessage(ChatColor.ITALIC+""+ChatColor.GOLD+"Party Bonuses Applied: "+ChatColor.BLUE+"+"+(partyplayers.size()-1)+"0% damage + defense for "+partyplayers.size()+" party members. Drop Rate +"+(partyplayers.size()-1)+"0%"); - } - } - Bukkit.dispatchCommand(Bukkit.getServer().getConsoleSender(), "scoreboard players set "+p.getName().toLowerCase()+" Party"+color+" "+partyplayers.size()*-1); - Bukkit.dispatchCommand(Bukkit.getServer().getConsoleSender(), "scoreboard teams option "+p.getName().toLowerCase()+" color "+ConvertColor(color)); - p.getScoreboard().getTeam(p.getName().toLowerCase()).setAllowFriendlyFire(false); - p.getScoreboard().getTeam(p.getName().toLowerCase()).setSuffix(TwosideKeeper.createHealthbar(((p.getHealth())/p.getMaxHealth())*100,p)); - TwosideKeeper.setPlayerMaxHealth(p); - p.getScoreboard().getTeam(p.getName().toLowerCase()).setPrefix(GenericFunctions.PlayerModePrefix(p)); - } - - public void sortPlayers() { - //Sorts the players on the scoreboard by proper health values. - List sortedorder = new ArrayList(); - int lasti=-1; //The last player that had less health than you did. - for (int i=0;ipartyplayers.get(i).getHealth()) { - lasti=-1; - } else { - lasti=j; //This means our health is bigger. We go here. - break; - } - } - if (lasti==-1) { - //This just gets inserted. - sortedorder.add(partyplayers.get(i)); - } else { - sortedorder.add(lasti,partyplayers.get(i)); - } - } - if (!lastorder.equals(sortedorder)) { - for (int i=0;i=2) { - //partyplayers.get(i).sendMessage(ChatColor.DARK_GRAY+""+ChatColor.ITALIC+"Party buffs removed."); - } - if (partyplayers.get(i)!=null && - partyplayers.get(i).isOnline()) { - partyplayers.get(i).getScoreboard().getTeam(partyplayers.get(i).getName().toLowerCase()).setSuffix(TwosideKeeper.createHealthbar(((partyplayers.get(i).getHealth())/partyplayers.get(i).getMaxHealth())*100,partyplayers.get(i))); - TwosideKeeper.setPlayerMaxHealth(partyplayers.get(i)); - partyplayers.get(i).getScoreboard().getTeam(partyplayers.get(i).getName().toLowerCase()).setPrefix(GenericFunctions.PlayerModePrefix(partyplayers.get(i))); - } - partyplayers.remove(i); - i--; - } - } - if (prevsiz!=partyplayers.size()) { - for (int i=0;i getPartyMembers(Player p) { - //Find the party this player is in. - Party part = null; - for (int i=0;i> parties = new HashMap>(); + static HashMap> oldparties = new HashMap>(); + static HashMap> sortedorder = new HashMap>(); + public static void SetupParties() { + //Place players into numbered parties. + totalparties=0; + ClearAllParties(); + for (Player p : Bukkit.getOnlinePlayers()) { + if (!IsInParty(p)) { + //We only care about adding a player that's not in a party already. + //We have to make a new party for this player. + AddPlayerToParty(p,totalparties++); + //Now find nearby players and add them to this party. + AddNearbyPlayersToSameParty(p); + } + } + UpdatePartyScoreboards(); + } + + private static void UpdatePartyScoreboards() { + for (int i : parties.keySet()) { + if (oldparties.containsKey(i)) { + if (PartiesAreDifferent(parties.get(i),oldparties.get(i))) { + UpdateScoreboard(i,parties.get(i),oldparties.get(i)); + } else { + TwosideKeeper.log("Parties are the same!", 5); + } + } else { + UpdateScoreboard(i,parties.get(i),oldparties.get(i)); + } + sortPlayers(i, parties.get(i), sortedorder); + } + } + + private static void UpdateScoreboard(int party, List partymembers, List oldmembers) { + String color = ConvertColor(party); + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "scoreboard objectives remove Party"+color); //Make sure the party is cleared out if it was used for something before... + //Bukkit.getScoreboardManager().getMainScoreboard().registerNewObjective("Party"+color, "dummy"); + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "scoreboard objectives add Party"+color+" dummy Party"); + //Bukkit.getScoreboardManager().getMainScoreboard().getObjective("Party"+color).setDisplaySlot(DisplaySlot.SIDEBAR); + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "scoreboard objectives setdisplay sidebar.team."+color+" Party"+color); + + for (int i=0;i=2)?partymembers.size()-1:0; + TwosideKeeper.log("Party bonus is "+pd.partybonus, 2); + TwosideKeeper.log("Adding Player "+p.getName()+" to Scoreboard..", 5); + Bukkit.dispatchCommand(Bukkit.getServer().getConsoleSender(), "scoreboard players set "+p.getName().toLowerCase()+" Party"+color+" "+((i+1)*-1)); + Bukkit.dispatchCommand(Bukkit.getServer().getConsoleSender(), "scoreboard teams option "+p.getName().toLowerCase()+" color "+color); + p.getScoreboard().getTeam(p.getName().toLowerCase()).setAllowFriendlyFire(false); + p.getScoreboard().getTeam(p.getName().toLowerCase()).setSuffix(TwosideKeeper.createHealthbar(((p.getHealth())/p.getMaxHealth())*100,p)); + TwosideKeeper.setPlayerMaxHealth(p); + p.getScoreboard().getTeam(p.getName().toLowerCase()).setPrefix(GenericFunctions.PlayerModePrefix(p)); + } + } + + public static void sortPlayers(int party, List partyplayers, HashMap> lastorder) { + String color = ConvertColor(party); + //Sorts the players on the scoreboard by proper health values. + List sortedorder = new ArrayList(); + int lasti=-1; //The last player that had less health than you did. + for (int i=0;ipartyplayers.get(i).getHealth()) { + lasti=-1; + } else { + lasti=j; //This means our health is bigger. We go here. + break; + } + } + if (lasti==-1) { + //This just gets inserted. + sortedorder.add(partyplayers.get(i)); + } else { + sortedorder.add(lasti,partyplayers.get(i)); + } + } + TwosideKeeper.log("Sorted Order: "+sortedorder.toString(), 5); + if (lastorder.get(party)==null) { + lastorder.put(party,new ArrayList()); + } + if (!lastorder.get(party).equals(sortedorder)) { + for (int i=0;i newparty, List oldparty) { + if (newparty.size()==oldparty.size()) { + return !newparty.containsAll(oldparty); + } else { + return true; + } + } + + private static void ClearAllParties() { + for (Player p : Bukkit.getOnlinePlayers()) { + PlayerStructure pd = PlayerStructure.GetPlayerStructure(p); + pd.previousparty=pd.currentparty; + pd.currentparty=-1; + } + oldparties.clear(); + oldparties.putAll(parties); + parties.clear(); + } + + private static void AddNearbyPlayersToSameParty(Player sourcep) { + for (Player checkp : Bukkit.getOnlinePlayers()) { + if (!IsInParty(checkp) && sourcep.getLocation().distanceSquared(checkp.getLocation())<=Math.pow(TwosideKeeper.PARTY_CHUNK_SIZE,2)) { + AddPlayerToParty(checkp,GetCurrentParty(sourcep)); + AddNearbyPlayersToSameParty(checkp); + } + } + } + + private static int GetCurrentParty(Player sourcep) { + return PlayerStructure.GetPlayerStructure(sourcep).currentparty; + } + + private static void AddPlayerToParty(Player p, int i) { + TwosideKeeper.log("Added player to party "+i, 5); + PlayerStructure.GetPlayerStructure(p).currentparty=i; + AddToPartyMap(p,i); + } + + private static void AddToPartyMap(Player p, int i) { + List playerlist = parties.get(i); + if (parties.get(i)==null) { + playerlist = new ArrayList(); + } + playerlist.add(p); + parties.put(i, playerlist); + } + + private static boolean IsInParty(Player p) { + return PlayerStructure.GetPlayerStructure(p).currentparty!=-1; + } + + public static boolean IsInSameParty(Player p, Player p2) { + return PlayerStructure.GetPlayerStructure(p).currentparty==PlayerStructure.GetPlayerStructure(p2).currentparty; + } + + public static List getPartyMembers(Player p) { + List partymembers = new ArrayList(); + int partynumb = GetCurrentParty(p); + return parties.get(partynumb); + } +} diff --git a/src/sig/plugin/TwosideKeeper/PlayerStructure.java b/src/sig/plugin/TwosideKeeper/PlayerStructure.java index 627dbde..721fa2c 100644 --- a/src/sig/plugin/TwosideKeeper/PlayerStructure.java +++ b/src/sig/plugin/TwosideKeeper/PlayerStructure.java @@ -90,6 +90,7 @@ public class PlayerStructure { public double vendetta_amt = 0.0; public HashMap hitlist = new HashMap(); public long lastdeath = 0; + public int previousparty = -1; public double prev_weapondmg=0.0; public double prev_buffdmg=0.0; @@ -102,6 +103,8 @@ public class PlayerStructure { public boolean headshot=false; public boolean preemptive=false; public boolean crit=false; + public int storedbowxp=0; + public long lasthittarget=0; public long lastrightclick = 0; @@ -124,6 +127,7 @@ public class PlayerStructure { this.partybonus=0; this.enderdragon_spawned=false; this.currentparty=-1; + this.previousparty=-1; this.spleef_pts=0; this.spleef_wins=0; this.title_task=-1; diff --git a/src/sig/plugin/TwosideKeeper/Recipes.java b/src/sig/plugin/TwosideKeeper/Recipes.java index 53f89ca..34f6ec7 100644 --- a/src/sig/plugin/TwosideKeeper/Recipes.java +++ b/src/sig/plugin/TwosideKeeper/Recipes.java @@ -8,6 +8,7 @@ import org.bukkit.ChatColor; import org.bukkit.DyeColor; import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.ShapelessRecipe; @@ -659,6 +660,7 @@ public class Recipes { case "EXPLODE_ARR": { ItemStack explosionarrow = new ItemStack(Material.TIPPED_ARROW); PotionMeta pm = (PotionMeta)explosionarrow.getItemMeta(); + pm.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS); PotionData data = new PotionData(PotionType.INVISIBILITY); //pm.setBasePotionData(data); pm.addCustomEffect(new PotionEffect(PotionEffectType.INVISIBILITY,0,0),true); @@ -672,6 +674,7 @@ public class Recipes { case "TRAP_ARR": { ItemStack trappingarrow = new ItemStack(Material.TIPPED_ARROW); PotionMeta pm = (PotionMeta)trappingarrow.getItemMeta(); + pm.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS); PotionData data = new PotionData(PotionType.WEAKNESS); //pm.setBasePotionData(data); pm.addCustomEffect(new PotionEffect(PotionEffectType.WEAKNESS,0,0),true); @@ -685,6 +688,7 @@ public class Recipes { case "POISON_ARR": { ItemStack poisonarrow = new ItemStack(Material.TIPPED_ARROW); PotionMeta pm = (PotionMeta)poisonarrow.getItemMeta(); + pm.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS); PotionData data = new PotionData(PotionType.POISON); //pm.setBasePotionData(data); pm.addCustomEffect(new PotionEffect(PotionEffectType.POISON,0,0),true); @@ -698,6 +702,7 @@ public class Recipes { case "QUADRUPLE_DAMAGE_ARR": { ItemStack diamondtippedarrow = new ItemStack(Material.TIPPED_ARROW); PotionMeta pm = (PotionMeta)diamondtippedarrow.getItemMeta(); + pm.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS); PotionData data = new PotionData(PotionType.SPEED); //pm.setBasePotionData(data); pm.addCustomEffect(new PotionEffect(PotionEffectType.SPEED,0,0),true); @@ -711,6 +716,7 @@ public class Recipes { case "DOUBLE_DAMAGE_ARR": { ItemStack handmadearrow = new ItemStack(Material.TIPPED_ARROW); PotionMeta pm = (PotionMeta)handmadearrow.getItemMeta(); + pm.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS); PotionData data = new PotionData(PotionType.FIRE_RESISTANCE); //pm.setBasePotionData(data); pm.addCustomEffect(new PotionEffect(PotionEffectType.FIRE_RESISTANCE,0,0),true); diff --git a/src/sig/plugin/TwosideKeeper/TwosideKeeper.java b/src/sig/plugin/TwosideKeeper/TwosideKeeper.java index 09bd254..429e53c 100644 --- a/src/sig/plugin/TwosideKeeper/TwosideKeeper.java +++ b/src/sig/plugin/TwosideKeeper/TwosideKeeper.java @@ -286,7 +286,6 @@ public class TwosideKeeper extends JavaPlugin implements Listener { public int TeamCounter = 0; public static int time_passed = 0; //The total amount of time lost due to modifications to FullTime(). - public static List PartyList = new ArrayList(); public List colors_used = new ArrayList(); public static List chargezombies = new ArrayList(); public static List elitemonsters = new ArrayList(); @@ -398,6 +397,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { ); TwosideShops = new WorldShopManager(); + TwosideShops.LoadShopPurchases(); //Initialize Player Data structure. playerdata = new HashMap(); @@ -681,6 +681,13 @@ public class TwosideKeeper extends JavaPlugin implements Listener { if (pd.target!=null && !pd.target.isDead() && pd.target.getLocation().getWorld().equals(p.getWorld()) && pd.target.getLocation().distanceSquared(p.getLocation())>256) { pd.target=null; } + + if (pd.lasthittarget+20*15<=getServerTickTime() && pd.storedbowxp>0 && GenericFunctions.isArtifactEquip(p.getEquipment().getItemInMainHand()) && + p.getEquipment().getItemInMainHand().getType()==Material.BOW) { + AwakenedArtifact.addPotentialEXP(p.getEquipment().getItemInMainHand(), pd.storedbowxp, p); + TwosideKeeper.log("Added "+pd.storedbowxp+" Artifact XP", 2); + pd.storedbowxp=0; + } p.getAttribute(Attribute.GENERIC_ARMOR).setBaseValue(20*(1.0d-NewCombat.CalculateDamageReduction(1,p,p))+subtractVanillaArmorBar(p.getEquipment().getArmorContents())); @@ -776,7 +783,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { GenericFunctions.AutoRepairItems(p); //Try to fit into an already existing party. - boolean inParty=false; + /*boolean inParty=false; //LEGACY PARTY CODE. for (int j=0;j=DeathManager.CalculateDeathPrice(player)) { - //player.getInventory().addItem(ev.getCurrentItem()); - if (ev.getCurrentItem()!=null && - ev.getCurrentItem().getType()!=Material.AIR) { - //player.getLocation().getWorld().dropItemNaturally(player.getLocation(), ev.getCurrentItem()).setPickupDelay(0); - GenericFunctions.giveItem(player, ev.getCurrentItem()); - ev.setCurrentItem(new ItemStack(Material.AIR)); - - final DecimalFormat df = new DecimalFormat("0.00"); - Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() { - @Override - public void run() { - player.sendMessage(ChatColor.BLUE+"New Balance: "+ChatColor.GREEN+"$"+df.format((getPlayerMoney(player)+getPlayerBankMoney(player)-DeathManager.CalculateDeathPrice(player)*DeathManager.CountOccupiedSlots(player.getInventory())))); - } - },5); + if (ev.getRawSlot()<45) { + if (getPlayerMoney(player)+getPlayerBankMoney(player)-DeathManager.CalculateDeathPrice(player)*DeathManager.CountOccupiedSlots(player.getInventory())>=DeathManager.CalculateDeathPrice(player)) { + //player.getInventory().addItem(ev.getCurrentItem()); + if (ev.getCurrentItem()!=null && + ev.getCurrentItem().getType()!=Material.AIR) { + //player.getLocation().getWorld().dropItemNaturally(player.getLocation(), ev.getCurrentItem()).setPickupDelay(0); + GenericFunctions.giveItem(player, ev.getCurrentItem()); + ev.setCurrentItem(new ItemStack(Material.AIR)); + + final DecimalFormat df = new DecimalFormat("0.00"); + Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() { + @Override + public void run() { + player.sendMessage(ChatColor.BLUE+"New Balance: "+ChatColor.GREEN+"$"+df.format((getPlayerMoney(player)+getPlayerBankMoney(player)-DeathManager.CalculateDeathPrice(player)*DeathManager.CountOccupiedSlots(player.getInventory())))); + } + },5); + } + } else { + player.sendMessage(ChatColor.RED+"You cannot afford to salvage any more items!"); } - } else { - player.sendMessage(ChatColor.RED+"You cannot afford to salvage any more items!"); } ev.setCancelled(true); } @@ -3718,7 +3724,6 @@ public class TwosideKeeper extends JavaPlugin implements Listener { it.setCustomName((it.getItemStack().getItemMeta().hasDisplayName())?it.getItemStack().getItemMeta().getDisplayName():GenericFunctions.UserFriendlyMaterialName(it.getItemStack())); it.setCustomNameVisible(true); } - it.setInvulnerable(true); } /** @@ -3767,6 +3772,8 @@ public class TwosideKeeper extends JavaPlugin implements Listener { ms.SetElite(true); } if (MonsterController.isZombieLeader(m)) { + m = MonsterController.convertMonster(m,md); + log("Setting a monster with Difficulty "+MonsterController.getMonsterDifficulty(m).name()+" w/"+m.getHealth()+"/"+m.getMaxHealth()+" HP to a Leader.",5); ms.SetLeader(true); } } @@ -4051,34 +4058,6 @@ public class TwosideKeeper extends JavaPlugin implements Listener { } } } - - //See if we're in a party with a defender. - for (int i=0;i=loglv) { - log_messages.add(ChatColor.stripColor(logmessage)); + //log_messages.add(ChatColor.stripColor(logmessage)); switch (loglv) { case 0: { //Only game breaking messages appear in level 0. diff --git a/src/sig/plugin/TwosideKeeper/TwosideKeeperAPI.java b/src/sig/plugin/TwosideKeeper/TwosideKeeperAPI.java index ea4d328..380b894 100644 --- a/src/sig/plugin/TwosideKeeper/TwosideKeeperAPI.java +++ b/src/sig/plugin/TwosideKeeper/TwosideKeeperAPI.java @@ -15,6 +15,7 @@ import org.bukkit.inventory.ItemStack; import sig.plugin.TwosideKeeper.HelperStructures.ArtifactAbility; import sig.plugin.TwosideKeeper.HelperStructures.ArtifactItem; +import sig.plugin.TwosideKeeper.HelperStructures.ItemSet; import sig.plugin.TwosideKeeper.HelperStructures.Loot; import sig.plugin.TwosideKeeper.HelperStructures.MonsterDifficulty; import sig.plugin.TwosideKeeper.HelperStructures.MonsterType; @@ -140,7 +141,10 @@ public final class TwosideKeeperAPI { //Party COMMANDS. public static List getPartyMembers(Player p) { - return Party.getPartyMembers(p); + return PartyManager.getPartyMembers(p); //LEGACY CODE. + } + public static boolean IsInSameParty(Player p, Player p2) { + return PartyManager.IsInSameParty(p, p2); } //Combat COMMANDS. @@ -203,6 +207,22 @@ public final class TwosideKeeperAPI { return RecyclingCenter.isRecyclingCenter(b); } + //Item Set COMMANDS. + public static boolean isSetItem(ItemStack item) { + return ItemSet.isSetItem(item); + } + /** + * + * @param item + * @return The Item Set, or null if none found. + */ + public static ItemSet getItemSet(ItemStack item) { + return ItemSet.GetSet(item); + } + public static int getItemTier(ItemStack item) { + return ItemSet.GetTier(item); + } + //Localization COMMANDS. public static String getLocalizedItemName(ItemStack i) { return GenericFunctions.UserFriendlyMaterialName(i); diff --git a/src/sig/plugin/TwosideKeeper/WorldShopManager.java b/src/sig/plugin/TwosideKeeper/WorldShopManager.java index c46618b..60a1b3c 100644 --- a/src/sig/plugin/TwosideKeeper/WorldShopManager.java +++ b/src/sig/plugin/TwosideKeeper/WorldShopManager.java @@ -1,6 +1,8 @@ package sig.plugin.TwosideKeeper; +import java.io.BufferedWriter; import java.io.File; +import java.io.FileWriter; import java.io.IOException; import java.text.DecimalFormat; import java.util.ArrayList; @@ -217,10 +219,10 @@ public class WorldShopManager { sessions.remove(ss); } - public void AddNewPurchase(String owner, Player purchaser, ItemStack item, double price, int amt) { + public void AddNewPurchase(String owner, String purchaser, ItemStack item, double price, int amt) { purchases.add(new ShopPurchase(owner, purchaser, item, price, amt)); } - public void AddNewPurchase(String owner, Player purchaser, ItemStack item, double price, int amt, boolean sell) { + public void AddNewPurchase(String owner, String purchaser, ItemStack item, double price, int amt, boolean sell) { purchases.add(new ShopPurchase(owner, purchaser, item, price, amt, sell)); } public boolean PlayerHasPurchases(Player p) { @@ -272,6 +274,51 @@ public class WorldShopManager { return shop; } + public void SaveShopPurchases() { + File config; + config = new File(TwosideKeeper.filesave,"shoppurchases.data"); + config.delete(); + FileConfiguration workable = YamlConfiguration.loadConfiguration(config); + //workable.set("recycling_center.count", nodes.size()); + + for (int i=0;i