From 2a8c6265b04137dd6c77eb038736abbaf6996209 Mon Sep 17 00:00:00 2001 From: ajan-12 <36973731+ajan-12@users.noreply.github.com> Date: Tue, 3 Sep 2019 20:25:59 +0300 Subject: [PATCH 1/8] Added Soulbound Rune. - Added Soulbound Rune with a research and recipe. - Did the requested changes. - Moved isSoulbound check from DamageListener.java to SlimefunManager.java. - Added a new ItemHandler called ItemDropHandler. --- .../Slimefun/Objects/SlimefunItem/items/SoulboundRune.java | 4 ++++ .../Slimefun/Objects/handlers/ItemDropHandler.java | 4 ++++ 2 files changed, 8 insertions(+) create mode 100644 src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java create mode 100644 src/me/mrCookieSlime/Slimefun/Objects/handlers/ItemDropHandler.java diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java new file mode 100644 index 000000000..29ad507c9 --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java @@ -0,0 +1,4 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; + +public class SoulboundRune { +} diff --git a/src/me/mrCookieSlime/Slimefun/Objects/handlers/ItemDropHandler.java b/src/me/mrCookieSlime/Slimefun/Objects/handlers/ItemDropHandler.java new file mode 100644 index 000000000..4e07eef22 --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/Objects/handlers/ItemDropHandler.java @@ -0,0 +1,4 @@ +package me.mrCookieSlime.Slimefun.Objects.handlers; + +public interface ItemDropHandler { +} From 7501dc9afbb4f32c5706ab692626d8a8c9efd672 Mon Sep 17 00:00:00 2001 From: ajan-12 <36973731+ajan-12@users.noreply.github.com> Date: Tue, 3 Sep 2019 20:30:58 +0300 Subject: [PATCH 2/8] Actual commit adding the Soulbound Rune. - Added Soulbound Rune with a research and recipe. - Did the requested changes. - Moved isSoulbound check from DamageListener.java to SlimefunManager.java. - Added a new ItemHandler called ItemDropHandler. --- .../Slimefun/Lists/SlimefunItems.java | 14 ++- .../SlimefunItem/items/SoulboundRune.java | 116 +++++++++++++++++- .../Objects/handlers/ItemDropHandler.java | 13 +- .../Slimefun/Setup/Messages.java | 2 + .../Slimefun/Setup/ResearchSetup.java | 1 + .../Slimefun/Setup/SlimefunManager.java | 46 ++++++- .../Slimefun/Setup/SlimefunSetup.java | 5 + .../Slimefun/listeners/DamageListener.java | 30 +---- .../Slimefun/listeners/ItemListener.java | 9 ++ 9 files changed, 198 insertions(+), 38 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java index 9096d7832..0ea50cc93 100644 --- a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java +++ b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java @@ -531,6 +531,7 @@ public final class SlimefunItems { public static final ItemStack RUNE_ENDER; public static final ItemStack RUNE_RAINBOW; public static final ItemStack RUNE_LIGHTNING; + public static final ItemStack RUNE_SOULBOUND; static { ItemStack itemB = new ItemStack(Material.FIREWORK_STAR); @@ -563,7 +564,7 @@ public final class SlimefunItems { ItemStack itemE = new ItemStack(Material.FIREWORK_STAR); FireworkEffectMeta imE = (FireworkEffectMeta) itemE.getItemMeta(); - imE.setEffect(FireworkEffect.builder().with(Type.BURST).withColor(Color.ORANGE).build()); + imE.setEffect(FireworkEffect.builder().with(Type.BURST).withColor(Color.fromRGB(112, 47, 7)).build()); imE.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&7Ancient Rune &8&l[&c&lEarth&8&l]")); itemE.setItemMeta(imE); RUNE_EARTH = itemE; @@ -577,17 +578,24 @@ public final class SlimefunItems { ItemStack itemR = new ItemStack(Material.FIREWORK_STAR); FireworkEffectMeta imR = (FireworkEffectMeta) itemR.getItemMeta(); - imR.setEffect(FireworkEffect.builder().with(Type.BURST).withColor(Color.PURPLE).build()); + imR.setEffect(FireworkEffect.builder().with(Type.BURST).withColor(Color.FUCHSIA).build()); imR.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&7Ancient Rune &8&l[&d&lRainbow&8&l]")); itemR.setItemMeta(imR); RUNE_RAINBOW = itemR; ItemStack itemL = new ItemStack(Material.FIREWORK_STAR); FireworkEffectMeta imL = (FireworkEffectMeta) itemL.getItemMeta(); - imL.setEffect(FireworkEffect.builder().with(Type.BURST).withColor(Color.YELLOW).build()); + imL.setEffect(FireworkEffect.builder().with(Type.BURST).withColor(Color.fromRGB(255, 255, 95)).build()); imL.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&7Ancient Rune &8&l[&e&lLightning&8&l]")); itemL.setItemMeta(imL); RUNE_LIGHTNING = itemL; + + ItemStack itemS = new ItemStack(Material.FIREWORK_STAR); + FireworkEffectMeta imS = (FireworkEffectMeta) itemS.getItemMeta(); + imS.setEffect(FireworkEffect.builder().with(Type.BURST).withColor(Color.fromRGB(47, 0, 117)).build()); + imS.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&7Ancient Rune &8&l[&5&lSoulbound&8&l]")); + itemS.setItemMeta(imS); + RUNE_SOULBOUND = itemS; } /* Electricity */ diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java index 29ad507c9..56450dcc7 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java @@ -1,4 +1,118 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; -public class SoulboundRune { +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Sound; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Item; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; +import me.mrCookieSlime.Slimefun.Objects.Category; +import me.mrCookieSlime.Slimefun.Objects.Research; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemDropHandler; +import me.mrCookieSlime.Slimefun.Setup.Messages; +import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; +import me.mrCookieSlime.Slimefun.SlimefunPlugin; +import me.mrCookieSlime.Slimefun.api.PlayerProfile; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +public class SoulboundRune extends SimpleSlimefunItem { + + public SoulboundRune(Category category, ItemStack item, String id, RecipeType type, ItemStack[] recipe) { + super(category, item, id, type, recipe); + } + + @Override + public ItemDropHandler getItemHandler() { + return (e, p, i) -> { + ItemStack item = i.getItemStack(); + // We are using a boolean array because we will change the boolean's value inside a lambda + // but you can't access non-final variables from outside the lambda inside the lambda. + final boolean[] boo = {false}; + + if (SlimefunManager.isItemSimiliar(item, SlimefunItems.RUNE_SOULBOUND, true)) { + if (!PlayerProfile.fromUUID(p.getUniqueId()).hasUnlocked(Research.getByID(246))) { + Messages.local.sendTranslation(p, "messages.not-researched", true); + return true; + } + + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> { + // Being sure the entity is still valid and not picked up or whatsoever. + if (!i.isValid()) return; + + Location l = i.getLocation(); + Collection entites = l.getWorld().getNearbyEntities(l, 1.5, 1.5, 1.5, + entity -> entity.getType() == EntityType.DROPPED_ITEM && + !SlimefunManager.isItemSimiliar(((Item) entity).getItemStack(), SlimefunItems.RUNE_SOULBOUND, true) + ); + + ItemStack ench = null; + Item ent = null; + // Collections do not have a #get method so we need to use a for loop. + // We do not use streams for foreach loops as they are more resource consuming. + for (Entity entity: entites) { + ItemStack dropped = ((Item) entity).getItemStack(); + if (SlimefunManager.isItemSoulbound(dropped)) { + boo[0] = false; + return; + } + ench = ((Item) entity).getItemStack(); + ent = (Item) entity; + break; + } + + if (ench == null || ench.getAmount() == 1) { + e.setCancelled(true); + + Item finalEnt = ent; + ItemStack finalEnch = ench; + + ItemMeta enchMeta = finalEnch.getItemMeta(); + if (enchMeta == null) enchMeta = Bukkit.getItemFactory().getItemMeta(finalEnch.getType()); + ItemMeta finalMeta = enchMeta; + + List lore = finalMeta.getLore(); + if (lore == null) lore = new ArrayList<>(); + List finalLore = lore; + + // This lightning is just an effect, it deals no damage. + l.getWorld().strikeLightningEffect(l); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> { + + // Being sure entities are still valid and not picked up or whatsoever. + if (i.isValid() && finalEnt.isValid()) { + + l.getWorld().createExplosion(l, 0.0F); + l.getWorld().playSound(l, Sound.ENTITY_GENERIC_EXPLODE, 0.3F, 1F); + + finalLore.add(ChatColor.GRAY + "Soulbound"); + + finalMeta.setLore(finalLore); + finalEnch.setItemMeta(finalMeta); + + finalEnt.remove(); + i.remove(); + l.getWorld().dropItemNaturally(l, finalEnch); + + Messages.local.sendTranslation(p, "messages.soulbound-rune.success", true); + boo[0] = true; + } + }, 10L); + } else { + Messages.local.sendTranslation(p, "messages.soulbound-rune.fail", true); + } + }, 20L); + } + return boo[0]; + }; + } } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/handlers/ItemDropHandler.java b/src/me/mrCookieSlime/Slimefun/Objects/handlers/ItemDropHandler.java index 4e07eef22..ed1913840 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/handlers/ItemDropHandler.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/handlers/ItemDropHandler.java @@ -1,4 +1,15 @@ package me.mrCookieSlime.Slimefun.Objects.handlers; -public interface ItemDropHandler { +import org.bukkit.entity.Item; +import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerDropItemEvent; + +@FunctionalInterface +public interface ItemDropHandler extends ItemHandler { + + boolean onItemDrop(PlayerDropItemEvent e, Player p, Item item); + + default String toCodename() { + return "ItemDropHandler"; + } } diff --git a/src/me/mrCookieSlime/Slimefun/Setup/Messages.java b/src/me/mrCookieSlime/Slimefun/Setup/Messages.java index 718f24b9f..b5ebfa34c 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/Messages.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/Messages.java @@ -56,6 +56,8 @@ public final class Messages { local.setDefault("messages.talisman.knight", "&a&oYour Talisman gave you 5 Seconds of Regeneration"); local.setDefault("messages.talisman.whirlwind", "&a&oYour Talisman reflected the Projectile"); local.setDefault("messages.talisman.wizard", "&a&oYour Talisman has given you a better Fortune Level but maybe also lowered some other Enchantment Levels"); + local.setDefault("messages.soulbound-rune.fail", "&cYou can only enchant 1 item with soulbound at a time."); + local.setDefault("messages.soulbound-rune.success", "&aSuccessfully soulbound enchanted this item."); local.setDefault("messages.broken-leg", "&c&oSeems like you broke your Leg, maybe a Splint could help?"); local.setDefault("messages.fixed-leg", "&a&oThe Splint helps. It feels better now."); local.setDefault("messages.start-bleeding", "&c&oYou started to bleed. Maybe a Bandage could help?"); diff --git a/src/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java index a8bbd7377..195947c07 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java @@ -243,5 +243,6 @@ public final class ResearchSetup { Slimefun.registerResearch(new Research(243, "A Dry Day", 15), SlimefunItems.AUTO_DRIER); Slimefun.registerResearch(new Research(244, "Diet Cookie", 3), SlimefunItems.DIET_COOKIE); Slimefun.registerResearch(new Research(245, "Storm Staff", 30), SlimefunItems.STAFF_STORM); + Slimefun.registerResearch(new Research(246, "Soulbound Rune", 60), SlimefunItems.RUNE_SOULBOUND); } } diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java index f05aa753d..b1e3ada80 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java @@ -3,15 +3,24 @@ package me.mrCookieSlime.Slimefun.Setup; import java.util.ArrayList; import java.util.List; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.potion.PotionEffect; +import me.mrCookieSlime.EmeraldEnchants.EmeraldEnchants; +import me.mrCookieSlime.EmeraldEnchants.ItemEnchantment; import me.mrCookieSlime.Slimefun.Lists.Categories; import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunArmorPiece; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SoulboundItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.VanillaItem; +import me.mrCookieSlime.Slimefun.SlimefunPlugin; public final class SlimefunManager { @@ -116,14 +125,41 @@ public final class SlimefunManager { } private static boolean equalsLore(List lore, List lore2) { - String string1 = ""; - String string2 = ""; + StringBuilder string1 = new StringBuilder(); + StringBuilder string2 = new StringBuilder(); + String colors = ChatColor.YELLOW.toString() + ChatColor.YELLOW.toString() + ChatColor.GRAY.toString(); for (String string: lore) { - if (!string.startsWith("&e&e&7")) string1 = string1 + "-NEW LINE-" + string; + if (string.equals(ChatColor.GRAY + "Soulbound")) continue; + if (!string.startsWith(colors)) string1.append("-NEW LINE-").append(string); } for (String string: lore2) { - if (!string.startsWith("&e&e&7")) string2 = string2 + "-NEW LINE-" + string; + if (string.equals(ChatColor.GRAY + "Soulbound")) continue; + if (!string.startsWith(colors)) string2.append("-NEW LINE-").append(string); + } + return string1.toString().equals(string2.toString()); + } + + public static boolean isItemSoulbound(ItemStack item) { + if (item == null || item.getType() == Material.AIR) return false; + else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BOUND_BACKPACK, false)) return true; + else { + ItemStack strippedItem = item.clone(); + + for (Enchantment enchantment : item.getEnchantments().keySet()) { + strippedItem.removeEnchantment(enchantment); + } + + if (SlimefunPlugin.getHooks().isEmeraldEnchantsInstalled()) { + for (ItemEnchantment enchantment : EmeraldEnchants.getInstance().getRegistry().getEnchantments(item)){ + EmeraldEnchants.getInstance().getRegistry().applyEnchantment(strippedItem, enchantment.getEnchantment(), 0); + } + } + if (SlimefunItem.getByItem(strippedItem) instanceof SoulboundItem) return true; + else if (item.hasItemMeta()) { + ItemMeta im = item.getItemMeta(); + return (im.hasLore() && im.getLore().contains(ChatColor.GRAY + "Soulbound")); + } + return false; } - return string1.equals(string2); } } diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index 32ccae43c..9795d1277 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -101,6 +101,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.PickaxeOfTheSeeker; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.PickaxeOfVeinMining; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.SeismicAxe; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.SmeltersPickaxe; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.SoulboundRune; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.StormStaff; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.SwordOfBeheading; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.TelepositionScroll; @@ -2892,6 +2893,10 @@ public final class SlimefunSetup { new ItemStack[] {new ItemStack(Material.RED_DYE), SlimefunItems.MAGIC_LUMP_3, new ItemStack(Material.CYAN_DYE), new ItemStack(Material.WHITE_WOOL), SlimefunItems.RUNE_ENDER, new ItemStack(Material.WHITE_WOOL), new ItemStack(Material.YELLOW_DYE), SlimefunItems.ENDER_LUMP_3, new ItemStack(Material.MAGENTA_DYE)}) .register(true); + new SoulboundRune(Categories.LUMPS_AND_MAGIC, SlimefunItems.RUNE_SOULBOUND, "ANCIENT_RUNE_SOULBOUND", RecipeType.ANCIENT_ALTAR, + new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.MAGIC_LUMP_3, new ItemStack(Material.ENDER_PEARL), SlimefunItems.RUNE_ENDER, new ItemStack(Material.ENDER_PEARL), SlimefunItems.MAGIC_LUMP_3, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.MAGIC_LUMP_3}) + .register(true); + new InfernalBonemeal(Categories.MAGIC, SlimefunItems.INFERNAL_BONEMEAL, "INFERNAL_BONEMEAL", RecipeType.ANCIENT_ALTAR, new ItemStack[] {new ItemStack(Material.NETHER_WART), SlimefunItems.RUNE_EARTH, new ItemStack(Material.NETHER_WART), SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.BONE_MEAL), SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.NETHER_WART), new ItemStack(Material.BLAZE_POWDER), new ItemStack(Material.NETHER_WART)}, new CustomItem(SlimefunItems.INFERNAL_BONEMEAL, 8)) .register(true); diff --git a/src/me/mrCookieSlime/Slimefun/listeners/DamageListener.java b/src/me/mrCookieSlime/Slimefun/listeners/DamageListener.java index e64d53b3b..98bbcf78c 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/DamageListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/DamageListener.java @@ -5,7 +5,6 @@ import java.util.Date; import java.util.Iterator; import org.bukkit.Material; -import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -15,12 +14,9 @@ import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.inventory.ItemStack; -import me.mrCookieSlime.EmeraldEnchants.EmeraldEnchants; -import me.mrCookieSlime.EmeraldEnchants.ItemEnchantment; import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SoulboundItem; import me.mrCookieSlime.Slimefun.Objects.handlers.EntityKillHandler; import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; @@ -49,7 +45,7 @@ public class DamageListener implements Listener { for (int slot = 0; slot < p.getInventory().getSize(); slot++) { ItemStack item = p.getInventory().getItem(slot); - if (isSoulbound(item)) { + if (SlimefunManager.isItemSoulbound(item)) { Soul.storeItem(p.getUniqueId(), slot, item); } } @@ -57,7 +53,7 @@ public class DamageListener implements Listener { Iterator drops = e.getDrops().iterator(); while (drops.hasNext()) { ItemStack item = drops.next(); - if (isSoulbound(item)) drops.remove(); + if (SlimefunManager.isItemSoulbound(item)) drops.remove(); } } @@ -82,13 +78,6 @@ public class DamageListener implements Listener { } } - private boolean isSoulbound(ItemStack item) { - if (item == null || item.getType() == null || item.getType() == Material.AIR) return false; - else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BOUND_BACKPACK, false)) return true; - else if (SlimefunItem.getByItem(removeEnchantments(item)) instanceof SoulboundItem) return true; - else return false; - } - @EventHandler public void onArrowHit(EntityDamageEvent e) { if (e.getEntity() instanceof Player && e.getCause() == DamageCause.FALL && utilities.damage.contains(e.getEntity().getUniqueId())) { @@ -101,19 +90,4 @@ public class DamageListener implements Listener { public void onRespawn(PlayerRespawnEvent e) { Soul.retrieveItems(e.getPlayer()); } - - private ItemStack removeEnchantments(ItemStack itemStack) { - ItemStack strippedItem = itemStack.clone(); - - for (Enchantment enchantment : itemStack.getEnchantments().keySet()) { - strippedItem.removeEnchantment(enchantment); - } - - if (SlimefunPlugin.getHooks().isEmeraldEnchantsInstalled()) { - for(ItemEnchantment enchantment : EmeraldEnchants.getInstance().getRegistry().getEnchantments(itemStack)){ - EmeraldEnchants.getInstance().getRegistry().applyEnchantment(strippedItem, enchantment.getEnchantment(), 0); - } - } - return strippedItem; - } } diff --git a/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java b/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java index 4b0b9a7d6..8aa809e56 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java @@ -26,6 +26,7 @@ import org.bukkit.event.inventory.InventoryMoveItemEvent; import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.inventory.PrepareItemCraftEvent; import org.bukkit.event.player.PlayerBucketEmptyEvent; +import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerItemConsumeEvent; import org.bukkit.inventory.BrewerInventory; @@ -47,6 +48,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Juice; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.MultiTool; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.handlers.ItemConsumptionHandler; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemDropHandler; import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler; import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; import me.mrCookieSlime.Slimefun.Setup.Messages; @@ -440,4 +442,11 @@ public class ItemListener implements Listener { if (inventory instanceof BrewerInventory && inventory.getHolder() instanceof BrewingStand && e.getRawSlot() < inventory.getSize()) e.setCancelled(SlimefunItem.getByItem(e.getCursor()) != null); } + @EventHandler + public void onItemDrop(PlayerDropItemEvent e) { + for (ItemHandler handler : SlimefunItem.getHandlers("ItemDropHandler")) { + if (((ItemDropHandler) handler).onItemDrop(e, e.getPlayer(), e.getItemDrop())) return; + } + } + } From a98517f8cc53236f0c3023f8afa0e33d060bd6b1 Mon Sep 17 00:00:00 2001 From: ajan-12 <36973731+ajan-12@users.noreply.github.com> Date: Thu, 5 Sep 2019 15:02:26 +0300 Subject: [PATCH 3/8] Did the requested changes. --- .../SlimefunItem/items/SoulboundRune.java | 21 +++++++++---------- .../Slimefun/Setup/Messages.java | 4 ++-- .../Slimefun/Setup/SlimefunManager.java | 6 ++---- .../Slimefun/Setup/SlimefunSetup.java | 2 +- 4 files changed, 15 insertions(+), 18 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java index 56450dcc7..be12c0831 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java @@ -26,6 +26,7 @@ import java.util.Collection; import java.util.List; public class SoulboundRune extends SimpleSlimefunItem { + private Research research = null; public SoulboundRune(Category category, ItemStack item, String id, RecipeType type, ItemStack[] recipe) { super(category, item, id, type, recipe); @@ -35,12 +36,8 @@ public class SoulboundRune extends SimpleSlimefunItem { public ItemDropHandler getItemHandler() { return (e, p, i) -> { ItemStack item = i.getItemStack(); - // We are using a boolean array because we will change the boolean's value inside a lambda - // but you can't access non-final variables from outside the lambda inside the lambda. - final boolean[] boo = {false}; - if (SlimefunManager.isItemSimiliar(item, SlimefunItems.RUNE_SOULBOUND, true)) { - if (!PlayerProfile.fromUUID(p.getUniqueId()).hasUnlocked(Research.getByID(246))) { + if (!PlayerProfile.fromUUID(p.getUniqueId()).hasUnlocked(research)) { Messages.local.sendTranslation(p, "messages.not-researched", true); return true; } @@ -61,10 +58,7 @@ public class SoulboundRune extends SimpleSlimefunItem { // We do not use streams for foreach loops as they are more resource consuming. for (Entity entity: entites) { ItemStack dropped = ((Item) entity).getItemStack(); - if (SlimefunManager.isItemSoulbound(dropped)) { - boo[0] = false; - return; - } + if (SlimefunManager.isItemSoulbound(dropped)) return; ench = ((Item) entity).getItemStack(); ent = (Item) entity; break; @@ -104,15 +98,20 @@ public class SoulboundRune extends SimpleSlimefunItem { l.getWorld().dropItemNaturally(l, finalEnch); Messages.local.sendTranslation(p, "messages.soulbound-rune.success", true); - boo[0] = true; } }, 10L); } else { Messages.local.sendTranslation(p, "messages.soulbound-rune.fail", true); } }, 20L); + return true; } - return boo[0]; + return false; }; } + + @Override + public void postRegister() { + research = Research.getByID(246); + } } diff --git a/src/me/mrCookieSlime/Slimefun/Setup/Messages.java b/src/me/mrCookieSlime/Slimefun/Setup/Messages.java index b5ebfa34c..d6b1fff38 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/Messages.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/Messages.java @@ -56,8 +56,8 @@ public final class Messages { local.setDefault("messages.talisman.knight", "&a&oYour Talisman gave you 5 Seconds of Regeneration"); local.setDefault("messages.talisman.whirlwind", "&a&oYour Talisman reflected the Projectile"); local.setDefault("messages.talisman.wizard", "&a&oYour Talisman has given you a better Fortune Level but maybe also lowered some other Enchantment Levels"); - local.setDefault("messages.soulbound-rune.fail", "&cYou can only enchant 1 item with soulbound at a time."); - local.setDefault("messages.soulbound-rune.success", "&aSuccessfully soulbound enchanted this item."); + local.setDefault("messages.soulbound-rune.fail", "&cYou can only bind one item to your soul at a time."); + local.setDefault("messages.soulbound-rune.success", "&aYou have successfully bound this item to your soul! You will keep it when you die."); local.setDefault("messages.broken-leg", "&c&oSeems like you broke your Leg, maybe a Splint could help?"); local.setDefault("messages.fixed-leg", "&a&oThe Splint helps. It feels better now."); local.setDefault("messages.start-bleeding", "&c&oYou started to bleed. Maybe a Bandage could help?"); diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java index b1e3ada80..1a0d1f438 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java @@ -129,12 +129,10 @@ public final class SlimefunManager { StringBuilder string2 = new StringBuilder(); String colors = ChatColor.YELLOW.toString() + ChatColor.YELLOW.toString() + ChatColor.GRAY.toString(); for (String string: lore) { - if (string.equals(ChatColor.GRAY + "Soulbound")) continue; - if (!string.startsWith(colors)) string1.append("-NEW LINE-").append(string); + if (!string.equals(ChatColor.GRAY + "Soulbound") && !string.startsWith(colors)) string1.append("-NEW LINE-").append(string); } for (String string: lore2) { - if (string.equals(ChatColor.GRAY + "Soulbound")) continue; - if (!string.startsWith(colors)) string2.append("-NEW LINE-").append(string); + if (!string.equals(ChatColor.GRAY + "Soulbound") && !string.startsWith(colors)) string2.append("-NEW LINE-").append(string); } return string1.toString().equals(string2.toString()); } diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index 9795d1277..a07ee949c 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -2894,7 +2894,7 @@ public final class SlimefunSetup { .register(true); new SoulboundRune(Categories.LUMPS_AND_MAGIC, SlimefunItems.RUNE_SOULBOUND, "ANCIENT_RUNE_SOULBOUND", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.MAGIC_LUMP_3, new ItemStack(Material.ENDER_PEARL), SlimefunItems.RUNE_ENDER, new ItemStack(Material.ENDER_PEARL), SlimefunItems.MAGIC_LUMP_3, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.MAGIC_LUMP_3}) + new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_ENDER, SlimefunItems.ENDER_LUMP_3, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.MAGIC_LUMP_3}) .register(true); new InfernalBonemeal(Categories.MAGIC, SlimefunItems.INFERNAL_BONEMEAL, "INFERNAL_BONEMEAL", RecipeType.ANCIENT_ALTAR, From ebde63a04e450f103c047b1c460d4b3b612b6919 Mon Sep 17 00:00:00 2001 From: ajan-12 <36973731+ajan-12@users.noreply.github.com> Date: Thu, 5 Sep 2019 17:16:10 +0300 Subject: [PATCH 4/8] Did the requested changes vol.2 --- .../SlimefunItem/items/SoulboundRune.java | 57 +++++++------------ 1 file changed, 22 insertions(+), 35 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java index be12c0831..8dce0ec49 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java @@ -13,20 +13,18 @@ import org.bukkit.inventory.meta.ItemMeta; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.Research; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.handlers.ItemDropHandler; import me.mrCookieSlime.Slimefun.Setup.Messages; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.SlimefunPlugin; -import me.mrCookieSlime.Slimefun.api.PlayerProfile; +import me.mrCookieSlime.Slimefun.api.Slimefun; import java.util.ArrayList; import java.util.Collection; import java.util.List; public class SoulboundRune extends SimpleSlimefunItem { - private Research research = null; public SoulboundRune(Category category, ItemStack item, String id, RecipeType type, ItemStack[] recipe) { super(category, item, id, type, recipe); @@ -37,7 +35,7 @@ public class SoulboundRune extends SimpleSlimefunItem { return (e, p, i) -> { ItemStack item = i.getItemStack(); if (SlimefunManager.isItemSimiliar(item, SlimefunItems.RUNE_SOULBOUND, true)) { - if (!PlayerProfile.fromUUID(p.getUniqueId()).hasUnlocked(research)) { + if (!Slimefun.hasUnlocked(p, SlimefunItems.RUNE_SOULBOUND, false)) { Messages.local.sendTranslation(p, "messages.not-researched", true); return true; } @@ -48,54 +46,47 @@ public class SoulboundRune extends SimpleSlimefunItem { Location l = i.getLocation(); Collection entites = l.getWorld().getNearbyEntities(l, 1.5, 1.5, 1.5, - entity -> entity.getType() == EntityType.DROPPED_ITEM && - !SlimefunManager.isItemSimiliar(((Item) entity).getItemStack(), SlimefunItems.RUNE_SOULBOUND, true) + entity -> entity.getType() == EntityType.DROPPED_ITEM && entity instanceof Item && + !SlimefunManager.isItemSimiliar(((Item) entity).getItemStack(), SlimefunItems.RUNE_SOULBOUND, true) && + !SlimefunManager.isItemSoulbound(((Item) entity).getItemStack()) ); + if (entites.size() < 1) return; - ItemStack ench = null; - Item ent = null; + ItemStack ench; + Item ent; // Collections do not have a #get method so we need to use a for loop. // We do not use streams for foreach loops as they are more resource consuming. - for (Entity entity: entites) { - ItemStack dropped = ((Item) entity).getItemStack(); - if (SlimefunManager.isItemSoulbound(dropped)) return; - ench = ((Item) entity).getItemStack(); - ent = (Item) entity; - break; - } + Entity entity = entites.stream().findFirst().get(); + ench = ((Item) entity).getItemStack(); + ent = (Item) entity; - if (ench == null || ench.getAmount() == 1) { + if (ench.getAmount() == 1) { e.setCancelled(true); - Item finalEnt = ent; - ItemStack finalEnch = ench; + ItemMeta enchMeta = ench.getItemMeta(); - ItemMeta enchMeta = finalEnch.getItemMeta(); - if (enchMeta == null) enchMeta = Bukkit.getItemFactory().getItemMeta(finalEnch.getType()); - ItemMeta finalMeta = enchMeta; - - List lore = finalMeta.getLore(); - if (lore == null) lore = new ArrayList<>(); - List finalLore = lore; + List lore; + if (enchMeta.hasLore()) lore = enchMeta.getLore(); + else lore = new ArrayList<>(); // This lightning is just an effect, it deals no damage. l.getWorld().strikeLightningEffect(l); Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> { // Being sure entities are still valid and not picked up or whatsoever. - if (i.isValid() && finalEnt.isValid()) { + if (i.isValid() && ent.isValid()) { l.getWorld().createExplosion(l, 0.0F); l.getWorld().playSound(l, Sound.ENTITY_GENERIC_EXPLODE, 0.3F, 1F); - finalLore.add(ChatColor.GRAY + "Soulbound"); + lore.add(ChatColor.GRAY + "Soulbound"); - finalMeta.setLore(finalLore); - finalEnch.setItemMeta(finalMeta); + enchMeta.setLore(lore); + ench.setItemMeta(enchMeta); - finalEnt.remove(); + ent.remove(); i.remove(); - l.getWorld().dropItemNaturally(l, finalEnch); + l.getWorld().dropItemNaturally(l, ench); Messages.local.sendTranslation(p, "messages.soulbound-rune.success", true); } @@ -110,8 +101,4 @@ public class SoulboundRune extends SimpleSlimefunItem { }; } - @Override - public void postRegister() { - research = Research.getByID(246); - } } From f4da4d242334ef7ee48151f51fe009253668d96c Mon Sep 17 00:00:00 2001 From: ajan-12 <36973731+ajan-12@users.noreply.github.com> Date: Thu, 5 Sep 2019 17:38:04 +0300 Subject: [PATCH 5/8] Did the requested changes vol.3 --- .../SlimefunItem/items/SoulboundRune.java | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java index 8dce0ec49..d3a468a0a 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java @@ -35,10 +35,7 @@ public class SoulboundRune extends SimpleSlimefunItem { return (e, p, i) -> { ItemStack item = i.getItemStack(); if (SlimefunManager.isItemSimiliar(item, SlimefunItems.RUNE_SOULBOUND, true)) { - if (!Slimefun.hasUnlocked(p, SlimefunItems.RUNE_SOULBOUND, false)) { - Messages.local.sendTranslation(p, "messages.not-researched", true); - return true; - } + if (!Slimefun.hasUnlocked(p, SlimefunItems.RUNE_SOULBOUND, true)) return true; Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> { // Being sure the entity is still valid and not picked up or whatsoever. @@ -46,19 +43,14 @@ public class SoulboundRune extends SimpleSlimefunItem { Location l = i.getLocation(); Collection entites = l.getWorld().getNearbyEntities(l, 1.5, 1.5, 1.5, - entity -> entity.getType() == EntityType.DROPPED_ITEM && entity instanceof Item && - !SlimefunManager.isItemSimiliar(((Item) entity).getItemStack(), SlimefunItems.RUNE_SOULBOUND, true) && - !SlimefunManager.isItemSoulbound(((Item) entity).getItemStack()) + entity -> entity instanceof Item && !SlimefunManager.isItemSoulbound(((Item) entity).getItemStack()) && + !SlimefunManager.isItemSimiliar(((Item) entity).getItemStack(), SlimefunItems.RUNE_SOULBOUND, true) ); if (entites.size() < 1) return; - ItemStack ench; - Item ent; - // Collections do not have a #get method so we need to use a for loop. - // We do not use streams for foreach loops as they are more resource consuming. Entity entity = entites.stream().findFirst().get(); - ench = ((Item) entity).getItemStack(); - ent = (Item) entity; + ItemStack ench = ((Item) entity).getItemStack(); + Item ent = (Item) entity; if (ench.getAmount() == 1) { e.setCancelled(true); From 05bd9337ab898079bf1135a81a4d44341661305e Mon Sep 17 00:00:00 2001 From: ajan-12 <36973731+ajan-12@users.noreply.github.com> Date: Thu, 5 Sep 2019 20:35:16 +0300 Subject: [PATCH 6/8] Did the requested changes vol.4 --- src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java | 1 + .../Slimefun/Objects/SlimefunItem/items/SoulboundRune.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java index 88bc90a68..e0131c6d5 100644 --- a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java +++ b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java @@ -601,6 +601,7 @@ public final class SlimefunItems { imS.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&7Ancient Rune &8&l[&5&lSoulbound&8&l]")); itemS.setItemMeta(imS); RUNE_SOULBOUND = itemS; + Slimefun.addHint("ANCIENT_RUNE_SOULBOUND", "&eThrow this onto a dropped item to", "&5bind ðat item to your soul.", "&eIt is advised for you use this rune", "&eon &6important &eitems."); } /* Electricity */ diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java index d3a468a0a..d25333b93 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java @@ -46,7 +46,7 @@ public class SoulboundRune extends SimpleSlimefunItem { entity -> entity instanceof Item && !SlimefunManager.isItemSoulbound(((Item) entity).getItemStack()) && !SlimefunManager.isItemSimiliar(((Item) entity).getItemStack(), SlimefunItems.RUNE_SOULBOUND, true) ); - if (entites.size() < 1) return; + if (entites.isEmpty()) return; Entity entity = entites.stream().findFirst().get(); ItemStack ench = ((Item) entity).getItemStack(); From 63a261d51ccf1c8aba13d2dd593408f5da429951 Mon Sep 17 00:00:00 2001 From: ajan-12 <36973731+ajan-12@users.noreply.github.com> Date: Thu, 5 Sep 2019 20:43:36 +0300 Subject: [PATCH 7/8] Did the requested changes vol.infinite --- src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java index e0131c6d5..ca07daf2a 100644 --- a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java +++ b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java @@ -1,6 +1,8 @@ package me.mrCookieSlime.Slimefun.Lists; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.logging.Level; @@ -599,9 +601,15 @@ public final class SlimefunItems { FireworkEffectMeta imS = (FireworkEffectMeta) itemS.getItemMeta(); imS.setEffect(FireworkEffect.builder().with(Type.BURST).withColor(Color.fromRGB(47, 0, 117)).build()); imS.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&7Ancient Rune &8&l[&5&lSoulbound&8&l]")); + List lore = new ArrayList<>(); + lore.add("&eThrow this onto a dropped item to"); + lore.add("&5bind ðat item to your soul."); + lore.add(" "); + lore.add("&eIt is advised for you use this rune"); + lore.add("&eon &6important &eitems."); + imS.setLore(lore); itemS.setItemMeta(imS); RUNE_SOULBOUND = itemS; - Slimefun.addHint("ANCIENT_RUNE_SOULBOUND", "&eThrow this onto a dropped item to", "&5bind ðat item to your soul.", "&eIt is advised for you use this rune", "&eon &6important &eitems."); } /* Electricity */ From 7399e1f0d16787df1b09c64008fee8e4bf305cab Mon Sep 17 00:00:00 2001 From: ajan-12 <36973731+ajan-12@users.noreply.github.com> Date: Thu, 5 Sep 2019 22:36:27 +0300 Subject: [PATCH 8/8] Hopefully did the requested changes for the last time. --- src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java index ca07daf2a..50ae08976 100644 --- a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java +++ b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java @@ -602,11 +602,13 @@ public final class SlimefunItems { imS.setEffect(FireworkEffect.builder().with(Type.BURST).withColor(Color.fromRGB(47, 0, 117)).build()); imS.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&7Ancient Rune &8&l[&5&lSoulbound&8&l]")); List lore = new ArrayList<>(); - lore.add("&eThrow this onto a dropped item to"); - lore.add("&5bind ðat item to your soul."); + lore.add(ChatColor.YELLOW + "Drop this rune onto a dropped item to"); + lore.add(ChatColor.DARK_PURPLE + "bind " + ChatColor.YELLOW + "that item to your soul."); lore.add(" "); - lore.add("&eIt is advised for you use this rune"); - lore.add("&eon &6important &eitems."); + lore.add(ChatColor.YELLOW + "It is advised that you only use this rune"); + lore.add(ChatColor.YELLOW + "on " + ChatColor.GOLD + "important " + ChatColor.YELLOW + "items."); + lore.add(" "); + lore.add(ChatColor.YELLOW + "Items bound to your soul won't drop on death."); imS.setLore(lore); itemS.setItemMeta(imS); RUNE_SOULBOUND = itemS;