diff --git a/TwosideKeeper.jar b/TwosideKeeper.jar index 0924d1a..8bbd3a8 100644 Binary files a/TwosideKeeper.jar and b/TwosideKeeper.jar differ diff --git a/src/plugin.yml b/src/plugin.yml index 14e844c..c0e9255 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: TwosideKeeper main: sig.plugin.TwosideKeeper.TwosideKeeper -version: 3.4.1 +version: 3.4.1c commands: money: description: Tells the player the amount of money they are holding. diff --git a/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java b/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java index 4a6fd44..f003e4e 100644 --- a/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java +++ b/src/sig/plugin/TwosideKeeper/HelperStructures/Common/GenericFunctions.java @@ -492,6 +492,15 @@ public class GenericFunctions { case SMOOTH_STAIRS:{ return "Stone Brick Stairs"; } + case LEATHER_HELMET:{ + return "Leather Cap"; + } + case LEATHER_CHESTPLATE:{ + return "Leather Tunic"; + } + case LEATHER_LEGGINGS:{ + return "Leather Pants"; + } case STEP:{ switch (type.getDurability()) { case 0:{ @@ -523,6 +532,9 @@ public class GenericFunctions { case SULPHUR:{ return "Gunpowder"; } + case TNT:{ + return "TNT"; + } case POTION:{ PotionMeta pm = (PotionMeta)type.getItemMeta(); /* @@ -1256,5 +1268,16 @@ public class GenericFunctions { return false; } } - + + + public static boolean hasNoLore(ItemStack item) { + if (item!=null && + item.getType()!=Material.AIR && + item.hasItemMeta() && + item.getItemMeta().hasLore()) { + return false; + } else { + return true; + } + } } diff --git a/src/sig/plugin/TwosideKeeper/HelperStructures/MalleableBaseQuest.java b/src/sig/plugin/TwosideKeeper/HelperStructures/MalleableBaseQuest.java index b7e13ad..dc79b8d 100644 --- a/src/sig/plugin/TwosideKeeper/HelperStructures/MalleableBaseQuest.java +++ b/src/sig/plugin/TwosideKeeper/HelperStructures/MalleableBaseQuest.java @@ -115,7 +115,11 @@ public class MalleableBaseQuest { ItemMeta m = base.getItemMeta(); List lore = m.getLore(); String material_name = lore.get(1).split("'")[1]; - return material_name; + if (lore.get(1).contains("Jack o")) { + return "Jack o'Lantern"; + } else { + return material_name; + } } public static int getCurrentProgress(ItemStack base) { //How many quest items have been completed already? diff --git a/src/sig/plugin/TwosideKeeper/HelperStructures/WorldShop.java b/src/sig/plugin/TwosideKeeper/HelperStructures/WorldShop.java index 65097da..978ecec 100644 --- a/src/sig/plugin/TwosideKeeper/HelperStructures/WorldShop.java +++ b/src/sig/plugin/TwosideKeeper/HelperStructures/WorldShop.java @@ -2,7 +2,9 @@ package sig.plugin.TwosideKeeper.HelperStructures; import java.util.ArrayList; import java.util.Collection; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; import org.bukkit.ChatColor; import org.bukkit.Location; @@ -117,40 +119,40 @@ public class WorldShop { if (item.getType().toString().contains("RECORD")) { switch (item.getType()) { case GREEN_RECORD:{ - message+=ChatColor.GRAY+"\nC418 - cat"; + message+="\n"+ChatColor.GRAY+"C418 - cat"; }break; case GOLD_RECORD:{ - message+=ChatColor.GRAY+"\nC418 - 13"; + message+="\n"+ChatColor.GRAY+"C418 - 13"; }break; case RECORD_3:{ - message+=ChatColor.GRAY+"\nC418 - blocks"; + message+="\n"+ChatColor.GRAY+"C418 - blocks"; }break; case RECORD_4:{ - message+=ChatColor.GRAY+"\nC418 - chirp"; + message+="\n"+ChatColor.GRAY+"C418 - chirp"; }break; case RECORD_5:{ - message+=ChatColor.GRAY+"\nC418 - far"; + message+="\n"+ChatColor.GRAY+"C418 - far"; }break; case RECORD_6:{ - message+=ChatColor.GRAY+"\nC418 - mall"; + message+="\n"+ChatColor.GRAY+"C418 - mall"; }break; case RECORD_7:{ - message+=ChatColor.GRAY+"\nC418 - melohi"; + message+="\n"+ChatColor.GRAY+"C418 - melohi"; }break; case RECORD_8:{ - message+=ChatColor.GRAY+"\nC418 - stal"; + message+="\n"+ChatColor.GRAY+"C418 - stal"; }break; case RECORD_9:{ - message+=ChatColor.GRAY+"\nC418 - strad"; + message+="\n"+ChatColor.GRAY+"C418 - strad"; }break; case RECORD_10:{ - message+=ChatColor.GRAY+"\nC418 - ward"; + message+="\n"+ChatColor.GRAY+"C418 - ward"; }break; case RECORD_11:{ - message+=ChatColor.GRAY+"\nC418 - 11"; + message+="\n"+ChatColor.GRAY+"C418 - 11"; }break; case RECORD_12:{ - message+=ChatColor.GRAY+"\nC418 - wait"; + message+="\n"+ChatColor.GRAY+"C418 - wait"; }break; } } @@ -370,43 +372,44 @@ public class WorldShop { return ""; } - static String toRomanNumeral(int val) { - switch (val) { - case 1:{ - return "I"; - } - case 2:{ - return "II"; - } - case 3:{ - return "III"; - } - case 4:{ - return "IV"; - } - case 5:{ - return "V"; - } - case 6:{ - return "VI"; - } - case 7:{ - return "VII"; - } - case 8:{ - return "VIII"; - } - case 9:{ - return "IX"; - } - case 10:{ - return "X"; - } - default:{ - return ""; - } - } - } + /** + * + * @param numb The number to convert to Roman Numerals. + * @return A String version of the number converted in Roman Numeral Format. + */ + public static String toRomanNumeral(int Int) { + LinkedHashMap roman_numerals = new LinkedHashMap(); + roman_numerals.put("M", 1000); + roman_numerals.put("CM", 900); + roman_numerals.put("D", 500); + roman_numerals.put("CD", 400); + roman_numerals.put("C", 100); + roman_numerals.put("XC", 90); + roman_numerals.put("L", 50); + roman_numerals.put("XL", 40); + roman_numerals.put("X", 10); + roman_numerals.put("IX", 9); + roman_numerals.put("V", 5); + roman_numerals.put("IV", 4); + roman_numerals.put("I", 1); + String res = ""; + for(Map.Entry entry : roman_numerals.entrySet()){ + int matches = Int/entry.getValue(); + res += repeat(entry.getKey(), matches); + Int = Int % entry.getValue(); + } + return res; + } + public static String repeat(String s, int n) { + if(s == null) { + return null; + } + final StringBuilder sb = new StringBuilder(); + for(int i = 0; i < n; i++) { + sb.append(s); + } + return sb.toString(); + } public static boolean isWorldShopSign(Sign s) { if (s.getLine(0).equalsIgnoreCase(ChatColor.BLUE+"-- SHOP --") || diff --git a/src/sig/plugin/TwosideKeeper/MonsterController.java b/src/sig/plugin/TwosideKeeper/MonsterController.java index 9d2a0eb..a7e6d58 100644 --- a/src/sig/plugin/TwosideKeeper/MonsterController.java +++ b/src/sig/plugin/TwosideKeeper/MonsterController.java @@ -105,33 +105,45 @@ public class MonsterController { switch (lv) { case 1:{ if (Math.random()<0.5) { - m.getEquipment().setHelmet(new ItemStack(Material.LEATHER_HELMET)); - m.getEquipment().getHelmet().setDurability((short)Math.round(Math.random()*128)); + ItemStack helm = new ItemStack(Material.LEATHER_HELMET); + helm.setDurability((short)Math.round(Math.random()*54)); + m.getEquipment().setHelmet(helm); } else { - m.getEquipment().setHelmet(new ItemStack(Material.IRON_HELMET)); - m.getEquipment().getHelmet().setDurability((short)Math.round(Math.random()*128)); + ItemStack helm = new ItemStack(Material.IRON_HELMET); + helm.setDurability((short)Math.round(Math.random()*128)); + m.getEquipment().setHelmet(helm); } if (Math.random()<0.5) { - m.getEquipment().setChestplate(new ItemStack(Material.LEATHER_CHESTPLATE)); - m.getEquipment().getChestplate().setDurability((short)Math.round(Math.random()*128)); + ItemStack helm = new ItemStack(Material.LEATHER_CHESTPLATE); + helm.setDurability((short)Math.round(Math.random()*54)); + m.getEquipment().setChestplate(helm); } else { - m.getEquipment().setChestplate(new ItemStack(Material.IRON_CHESTPLATE)); - m.getEquipment().getChestplate().setDurability((short)Math.round(Math.random()*128)); + ItemStack helm = new ItemStack(Material.IRON_CHESTPLATE); + helm.setDurability((short)Math.round(Math.random()*128)); + m.getEquipment().setChestplate(helm); } if (Math.random()<0.5) { - m.getEquipment().setLeggings(new ItemStack(Material.LEATHER_LEGGINGS)); - m.getEquipment().getLeggings().setDurability((short)Math.round(Math.random()*128)); + ItemStack helm = new ItemStack(Material.LEATHER_LEGGINGS); + helm.setDurability((short)Math.round(Math.random()*54)); + m.getEquipment().setLeggings(helm); } else { - m.getEquipment().setLeggings(new ItemStack(Material.IRON_LEGGINGS)); - m.getEquipment().getLeggings().setDurability((short)Math.round(Math.random()*128)); + ItemStack helm = new ItemStack(Material.IRON_LEGGINGS); + helm.setDurability((short)Math.round(Math.random()*128)); + m.getEquipment().setLeggings(helm); } if (Math.random()<0.5) { - m.getEquipment().setBoots(new ItemStack(Material.LEATHER_BOOTS)); - m.getEquipment().getBoots().setDurability((short)Math.round(Math.random()*128)); + ItemStack helm = new ItemStack(Material.LEATHER_BOOTS); + helm.setDurability((short)Math.round(Math.random()*54)); + m.getEquipment().setBoots(helm); } else { - m.getEquipment().setBoots(new ItemStack(Material.IRON_BOOTS)); - m.getEquipment().getBoots().setDurability((short)Math.round(Math.random()*128)); - } + ItemStack helm = new ItemStack(Material.IRON_BOOTS); + helm.setDurability((short)Math.round(Math.random()*128)); + m.getEquipment().setBoots(helm); + } + TwosideKeeper.log("Helmet durability set to "+m.getEquipment().getHelmet().getDurability(), 5); + TwosideKeeper.log("Chestplate durability set to "+m.getEquipment().getChestplate().getDurability(), 5); + TwosideKeeper.log("Leggings durability set to "+m.getEquipment().getLeggings().getDurability(), 5); + TwosideKeeper.log("Boots durability set to "+m.getEquipment().getBoots().getDurability(), 5); if (m.getEquipment().getHelmet()!=null && Math.random()<0.3) { m.getEquipment().setHelmet(RandomizeEnchantments(m.getEquipment().getHelmet(),ItemRarity.RARE)); if (Math.random()999999999999.99) { - ev.getPlayer().sendMessage("You cannot sell an item for that ridiculous amount. Please try again."); + ev.getPlayer().sendMessage("You cannot sell an item for that ridiculous amount."); } else { - ev.getPlayer().sendMessage("You cannot sell an item for free. Please try again."); + ev.getPlayer().sendMessage("You cannot sell an item for free."); } + TwosideShops.RemoveSession(ev.getPlayer()); } } else { - ev.getPlayer().sendMessage("That is not a valid number! Please try again."); + ev.getPlayer().sendMessage("That is not a valid number!"); + TwosideShops.RemoveSession(ev.getPlayer()); } break; case BUY_PRICE: @@ -906,13 +915,15 @@ public class TwosideKeeper extends JavaPlugin implements Listener { } else { if (amt>999999999999.99) { - ev.getPlayer().sendMessage("You cannot buy an item for that ridiculous amount. Please try again."); + ev.getPlayer().sendMessage("You cannot buy an item for that ridiculous amount."); } else { - ev.getPlayer().sendMessage("You cannot buy an item for free. Please try again."); + ev.getPlayer().sendMessage("You cannot buy an item for free."); } + TwosideShops.RemoveSession(ev.getPlayer()); } } else { - ev.getPlayer().sendMessage("That is not a valid number! Please try again."); + ev.getPlayer().sendMessage("That is not a valid number!"); + TwosideShops.RemoveSession(ev.getPlayer()); } break; case EDIT: @@ -932,10 +943,11 @@ public class TwosideKeeper extends JavaPlugin implements Listener { current_session.SetSession(SessionState.UPDATE); } else { if (amt<=0) { - ev.getPlayer().sendMessage("You cannot add a non-existent amount of items. Please try again."); + ev.getPlayer().sendMessage("You cannot add a non-existent amount of items."); } else { - ev.getPlayer().sendMessage("You only have "+GenericFunctions.CountItems(ev.getPlayer(), shop.GetItem())+" of "+ChatColor.GREEN+shop.GetItemName()+ChatColor.WHITE+". Please try again with a lower amount."); + ev.getPlayer().sendMessage("You only have "+GenericFunctions.CountItems(ev.getPlayer(), shop.GetItem())+" of "+ChatColor.GREEN+shop.GetItemName()+ChatColor.WHITE+"."); } + TwosideShops.RemoveSession(ev.getPlayer()); } } else { if (-amt<=shop.GetAmount()) { @@ -986,7 +998,8 @@ public class TwosideKeeper extends JavaPlugin implements Listener { } } } else { - ev.getPlayer().sendMessage("That is not a valid number! Please try again."); + ev.getPlayer().sendMessage("That is not a valid number!"); + TwosideShops.RemoveSession(ev.getPlayer()); } break; case BUY_EDIT: @@ -1045,7 +1058,8 @@ public class TwosideKeeper extends JavaPlugin implements Listener { } } } else { - ev.getPlayer().sendMessage("That is not a valid number! Please try again."); + ev.getPlayer().sendMessage("That is not a valid number!"); + TwosideShops.RemoveSession(ev.getPlayer()); } break; case UPDATE: @@ -1060,13 +1074,15 @@ public class TwosideKeeper extends JavaPlugin implements Listener { TwosideShops.RemoveSession(ev.getPlayer()); } else { if (amt>999999999999.99) { - ev.getPlayer().sendMessage("You cannot sell an item for that ridiculous amount. Please try again."); + ev.getPlayer().sendMessage("You cannot sell an item for that ridiculous amount."); } else { - ev.getPlayer().sendMessage("You cannot sell an item for free. Please try again."); + ev.getPlayer().sendMessage("You cannot sell an item for free."); } + TwosideShops.RemoveSession(ev.getPlayer()); } } else { - ev.getPlayer().sendMessage("That is not a valid number! Please try again."); + ev.getPlayer().sendMessage("That is not a valid number!"); + TwosideShops.RemoveSession(ev.getPlayer()); } break; case BUY_UPDATE: @@ -1081,13 +1097,15 @@ public class TwosideKeeper extends JavaPlugin implements Listener { TwosideShops.RemoveSession(ev.getPlayer()); } else { if (amt>999999999999.99) { - ev.getPlayer().sendMessage("You cannot buy an item for that ridiculous amount. Please try again."); + ev.getPlayer().sendMessage("You cannot buy an item for that ridiculous amount."); } else { - ev.getPlayer().sendMessage("You cannot buy an item for free. Please try again."); + ev.getPlayer().sendMessage("You cannot buy an item for free."); } + TwosideShops.RemoveSession(ev.getPlayer()); } } else { - ev.getPlayer().sendMessage("That is not a valid number! Please try again."); + ev.getPlayer().sendMessage("That is not a valid number!"); + TwosideShops.RemoveSession(ev.getPlayer()); } break; case PURCHASE: @@ -1147,7 +1165,8 @@ public class TwosideKeeper extends JavaPlugin implements Listener { TwosideShops.RemoveSession(ev.getPlayer()); } } else { - ev.getPlayer().sendMessage("That is not a valid number! Please try again."); + ev.getPlayer().sendMessage("That is not a valid number!"); + TwosideShops.RemoveSession(ev.getPlayer()); } break; case SELL: @@ -1186,7 +1205,8 @@ public class TwosideKeeper extends JavaPlugin implements Listener { TwosideShops.RemoveSession(ev.getPlayer()); } } else { - ev.getPlayer().sendMessage("That is not a valid number! Please try again."); + ev.getPlayer().sendMessage("That is not a valid number!"); + TwosideShops.RemoveSession(ev.getPlayer()); } break; default: @@ -1234,7 +1254,6 @@ public class TwosideKeeper extends JavaPlugin implements Listener { setPlayerMaxHealth(player); } },1); - if (ev.getClickedBlock()!=null && ev.getClickedBlock().getType()==Material.CHEST && TwosideRecyclingCenter.isChoosingRecyclingCenter() && ev.getPlayer().hasPermission("TwosideKeeper.recyclingcenter")) { @@ -1300,7 +1319,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { if (ev.getPlayer().getInventory().getItem(i)!=null) { log("Malleable Base Quest: Comparing "+ev.getPlayer().getInventory().getItem(i).getType()+" to "+ev.getPlayer().getInventory().getItem(i).getType(),4); } - if (ev.getPlayer().getInventory().getItem(i)!=null && GenericFunctions.UserFriendlyMaterialName(ev.getPlayer().getInventory().getItem(i)).equalsIgnoreCase(MalleableBaseQuest.getItem(ev.getPlayer().getEquipment().getItemInMainHand()))) { + if (ev.getPlayer().getInventory().getItem(i)!=null && GenericFunctions.hasNoLore(ev.getPlayer().getInventory().getItem(i)) && !Artifact.isArtifact(ev.getPlayer().getInventory().getItem(i)) && GenericFunctions.UserFriendlyMaterialName(ev.getPlayer().getInventory().getItem(i)).equalsIgnoreCase(MalleableBaseQuest.getItem(ev.getPlayer().getEquipment().getItemInMainHand()))) { //This is good. Take one away from the player to continue the quest. log(ChatColor.YELLOW+"Success! Next Item...",5); ItemStack newitem = ev.getPlayer().getInventory().getItem(i); @@ -1852,6 +1871,30 @@ public class TwosideKeeper extends JavaPlugin implements Listener { } } + @EventHandler(priority=EventPriority.LOW) + public void onAnvilPrepareCraftEvent(PrepareAnvilEvent ev) { + //The results slot was clicked. We should set the result's item name properly back to what it was. + if (ev.getResult()!=null && + ev.getInventory().getItem(0)!=null && + ev.getInventory().getItem(0).getItemMeta().hasDisplayName()) { + //It's possible we may have to fix the color code for this item. Check the first two characters. + String oldname = ev.getInventory().getItem(0).getItemMeta().getDisplayName(); + String strippedname = ChatColor.stripColor(oldname); + String colorcodes = oldname.replace(strippedname, ""); + if (colorcodes.length()==2) { + colorcodes=colorcodes.substring(1); + } else + if (colorcodes.length()==4) { + colorcodes=Character.toString(colorcodes.charAt(1))+Character.toString(colorcodes.charAt(3)); + } + log("Color codes are: <"+colorcodes+">. Length is "+colorcodes.length(),4); + //ev.getWhoClicked().sendMessage(ChatColor.getByChar(colorcodes)+"This is the color."); + ItemMeta m = ev.getResult().getItemMeta(); + m.setDisplayName(ChatColor.getByChar(colorcodes)+m.getDisplayName().replaceFirst(colorcodes, "")); + ev.getResult().setItemMeta(m); + } + } + @EventHandler(priority=EventPriority.LOW) public void onInventoryClick(InventoryClickEvent ev) { final Player player = (Player)ev.getWhoClicked(); @@ -2139,8 +2182,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { int quantity=ev.getCursor().getAmount(); log("Amount held: "+quantity,5); for (int i=0;ivirtual_inventory.get(i).getAmount()) { log("Entered Loop",5); //This is the same, and we have room to throw some in. @@ -2250,8 +2292,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { log("Amount held: "+quantity,5); for (int i=0;iev.getView().getTopInventory().getItem(i).getAmount()) { log("Entered Loop",5); //This is the same, and we have room to throw some in. @@ -2821,7 +2862,6 @@ public class TwosideKeeper extends JavaPlugin implements Listener { updateTitle(p,headshot); } } - } @EventHandler(priority=EventPriority.LOW) @@ -2833,12 +2873,22 @@ public class TwosideKeeper extends JavaPlugin implements Listener { Player p = (Player)m.getKiller(); PlayerStructure pd = (PlayerStructure)playerdata.get(p.getUniqueId()); dropmult+=pd.partybonus*0.1; + ItemStack item = p.getEquipment().getItemInMainHand(); + if (item!=null && + item.getType()!=Material.AIR && + GenericFunctions.isWeapon(item)) { + dropmult+=item.getEnchantmentLevel(Enchantment.LOOT_BONUS_MOBS)*0.1; + } } if (Math.random()<0.00390625*dropmult*ARTIFACT_RARITY) { ev.getDrops().add(Artifact.createArtifactItem(ArtifactItem.ARTIFACT_ESSENCE)); } - if (m.getType()==EntityType.ZOMBIE && - MonsterController.isZombieLeader(m)) { + if ((m.getType()==EntityType.ZOMBIE && + MonsterController.isZombieLeader(m)) || + (m.getType()==EntityType.GUARDIAN && + ((Guardian)m).isElder()) || + m.getType()==EntityType.ENDER_DRAGON || + m.getType()==EntityType.WITHER) { ev.setDroppedExp(ev.getDroppedExp()*2); dropmult+=0.4; } diff --git a/src/sig/plugin/TwosideKeeper/TwosideKeeperAPI.java b/src/sig/plugin/TwosideKeeper/TwosideKeeperAPI.java index bf2f6f2..a0c847d 100644 --- a/src/sig/plugin/TwosideKeeper/TwosideKeeperAPI.java +++ b/src/sig/plugin/TwosideKeeper/TwosideKeeperAPI.java @@ -8,6 +8,7 @@ import org.bukkit.entity.Monster; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import sig.plugin.TwosideKeeper.HelperStructures.ArtifactItem; import sig.plugin.TwosideKeeper.HelperStructures.MonsterDifficulty; import sig.plugin.TwosideKeeper.HelperStructures.MonsterType; import sig.plugin.TwosideKeeper.HelperStructures.Common.GenericFunctions; @@ -58,6 +59,16 @@ public final class TwosideKeeperAPI { return MonsterController.getMonsterDifficulty(m); } + //Artifact Commands. + public static ItemStack dropArtifactItem(ArtifactItem type) { + return Artifact.createArtifactItem(type); + } + + //Time Commands. + public static long getServerTickTime() { + return TwosideKeeper.getServerTickTime(); + } + //Hardened Item Commands. public static boolean isHardenedItem(ItemStack i) { return GenericFunctions.isHardenedItem(i);