From 0824768a14aca0018e3ac2e6847141b86629e9bb Mon Sep 17 00:00:00 2001 From: J3fftw1 Date: Sat, 21 Jan 2023 23:15:03 +0100 Subject: [PATCH 1/7] added a way to set max enchants to go on an item --- .../machines/enchanting/AutoEnchanter.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AutoEnchanter.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AutoEnchanter.java index 71a4ee1c0..f37f86009 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AutoEnchanter.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AutoEnchanter.java @@ -34,6 +34,7 @@ import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; * @author Mooy1 * @author StarWishSama * @author martinbrom + * @author J3fftw1 * * @see AutoDisenchanter * @@ -42,11 +43,18 @@ public class AutoEnchanter extends AbstractEnchantmentMachine { private final ItemSetting overrideExistingEnchantsLvl = new ItemSetting<>(this, "override-existing-enchants-lvl", false); + /* + * Default value is -1, Minecraft doesn't limit enchants by default. + * -1 means its disabled and doesn't check for a max number of enchantments. + */ + private final ItemSetting maxEnchants = new ItemSetting<>(this, "max-enchants", -1); + @ParametersAreNonnullByDefault public AutoEnchanter(ItemGroup itemGroup, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(itemGroup, item, recipeType, recipe); addItemSetting(overrideExistingEnchantsLvl); + addItemSetting(maxEnchants); } @Override @@ -116,6 +124,14 @@ public class AutoEnchanter extends AbstractEnchantmentMachine { enchantments.entrySet().removeIf(e -> target.getEnchantmentLevel(e.getKey()) >= e.getValue()); } + /* + * When maxEnchants is set to -1 it will be ignored. When it's set to 0 it will not allow any enchants to go + * on an item. When maxEnchants is set to any other value it will allow that many enchants to go on the item. + */ + if (maxEnchants.getValue() != -1 && target.getEnchantments().size() >= maxEnchants.getValue()) { + return null; + } + // Check if we found any valid enchantments if (!enchantments.isEmpty()) { ItemStack enchantedItem = target.clone(); From 1a6a2a07a8f59aa02663a19d2bad18c4abd43068 Mon Sep 17 00:00:00 2001 From: J3fftw1 Date: Sat, 21 Jan 2023 23:16:13 +0100 Subject: [PATCH 2/7] added comma in comment --- .../items/electric/machines/enchanting/AutoEnchanter.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AutoEnchanter.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AutoEnchanter.java index f37f86009..55f317745 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AutoEnchanter.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AutoEnchanter.java @@ -117,8 +117,8 @@ public class AutoEnchanter extends AbstractEnchantmentMachine { } /* - * If override is false, remove those with lower level so we don't override existing enchants - * This also removes those with the same level so they aren't accounted for enchanting time + * If override is false, remove those with lower level, so we don't override existing enchants + * This also removes those with the same level, so they aren't accounted for enchanting time */ if (!overrideExistingEnchantsLvl.getValue()) { enchantments.entrySet().removeIf(e -> target.getEnchantmentLevel(e.getKey()) >= e.getValue()); From de318ce88c651f331a01f39d6020aa4f7291d8e1 Mon Sep 17 00:00:00 2001 From: J3fftw1 Date: Sun, 22 Jan 2023 16:06:55 +0100 Subject: [PATCH 3/7] added to AbstractEnchantmentMachine --- .../enchanting/AbstractEnchantmentMachine.java | 12 ++++++++++++ .../electric/machines/enchanting/AutoEnchanter.java | 10 +--------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AbstractEnchantmentMachine.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AbstractEnchantmentMachine.java index 36fc0f013..aee27da4b 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AbstractEnchantmentMachine.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AbstractEnchantmentMachine.java @@ -28,6 +28,7 @@ import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; * * @author TheBusyBiscuit * @author Rothes + * @author J3fftw1 * * @see AutoEnchanter * @see AutoDisenchanter @@ -40,6 +41,12 @@ abstract class AbstractEnchantmentMachine extends AContainer { private final ItemSetting useIgnoredLores = new ItemSetting<>(this, "use-ignored-lores", false); private final ItemSetting> ignoredLores = new ItemSetting<>(this, "ignored-lores", Collections.singletonList("&7- &cCan't be used in " + this.getItemName())); + /* + * Default value is -1, Minecraft doesn't limit enchants by default. + * -1 means its disabled and doesn't check for a max number of enchantments. + */ + private final ItemSetting maxEnchants = new ItemSetting<>(this, "max-enchants", -1); + @ParametersAreNonnullByDefault protected AbstractEnchantmentMachine(ItemGroup itemGroup, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(itemGroup, item, recipeType, recipe); @@ -48,6 +55,7 @@ abstract class AbstractEnchantmentMachine extends AContainer { addItemSetting(levelLimit); addItemSetting(useIgnoredLores); addItemSetting(ignoredLores); + addItemSetting(maxEnchants); } protected boolean isEnchantmentLevelAllowed(int enchantmentLevel) { @@ -84,4 +92,8 @@ abstract class AbstractEnchantmentMachine extends AContainer { return false; } + + protected boolean IsEnchantmentAmountAllowed(@Nonnull ItemStack item ) { + return maxEnchants.getValue() != -1 && item.getEnchantments().size() >= maxEnchants.getValue(); + } } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AutoEnchanter.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AutoEnchanter.java index 55f317745..960c17408 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AutoEnchanter.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AutoEnchanter.java @@ -34,7 +34,6 @@ import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; * @author Mooy1 * @author StarWishSama * @author martinbrom - * @author J3fftw1 * * @see AutoDisenchanter * @@ -43,18 +42,11 @@ public class AutoEnchanter extends AbstractEnchantmentMachine { private final ItemSetting overrideExistingEnchantsLvl = new ItemSetting<>(this, "override-existing-enchants-lvl", false); - /* - * Default value is -1, Minecraft doesn't limit enchants by default. - * -1 means its disabled and doesn't check for a max number of enchantments. - */ - private final ItemSetting maxEnchants = new ItemSetting<>(this, "max-enchants", -1); - @ParametersAreNonnullByDefault public AutoEnchanter(ItemGroup itemGroup, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(itemGroup, item, recipeType, recipe); addItemSetting(overrideExistingEnchantsLvl); - addItemSetting(maxEnchants); } @Override @@ -128,7 +120,7 @@ public class AutoEnchanter extends AbstractEnchantmentMachine { * When maxEnchants is set to -1 it will be ignored. When it's set to 0 it will not allow any enchants to go * on an item. When maxEnchants is set to any other value it will allow that many enchants to go on the item. */ - if (maxEnchants.getValue() != -1 && target.getEnchantments().size() >= maxEnchants.getValue()) { + if (IsEnchantmentAmountAllowed(target)) { return null; } From 1e5dd0af641dc6be068fbcea421b9487cc9d0aed Mon Sep 17 00:00:00 2001 From: J3fftw1 Date: Sun, 22 Jan 2023 16:15:07 +0100 Subject: [PATCH 4/7] changed it to int range setting --- .../machines/enchanting/AbstractEnchantmentMachine.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AbstractEnchantmentMachine.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AbstractEnchantmentMachine.java index aee27da4b..2a9d9e98f 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AbstractEnchantmentMachine.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AbstractEnchantmentMachine.java @@ -38,14 +38,14 @@ abstract class AbstractEnchantmentMachine extends AContainer { private final ItemSetting useLevelLimit = new ItemSetting<>(this, "use-enchant-level-limit", false); private final IntRangeSetting levelLimit = new IntRangeSetting(this, "enchant-level-limit", 0, 10, Short.MAX_VALUE); - private final ItemSetting useIgnoredLores = new ItemSetting<>(this, "use-ignored-lores", false); - private final ItemSetting> ignoredLores = new ItemSetting<>(this, "ignored-lores", Collections.singletonList("&7- &cCan't be used in " + this.getItemName())); /* * Default value is -1, Minecraft doesn't limit enchants by default. * -1 means its disabled and doesn't check for a max number of enchantments. */ - private final ItemSetting maxEnchants = new ItemSetting<>(this, "max-enchants", -1); + private final ItemSetting maxEnchants = new IntRangeSetting(this, "max-enchants", -1, -1, Short.MAX_VALUE); + private final ItemSetting useIgnoredLores = new ItemSetting<>(this, "use-ignored-lores", false); + private final ItemSetting> ignoredLores = new ItemSetting<>(this, "ignored-lores", Collections.singletonList("&7- &cCan't be used in " + this.getItemName())); @ParametersAreNonnullByDefault protected AbstractEnchantmentMachine(ItemGroup itemGroup, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { From 0edf0a41f3597eca47a9f9fbda1cadecf3bd621f Mon Sep 17 00:00:00 2001 From: J3fftw1 Date: Sun, 22 Jan 2023 16:28:58 +0100 Subject: [PATCH 5/7] requested changes --- .../enchanting/AbstractEnchantmentMachine.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AbstractEnchantmentMachine.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AbstractEnchantmentMachine.java index 2a9d9e98f..df5c01c2c 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AbstractEnchantmentMachine.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AbstractEnchantmentMachine.java @@ -7,6 +7,7 @@ import javax.annotation.Nonnull; import javax.annotation.ParametersAreNonnullByDefault; import org.bukkit.Material; +import org.bukkit.entity.Item; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; @@ -38,12 +39,8 @@ abstract class AbstractEnchantmentMachine extends AContainer { private final ItemSetting useLevelLimit = new ItemSetting<>(this, "use-enchant-level-limit", false); private final IntRangeSetting levelLimit = new IntRangeSetting(this, "enchant-level-limit", 0, 10, Short.MAX_VALUE); - - /* - * Default value is -1, Minecraft doesn't limit enchants by default. - * -1 means its disabled and doesn't check for a max number of enchantments. - */ - private final ItemSetting maxEnchants = new IntRangeSetting(this, "max-enchants", -1, -1, Short.MAX_VALUE); + private final ItemSetting maxEnchants = new IntRangeSetting(this, "max-enchants", 0, 10, Short.MAX_VALUE); + private final ItemSetting useMaxEnchants= new ItemSetting<>(this, "use-max-encahnts", false); private final ItemSetting useIgnoredLores = new ItemSetting<>(this, "use-ignored-lores", false); private final ItemSetting> ignoredLores = new ItemSetting<>(this, "ignored-lores", Collections.singletonList("&7- &cCan't be used in " + this.getItemName())); @@ -56,6 +53,7 @@ abstract class AbstractEnchantmentMachine extends AContainer { addItemSetting(useIgnoredLores); addItemSetting(ignoredLores); addItemSetting(maxEnchants); + addItemSetting(useMaxEnchants); } protected boolean isEnchantmentLevelAllowed(int enchantmentLevel) { @@ -94,6 +92,6 @@ abstract class AbstractEnchantmentMachine extends AContainer { } protected boolean IsEnchantmentAmountAllowed(@Nonnull ItemStack item ) { - return maxEnchants.getValue() != -1 && item.getEnchantments().size() >= maxEnchants.getValue(); + return !useMaxEnchants.getValue() || item.getEnchantments().size() >= maxEnchants.getValue(); } } From c204b8213c2366423ef68aecefe367aed5781267 Mon Sep 17 00:00:00 2001 From: J3fftw1 Date: Sun, 22 Jan 2023 16:32:10 +0100 Subject: [PATCH 6/7] changed it to int range setting --- .../machines/enchanting/AbstractEnchantmentMachine.java | 2 +- .../items/electric/machines/enchanting/AutoEnchanter.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AbstractEnchantmentMachine.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AbstractEnchantmentMachine.java index df5c01c2c..8244e584c 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AbstractEnchantmentMachine.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AbstractEnchantmentMachine.java @@ -91,7 +91,7 @@ abstract class AbstractEnchantmentMachine extends AContainer { return false; } - protected boolean IsEnchantmentAmountAllowed(@Nonnull ItemStack item ) { + protected boolean isEnchantmentAmountAllowed(@Nonnull ItemStack item ) { return !useMaxEnchants.getValue() || item.getEnchantments().size() >= maxEnchants.getValue(); } } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AutoEnchanter.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AutoEnchanter.java index 960c17408..0255547f9 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AutoEnchanter.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AutoEnchanter.java @@ -109,8 +109,8 @@ public class AutoEnchanter extends AbstractEnchantmentMachine { } /* - * If override is false, remove those with lower level, so we don't override existing enchants - * This also removes those with the same level, so they aren't accounted for enchanting time + * If override is false, remove those with lower level so we don't override existing enchants + * This also removes those with the same level so they aren't accounted for enchanting time */ if (!overrideExistingEnchantsLvl.getValue()) { enchantments.entrySet().removeIf(e -> target.getEnchantmentLevel(e.getKey()) >= e.getValue()); @@ -120,7 +120,7 @@ public class AutoEnchanter extends AbstractEnchantmentMachine { * When maxEnchants is set to -1 it will be ignored. When it's set to 0 it will not allow any enchants to go * on an item. When maxEnchants is set to any other value it will allow that many enchants to go on the item. */ - if (IsEnchantmentAmountAllowed(target)) { + if (isEnchantmentAmountAllowed(target)) { return null; } From 50940b509d7e2599ca64578e6043b9b01b4cd57a Mon Sep 17 00:00:00 2001 From: J3fftw1 Date: Sun, 22 Jan 2023 16:42:04 +0100 Subject: [PATCH 7/7] added to the AutoDisenchanter --- .../items/electric/machines/enchanting/AutoDisenchanter.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AutoDisenchanter.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AutoDisenchanter.java index 62f0ae3d7..6e0f38b61 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AutoDisenchanter.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/enchanting/AutoDisenchanter.java @@ -94,6 +94,10 @@ public class AutoDisenchanter extends AbstractEnchantmentMachine { } } + if (isEnchantmentAmountAllowed(item)) { + return null; + } + // Check if we found any valid enchantments if (!enchantments.isEmpty()) { ItemStack disenchantedItem = item.clone();