mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-20 11:45:51 +00:00
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.
This commit is contained in:
parent
2a8c6265b0
commit
7501dc9afb
@ -531,6 +531,7 @@ public final class SlimefunItems {
|
|||||||
public static final ItemStack RUNE_ENDER;
|
public static final ItemStack RUNE_ENDER;
|
||||||
public static final ItemStack RUNE_RAINBOW;
|
public static final ItemStack RUNE_RAINBOW;
|
||||||
public static final ItemStack RUNE_LIGHTNING;
|
public static final ItemStack RUNE_LIGHTNING;
|
||||||
|
public static final ItemStack RUNE_SOULBOUND;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
ItemStack itemB = new ItemStack(Material.FIREWORK_STAR);
|
ItemStack itemB = new ItemStack(Material.FIREWORK_STAR);
|
||||||
@ -563,7 +564,7 @@ public final class SlimefunItems {
|
|||||||
|
|
||||||
ItemStack itemE = new ItemStack(Material.FIREWORK_STAR);
|
ItemStack itemE = new ItemStack(Material.FIREWORK_STAR);
|
||||||
FireworkEffectMeta imE = (FireworkEffectMeta) itemE.getItemMeta();
|
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]"));
|
imE.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&7Ancient Rune &8&l[&c&lEarth&8&l]"));
|
||||||
itemE.setItemMeta(imE);
|
itemE.setItemMeta(imE);
|
||||||
RUNE_EARTH = itemE;
|
RUNE_EARTH = itemE;
|
||||||
@ -577,17 +578,24 @@ public final class SlimefunItems {
|
|||||||
|
|
||||||
ItemStack itemR = new ItemStack(Material.FIREWORK_STAR);
|
ItemStack itemR = new ItemStack(Material.FIREWORK_STAR);
|
||||||
FireworkEffectMeta imR = (FireworkEffectMeta) itemR.getItemMeta();
|
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]"));
|
imR.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&7Ancient Rune &8&l[&d&lRainbow&8&l]"));
|
||||||
itemR.setItemMeta(imR);
|
itemR.setItemMeta(imR);
|
||||||
RUNE_RAINBOW = itemR;
|
RUNE_RAINBOW = itemR;
|
||||||
|
|
||||||
ItemStack itemL = new ItemStack(Material.FIREWORK_STAR);
|
ItemStack itemL = new ItemStack(Material.FIREWORK_STAR);
|
||||||
FireworkEffectMeta imL = (FireworkEffectMeta) itemL.getItemMeta();
|
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]"));
|
imL.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&7Ancient Rune &8&l[&e&lLightning&8&l]"));
|
||||||
itemL.setItemMeta(imL);
|
itemL.setItemMeta(imL);
|
||||||
RUNE_LIGHTNING = itemL;
|
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 */
|
/* Electricity */
|
||||||
|
@ -1,4 +1,118 @@
|
|||||||
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
|
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<ItemDropHandler> {
|
||||||
|
|
||||||
|
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<Entity> 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<String> lore = finalMeta.getLore();
|
||||||
|
if (lore == null) lore = new ArrayList<>();
|
||||||
|
List<String> 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];
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,15 @@
|
|||||||
package me.mrCookieSlime.Slimefun.Objects.handlers;
|
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";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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.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.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.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.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.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?");
|
local.setDefault("messages.start-bleeding", "&c&oYou started to bleed. Maybe a Bandage could help?");
|
||||||
|
@ -243,5 +243,6 @@ public final class ResearchSetup {
|
|||||||
Slimefun.registerResearch(new Research(243, "A Dry Day", 15), SlimefunItems.AUTO_DRIER);
|
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(244, "Diet Cookie", 3), SlimefunItems.DIET_COOKIE);
|
||||||
Slimefun.registerResearch(new Research(245, "Storm Staff", 30), SlimefunItems.STAFF_STORM);
|
Slimefun.registerResearch(new Research(245, "Storm Staff", 30), SlimefunItems.STAFF_STORM);
|
||||||
|
Slimefun.registerResearch(new Research(246, "Soulbound Rune", 60), SlimefunItems.RUNE_SOULBOUND);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,15 +3,24 @@ package me.mrCookieSlime.Slimefun.Setup;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
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.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
import org.bukkit.potion.PotionEffect;
|
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.Categories;
|
||||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.Category;
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunArmorPiece;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunArmorPiece;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
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.Objects.SlimefunItem.VanillaItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||||
|
|
||||||
public final class SlimefunManager {
|
public final class SlimefunManager {
|
||||||
|
|
||||||
@ -116,14 +125,41 @@ public final class SlimefunManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static boolean equalsLore(List<String> lore, List<String> lore2) {
|
private static boolean equalsLore(List<String> lore, List<String> lore2) {
|
||||||
String string1 = "";
|
StringBuilder string1 = new StringBuilder();
|
||||||
String string2 = "";
|
StringBuilder string2 = new StringBuilder();
|
||||||
|
String colors = ChatColor.YELLOW.toString() + ChatColor.YELLOW.toString() + ChatColor.GRAY.toString();
|
||||||
for (String string: lore) {
|
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) {
|
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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.PickaxeOfVeinMining;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.SeismicAxe;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.SeismicAxe;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.SmeltersPickaxe;
|
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.StormStaff;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.SwordOfBeheading;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.SwordOfBeheading;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.TelepositionScroll;
|
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)})
|
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);
|
.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 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))
|
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);
|
.register(true);
|
||||||
|
@ -5,7 +5,6 @@ import java.util.Date;
|
|||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.enchantments.Enchantment;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
@ -15,12 +14,9 @@ import org.bukkit.event.entity.EntityDeathEvent;
|
|||||||
import org.bukkit.event.player.PlayerRespawnEvent;
|
import org.bukkit.event.player.PlayerRespawnEvent;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import me.mrCookieSlime.EmeraldEnchants.EmeraldEnchants;
|
|
||||||
import me.mrCookieSlime.EmeraldEnchants.ItemEnchantment;
|
|
||||||
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||||
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
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.EntityKillHandler;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler;
|
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler;
|
||||||
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
||||||
@ -49,7 +45,7 @@ public class DamageListener implements Listener {
|
|||||||
for (int slot = 0; slot < p.getInventory().getSize(); slot++) {
|
for (int slot = 0; slot < p.getInventory().getSize(); slot++) {
|
||||||
ItemStack item = p.getInventory().getItem(slot);
|
ItemStack item = p.getInventory().getItem(slot);
|
||||||
|
|
||||||
if (isSoulbound(item)) {
|
if (SlimefunManager.isItemSoulbound(item)) {
|
||||||
Soul.storeItem(p.getUniqueId(), slot, item);
|
Soul.storeItem(p.getUniqueId(), slot, item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -57,7 +53,7 @@ public class DamageListener implements Listener {
|
|||||||
Iterator<ItemStack> drops = e.getDrops().iterator();
|
Iterator<ItemStack> drops = e.getDrops().iterator();
|
||||||
while (drops.hasNext()) {
|
while (drops.hasNext()) {
|
||||||
ItemStack item = drops.next();
|
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
|
@EventHandler
|
||||||
public void onArrowHit(EntityDamageEvent e) {
|
public void onArrowHit(EntityDamageEvent e) {
|
||||||
if (e.getEntity() instanceof Player && e.getCause() == DamageCause.FALL && utilities.damage.contains(e.getEntity().getUniqueId())) {
|
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) {
|
public void onRespawn(PlayerRespawnEvent e) {
|
||||||
Soul.retrieveItems(e.getPlayer());
|
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -26,6 +26,7 @@ import org.bukkit.event.inventory.InventoryMoveItemEvent;
|
|||||||
import org.bukkit.event.inventory.InventoryType;
|
import org.bukkit.event.inventory.InventoryType;
|
||||||
import org.bukkit.event.inventory.PrepareItemCraftEvent;
|
import org.bukkit.event.inventory.PrepareItemCraftEvent;
|
||||||
import org.bukkit.event.player.PlayerBucketEmptyEvent;
|
import org.bukkit.event.player.PlayerBucketEmptyEvent;
|
||||||
|
import org.bukkit.event.player.PlayerDropItemEvent;
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
import org.bukkit.event.player.PlayerItemConsumeEvent;
|
import org.bukkit.event.player.PlayerItemConsumeEvent;
|
||||||
import org.bukkit.inventory.BrewerInventory;
|
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.MultiTool;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemConsumptionHandler;
|
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.ItemHandler;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler;
|
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler;
|
||||||
import me.mrCookieSlime.Slimefun.Setup.Messages;
|
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);
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user