From a5b70c711b1cb827ce3f151aeb3f213ddd0826dc Mon Sep 17 00:00:00 2001 From: youhavetrouble Date: Sun, 30 Apr 2023 21:41:31 +0200 Subject: [PATCH] Initial commit --- .gitignore | 3 + pom.xml | 74 ++++++++++++++++ readme.md | 7 ++ .../mendingbegone/MendingBeGone.java | 88 +++++++++++++++++++ src/main/resources/plugin.yml | 7 ++ 5 files changed, 179 insertions(+) create mode 100644 .gitignore create mode 100644 pom.xml create mode 100644 readme.md create mode 100644 src/main/java/me/youhavetrouble/mendingbegone/MendingBeGone.java create mode 100644 src/main/resources/plugin.yml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..48691d7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/.idea/ +*.iml +/target/ \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..33ce6e5 --- /dev/null +++ b/pom.xml @@ -0,0 +1,74 @@ + + + 4.0.0 + + me.youhavetrouble + MendingBeGone + 1.0-SNAPSHOT + jar + + MendingBeGone + + + 1.8 + UTF-8 + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + ${java.version} + ${java.version} + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.4 + + + package + + shade + + + false + + + + + + + + src/main/resources + true + + + + + + + papermc-repo + https://repo.papermc.io/repository/maven-public/ + + + sonatype + https://oss.sonatype.org/content/groups/public/ + + + + + + com.destroystokyo.paper + paper-api + 1.14-R0.1-SNAPSHOT + provided + + + diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..a926ddb --- /dev/null +++ b/readme.md @@ -0,0 +1,7 @@ +# Mending-Be-Gone + +Plugin that removes mending. **Permanently.** This means the actions taken by the plugin are **unrecoverable**. + +- Any instance of enchanted item with mending will have mending replaced by Unbreaking 3 +- Any instance of enchanted book with mending will have mending replaced by Unbreaking 3 +- Any villagers will have mending trade removed \ No newline at end of file diff --git a/src/main/java/me/youhavetrouble/mendingbegone/MendingBeGone.java b/src/main/java/me/youhavetrouble/mendingbegone/MendingBeGone.java new file mode 100644 index 0000000..eee72ba --- /dev/null +++ b/src/main/java/me/youhavetrouble/mendingbegone/MendingBeGone.java @@ -0,0 +1,88 @@ +package me.youhavetrouble.mendingbegone; + +import com.destroystokyo.paper.event.entity.EntityAddToWorldEvent; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.EntityType; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityPickupItemEvent; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryOpenEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.Merchant; +import org.bukkit.inventory.MerchantInventory; +import org.bukkit.inventory.MerchantRecipe; +import org.bukkit.inventory.meta.EnchantmentStorageMeta; +import org.bukkit.plugin.java.JavaPlugin; + +import java.util.ArrayList; +import java.util.List; + +public final class MendingBeGone extends JavaPlugin implements Listener { + + @Override + public void onEnable() { + getLogger().info("Mending enchantment will be replaced with unbreaking 3"); + } + + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) + public void onMendingItemPickup(EntityPickupItemEvent event) { + replaceMendingOnItem(event.getItem().getItemStack()); + } + + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) + public void onInvOpen(InventoryOpenEvent event) { + for (ItemStack itemStack : event.getInventory().getContents()) { + replaceMendingOnItem(itemStack); + } + } + + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) + public void onLogin(PlayerJoinEvent event) { + for (ItemStack itemStack : event.getPlayer().getInventory()) { + replaceMendingOnItem(itemStack); + } + } + + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) + public void onInvClick(InventoryClickEvent event) { + replaceMendingOnItem(event.getCurrentItem()); + replaceMendingOnItem(event.getCursor()); + } + + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) + public void onVillagerJoinWorld(InventoryOpenEvent event) { + if (!(event.getInventory() instanceof MerchantInventory)) return; + MerchantInventory merchantInventory = (MerchantInventory) event.getInventory(); + removeMendingTrade(merchantInventory.getMerchant()); + } + + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) + public void onVillagerJoinWorld(EntityAddToWorldEvent event) { + if (!event.getEntityType().equals(EntityType.VILLAGER)) return; + removeMendingTrade((Merchant) event.getEntity()); + } + + private void replaceMendingOnItem(ItemStack itemStack) { + if (itemStack == null) return; + if (itemStack.containsEnchantment(Enchantment.MENDING)) { + itemStack.removeEnchantment(Enchantment.MENDING); + if (itemStack.containsEnchantment(Enchantment.DURABILITY)) + itemStack.removeEnchantment(Enchantment.DURABILITY); + itemStack.addEnchantment(Enchantment.DURABILITY, 3); + } + } + + private void removeMendingTrade(Merchant merchant) { + List trades = new ArrayList<>(merchant.getRecipes()); + trades.removeIf(recipe -> { + if (!recipe.getResult().getType().equals(Material.ENCHANTED_BOOK)) return false; + EnchantmentStorageMeta storage = (EnchantmentStorageMeta) recipe.getResult().getItemMeta(); + return storage.hasStoredEnchant(Enchantment.MENDING); + }); + merchant.setRecipes(trades); + } +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml new file mode 100644 index 0000000..063c5ea --- /dev/null +++ b/src/main/resources/plugin.yml @@ -0,0 +1,7 @@ +name: MendingBeGone +version: '${project.version}' +main: me.youhavetrouble.mendingbegone.MendingBeGone +authors: ["YouHaveTrouble"] +description: Removes mending and replaces it with unbreaking +api-version: 1.14 +folia-supported: true \ No newline at end of file