diff --git a/src/main/java/me/youhavetrouble/enchantio/Enchantio.java b/src/main/java/me/youhavetrouble/enchantio/Enchantio.java index d4cf301..4d62cef 100644 --- a/src/main/java/me/youhavetrouble/enchantio/Enchantio.java +++ b/src/main/java/me/youhavetrouble/enchantio/Enchantio.java @@ -1,7 +1,7 @@ package me.youhavetrouble.enchantio; - import me.youhavetrouble.enchantio.listeners.SoulboundListener; +import me.youhavetrouble.enchantio.listeners.TelepathyListener; import org.bukkit.plugin.java.JavaPlugin; public final class Enchantio extends JavaPlugin { @@ -9,7 +9,7 @@ public final class Enchantio extends JavaPlugin { @Override public void onEnable() { getServer().getPluginManager().registerEvents(new SoulboundListener(), this); - + getServer().getPluginManager().registerEvents(new TelepathyListener(), this); } @Override diff --git a/src/main/java/me/youhavetrouble/enchantio/EnchantioBootstrap.java b/src/main/java/me/youhavetrouble/enchantio/EnchantioBootstrap.java index 06e3bb7..70b3700 100644 --- a/src/main/java/me/youhavetrouble/enchantio/EnchantioBootstrap.java +++ b/src/main/java/me/youhavetrouble/enchantio/EnchantioBootstrap.java @@ -6,9 +6,9 @@ import io.papermc.paper.plugin.bootstrap.PluginProviderContext; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.TypedKey; import io.papermc.paper.registry.event.RegistryEvents; -import io.papermc.paper.registry.keys.tags.ItemTypeTagKeys; import me.youhavetrouble.enchantio.enchants.EnchantioEnchant; import me.youhavetrouble.enchantio.enchants.SoulboundEnchant; +import me.youhavetrouble.enchantio.enchants.TelepathyEnchant; import org.bukkit.plugin.java.JavaPlugin; import org.jetbrains.annotations.NotNull; @@ -18,6 +18,7 @@ public class EnchantioBootstrap implements PluginBootstrap { public void bootstrap(@NotNull BootstrapContext context) { EnchantioEnchant soulbound = new SoulboundEnchant(); + EnchantioEnchant telepathy = new TelepathyEnchant(); context.getLifecycleManager().registerEventHandler(RegistryEvents.ENCHANTMENT.freeze().newHandler(event -> { for (EnchantioEnchant enchant : EnchantioEnchant.getEnchants().values()) { @@ -29,7 +30,8 @@ public class EnchantioBootstrap implements PluginBootstrap { enchantment.minimumCost(enchant.getMinimumCost()); enchantment.maximumCost(enchant.getMaximumCost()); enchantment.activeSlots(enchant.getActiveSlots()); - enchantment.supportedItems(event.getOrCreateTag(ItemTypeTagKeys.ENCHANTABLE_ARMOR)); + enchantment.supportedItems(event.getOrCreateTag(enchant.getSupportedItems())); + enchantment.primaryItems(event.getOrCreateTag(enchant.getPrimaryItems())); }); } })); diff --git a/src/main/java/me/youhavetrouble/enchantio/enchants/EnchantioEnchant.java b/src/main/java/me/youhavetrouble/enchantio/enchants/EnchantioEnchant.java index ea622b0..bf033f0 100644 --- a/src/main/java/me/youhavetrouble/enchantio/enchants/EnchantioEnchant.java +++ b/src/main/java/me/youhavetrouble/enchantio/enchants/EnchantioEnchant.java @@ -24,7 +24,8 @@ public abstract class EnchantioEnchant { private final Component description; private final EnchantmentRegistryEntry.EnchantmentCost minimumCost; private final EnchantmentRegistryEntry.EnchantmentCost maximumCost; - private final Set> supportedItems; + private final TagKey supportedItems; + private final TagKey primaryItems; private final Set activeSlots; public EnchantioEnchant( @@ -35,7 +36,9 @@ public abstract class EnchantioEnchant { int weight, EnchantmentRegistryEntry.EnchantmentCost minimumCost, EnchantmentRegistryEntry.EnchantmentCost maximumCost, - Set> supportedItems, + TagKey primaryItems, + TagKey supportedItems, + Set activeSlots ) { this.key = key; @@ -45,6 +48,7 @@ public abstract class EnchantioEnchant { this.weight = weight; this.minimumCost = minimumCost; this.maximumCost = maximumCost; + this.primaryItems = primaryItems; this.supportedItems = supportedItems; this.activeSlots = activeSlots; } @@ -77,10 +81,14 @@ public abstract class EnchantioEnchant { return maximumCost; } - public Set> getSupportedItems() { + public TagKey getSupportedItems() { return supportedItems; } + public TagKey getPrimaryItems() { + return primaryItems; + } + public Iterable getActiveSlots() { return activeSlots; } diff --git a/src/main/java/me/youhavetrouble/enchantio/enchants/SoulboundEnchant.java b/src/main/java/me/youhavetrouble/enchantio/enchants/SoulboundEnchant.java index f68d74a..19b6713 100644 --- a/src/main/java/me/youhavetrouble/enchantio/enchants/SoulboundEnchant.java +++ b/src/main/java/me/youhavetrouble/enchantio/enchants/SoulboundEnchant.java @@ -8,27 +8,20 @@ import org.bukkit.inventory.EquipmentSlotGroup; import java.util.Set; public class SoulboundEnchant extends EnchantioEnchant { + + public static final Key KEY = Key.key("enchantio:soulbound"); + public SoulboundEnchant() { super( - Key.key("enchantio:soulbound"), + KEY, Component.translatable("enchantio.enchant.soulbound","Soulbound"), 1, 1, 10, EnchantmentRegistryEntry.EnchantmentCost.of(1, 1), EnchantmentRegistryEntry.EnchantmentCost.of(3, 1), - Set.of( - ItemTypeTagKeys.AXES, - ItemTypeTagKeys.PICKAXES, - ItemTypeTagKeys.SWORDS, - ItemTypeTagKeys.HOES, - ItemTypeTagKeys.SHOVELS, - ItemTypeTagKeys.ENCHANTABLE_BOW, - ItemTypeTagKeys.ENCHANTABLE_CROSSBOW, - ItemTypeTagKeys.ENCHANTABLE_MACE, - ItemTypeTagKeys.ENCHANTABLE_WEAPON, - ItemTypeTagKeys.ENCHANTABLE_ARMOR - ), + ItemTypeTagKeys.ENCHANTABLE_ARMOR, + ItemTypeTagKeys.ENCHANTABLE_ARMOR, Set.of(EquipmentSlotGroup.ANY) ); registerEnchant(this); diff --git a/src/main/java/me/youhavetrouble/enchantio/enchants/TelepathyEnchant.java b/src/main/java/me/youhavetrouble/enchantio/enchants/TelepathyEnchant.java new file mode 100644 index 0000000..5c80e4f --- /dev/null +++ b/src/main/java/me/youhavetrouble/enchantio/enchants/TelepathyEnchant.java @@ -0,0 +1,31 @@ +package me.youhavetrouble.enchantio.enchants; + +import io.papermc.paper.registry.data.EnchantmentRegistryEntry; +import io.papermc.paper.registry.keys.tags.ItemTypeTagKeys; +import net.kyori.adventure.key.Key; +import net.kyori.adventure.text.Component; +import org.bukkit.inventory.EquipmentSlotGroup; + +import java.util.Set; + +public class TelepathyEnchant extends EnchantioEnchant { + + public static final Key KEY = Key.key("enchantio:telepathy"); + + public TelepathyEnchant() { + super( + KEY, + Component.translatable("enchantio.enchant.telepathy","Telepathy"), + 1, + 1, + 4, + EnchantmentRegistryEntry.EnchantmentCost.of(1, 1), + EnchantmentRegistryEntry.EnchantmentCost.of(3, 1), + ItemTypeTagKeys.ENCHANTABLE_MINING, + ItemTypeTagKeys.ENCHANTABLE_MINING, + Set.of(EquipmentSlotGroup.ANY) + ); + registerEnchant(this); + } + +} diff --git a/src/main/java/me/youhavetrouble/enchantio/listeners/SoulboundListener.java b/src/main/java/me/youhavetrouble/enchantio/listeners/SoulboundListener.java index 31d1e81..bb2c5c6 100644 --- a/src/main/java/me/youhavetrouble/enchantio/listeners/SoulboundListener.java +++ b/src/main/java/me/youhavetrouble/enchantio/listeners/SoulboundListener.java @@ -3,7 +3,7 @@ package me.youhavetrouble.enchantio.listeners; import io.papermc.paper.registry.RegistryAccess; import io.papermc.paper.registry.RegistryKey; import me.youhavetrouble.enchantio.Enchantio; -import net.kyori.adventure.key.Key; +import me.youhavetrouble.enchantio.enchants.SoulboundEnchant; import org.bukkit.Registry; import org.bukkit.enchantments.Enchantment; import org.bukkit.event.EventHandler; @@ -16,7 +16,7 @@ public class SoulboundListener implements Listener { @EventHandler(ignoreCancelled = true, priority = EventPriority.NORMAL) public void onSoulboundEnchantDeath(PlayerDeathEvent event) { Registry registry = RegistryAccess.registryAccess().getRegistry(RegistryKey.ENCHANTMENT); - Enchantment soulbound = registry.get(Key.key("enchantio:soulbound")); + Enchantment soulbound = registry.get(SoulboundEnchant.KEY); Enchantio.getPlugin(Enchantio.class).getLogger().info("Soulbound enchantment: " + soulbound); event.getPlayer().getInventory().forEach(itemStack -> { diff --git a/src/main/java/me/youhavetrouble/enchantio/listeners/TelepathyListener.java b/src/main/java/me/youhavetrouble/enchantio/listeners/TelepathyListener.java new file mode 100644 index 0000000..493b26b --- /dev/null +++ b/src/main/java/me/youhavetrouble/enchantio/listeners/TelepathyListener.java @@ -0,0 +1,35 @@ +package me.youhavetrouble.enchantio.listeners; + +import io.papermc.paper.registry.RegistryAccess; +import io.papermc.paper.registry.RegistryKey; + +import me.youhavetrouble.enchantio.enchants.TelepathyEnchant; +import org.bukkit.Registry; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Item; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockDropItemEvent; +import org.bukkit.event.player.PlayerTeleportEvent; +import org.bukkit.inventory.ItemStack; + + +public class TelepathyListener implements Listener { + + @EventHandler(ignoreCancelled = true, priority = EventPriority.NORMAL) + public void onTelepathyTool(BlockDropItemEvent event) { + Registry registry = RegistryAccess.registryAccess().getRegistry(RegistryKey.ENCHANTMENT); + Enchantment telepathy = registry.get(TelepathyEnchant.KEY); + + ItemStack tool = event.getPlayer().getInventory().getItemInMainHand(); + if (!tool.getEnchantments().containsKey(telepathy)) return; + + for (Item item : event.getItems()) { + item.teleport(event.getPlayer(), PlayerTeleportEvent.TeleportCause.PLUGIN); + item.setPickupDelay(0); + } + + } + +}