From 36e26d762da0cc1ec6a33e23fbb3f282f28427b5 Mon Sep 17 00:00:00 2001 From: alexcrea <42614139+alexcrea@users.noreply.github.com> Date: Fri, 25 Oct 2024 15:23:37 +0200 Subject: [PATCH 1/5] Do not check conflict if player can bypass & log it --- .../io/delilaheve/util/EnchantmentUtil.kt | 41 +++++++++++-------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/src/main/kotlin/io/delilaheve/util/EnchantmentUtil.kt b/src/main/kotlin/io/delilaheve/util/EnchantmentUtil.kt index 2cde74c..6d421c2 100644 --- a/src/main/kotlin/io/delilaheve/util/EnchantmentUtil.kt +++ b/src/main/kotlin/io/delilaheve/util/EnchantmentUtil.kt @@ -30,13 +30,15 @@ object EnchantmentUtil { ) = mutableMapOf().apply { putAll(this@combineWith) + val bypassFuse = player.hasPermission(CustomAnvil.bypassFusePermission) + val bypassLevel = player.hasPermission(CustomAnvil.bypassLevelPermission) + other.forEach { (enchantment, level) -> if(!enchantment.isAllowed(player)) return@forEach // Get max level or 255 if player can bypass - val maxLevel = if (player.hasPermission(CustomAnvil.bypassLevelPermission)) - { 255 } else - { ConfigOptions.enchantLimit(enchantment) } + val maxLevel = if (bypassLevel) { 255 } + else { ConfigOptions.enchantLimit(enchantment) } val cappedLevel = min(level, maxLevel) @@ -44,11 +46,15 @@ object EnchantmentUtil { if (!containsKey(enchantment)) { // Add the enchantment if it doesn't have conflicts, or if player is allowed to bypass enchantment restrictions this[enchantment] = cappedLevel - val conflictType = - ConfigHolder.CONFLICT_HOLDER.conflictManager.isConflicting(this, item, enchantment) - if (!player.hasPermission(CustomAnvil.bypassFusePermission) && - (conflictType != ConflictType.NO_CONFLICT) - ) { + if(bypassFuse){ + CustomAnvil.verboseLog("Bypassed conflict check for ${enchantment.key}") + return@forEach + } + + val conflictType = ConfigHolder.CONFLICT_HOLDER.conflictManager + .isConflicting(this, item, enchantment) + + if (conflictType != ConflictType.NO_CONFLICT) { CustomAnvil.verboseLog("Enchantment not yet in result list, but there is conflict (${enchantment.key}, conflict: $conflictType)") this.remove(enchantment) } @@ -58,14 +64,17 @@ object EnchantmentUtil { else { val oldLevel = this[enchantment]!! // <- should not be null. (enchantment already in result list) - // ... and they are conflicting - val conflictType = - ConfigHolder.CONFLICT_HOLDER.conflictManager.isConflicting(this, item, enchantment) - if ((conflictType != ConflictType.NO_CONFLICT) - && !player.hasPermission(CustomAnvil.bypassFusePermission) - ) { - CustomAnvil.verboseLog("Enchantment already in result list, and they are conflicting (${enchantment.key}, conflict: $conflictType)") - return@forEach + if(bypassFuse){ + CustomAnvil.verboseLog("Bypassed conflict check for ${enchantment.key}") + } else { + val conflictType = ConfigHolder.CONFLICT_HOLDER.conflictManager + .isConflicting(this, item, enchantment) + + // ... and they are conflicting + if(conflictType != ConflictType.NO_CONFLICT){ + CustomAnvil.verboseLog( + "Enchantment already in result list, and they are conflicting (${enchantment.key}, conflict: $conflictType)") + } } // ... and they're not the same level From e36f3a1694fc9cc03bd03b57d06cb44a9700761a Mon Sep 17 00:00:00 2001 From: alexcrea <42614139+alexcrea@users.noreply.github.com> Date: Fri, 25 Oct 2024 17:04:19 +0200 Subject: [PATCH 2/5] Optimized list gui mapped to gui initialisation --- .../alexcrea/cuanvil/api/UnitRepairApi.java | 14 +++--- .../config/global/CustomRecipeConfigGui.java | 19 ++++---- .../gui/config/global/EnchantConflictGui.java | 7 +-- .../gui/config/global/GroupConfigGui.java | 7 +-- .../config/global/UnitRepairConfigGui.java | 19 ++++---- .../config/list/MappedGuiListConfigGui.java | 46 ++++++++++++++++--- .../config/list/UnitRepairElementListGui.java | 10 +--- .../elements/CustomRecipeSubSettingGui.java | 5 +- .../list/elements/ElementMappedToListGui.java | 3 -- .../EnchantConflictSubSettingGui.java | 6 +-- .../elements/GroupConfigSubSettingGui.java | 5 +- .../elements/MappedToListSubSettingGui.java | 8 ---- .../xyz/alexcrea/cuanvil/util/LazyValue.java | 36 +++++++++++++++ 13 files changed, 119 insertions(+), 66 deletions(-) create mode 100644 src/main/java/xyz/alexcrea/cuanvil/util/LazyValue.java diff --git a/src/main/java/xyz/alexcrea/cuanvil/api/UnitRepairApi.java b/src/main/java/xyz/alexcrea/cuanvil/api/UnitRepairApi.java index d471b19..fb68448 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/api/UnitRepairApi.java +++ b/src/main/java/xyz/alexcrea/cuanvil/api/UnitRepairApi.java @@ -9,6 +9,7 @@ import org.jetbrains.annotations.NotNull; import xyz.alexcrea.cuanvil.config.ConfigHolder; import xyz.alexcrea.cuanvil.dependency.DependencyManager; import xyz.alexcrea.cuanvil.gui.config.global.UnitRepairConfigGui; +import xyz.alexcrea.cuanvil.gui.config.list.MappedGuiListConfigGui; import xyz.alexcrea.cuanvil.gui.config.list.UnitRepairElementListGui; import java.util.ArrayList; @@ -94,9 +95,9 @@ public class UnitRepairApi { // Add to gui UnitRepairConfigGui repairConfigGui = UnitRepairConfigGui.getCurrentInstance(); if(repairConfigGui != null) { - UnitRepairElementListGui elementGui = repairConfigGui.getInstanceOrCreate(unit); + UnitRepairElementListGui elementGui = repairConfigGui.getInstanceOrCreate(unit).getStored(); - elementGui.updateValueForGeneric(repairableName, true); + if(elementGui != null) elementGui.updateValueForGeneric(repairableName, true); repairConfigGui.updateValueForGeneric(unit, true); } @@ -124,14 +125,15 @@ public class UnitRepairApi { boolean lastValue = false; if(config.isConfigurationSection(unitName.toLowerCase())) { ConfigurationSection section = config.getConfigurationSection(unitName.toLowerCase()); - if(section.getKeys(false).isEmpty()) { + + if(section != null && section.getKeys(false).isEmpty()) { lastValue = true; config.set(unitName.toLowerCase(), null); } } else if (config.isConfigurationSection(unitName.toUpperCase())) { ConfigurationSection section = config.getConfigurationSection(unitName.toUpperCase()); - if(section.getKeys(false).isEmpty()) { + if(section != null && section.getKeys(false).isEmpty()) { lastValue = true; config.set(unitName.toUpperCase(), null); } @@ -146,9 +148,9 @@ public class UnitRepairApi { // Remove from gui UnitRepairConfigGui repairConfigGui = UnitRepairConfigGui.getCurrentInstance(); if(repairConfigGui != null) { - UnitRepairElementListGui elementGui = repairConfigGui.getInstanceOrCreate(unit); + UnitRepairElementListGui elementGui = repairConfigGui.getInstanceOrCreate(unit).getStored(); - elementGui.removeGeneric(repairableName); + if(elementGui != null) elementGui.removeGeneric(repairableName); if(lastValue){ repairConfigGui.removeGeneric(unit); } diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/CustomRecipeConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/CustomRecipeConfigGui.java index 5a68e6e..953f37f 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/CustomRecipeConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/CustomRecipeConfigGui.java @@ -17,7 +17,8 @@ import xyz.alexcrea.cuanvil.util.CasedStringUtil; import java.util.Arrays; import java.util.Collection; -public class CustomRecipeConfigGui extends MappedGuiListConfigGui { +public class CustomRecipeConfigGui extends MappedGuiListConfigGui> { private static CustomRecipeConfigGui INSTANCE = new CustomRecipeConfigGui(); @@ -44,15 +45,15 @@ public class CustomRecipeConfigGui extends MappedGuiListConfigGui newInstanceOfGui(AnvilCustomRecipe generic, GuiItem item) { + return new LazyElement<>(item, () -> new CustomRecipeSubSettingGui(this, generic)); } @Override diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantConflictGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantConflictGui.java index e9525f4..912e6cb 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantConflictGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantConflictGui.java @@ -18,7 +18,8 @@ import xyz.alexcrea.cuanvil.util.CasedStringUtil; import java.util.Arrays; import java.util.Collection; -public class EnchantConflictGui extends MappedGuiListConfigGui { +public class EnchantConflictGui extends MappedGuiListConfigGui> { private static EnchantConflictGui INSTANCE; @@ -86,8 +87,8 @@ public class EnchantConflictGui extends MappedGuiListConfigGui newInstanceOfGui(EnchantConflictGroup conflict, GuiItem item) { + return new LazyElement<>(item, () -> new EnchantConflictSubSettingGui(this, conflict)); } @Override diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/GroupConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/GroupConfigGui.java index 8684d4d..8e20751 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/GroupConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/GroupConfigGui.java @@ -15,12 +15,13 @@ import xyz.alexcrea.cuanvil.group.ItemGroupManager; import xyz.alexcrea.cuanvil.gui.config.list.MappedGuiListConfigGui; import xyz.alexcrea.cuanvil.gui.config.list.elements.GroupConfigSubSettingGui; import xyz.alexcrea.cuanvil.util.CasedStringUtil; +import xyz.alexcrea.cuanvil.util.LazyValue; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; -public class GroupConfigGui extends MappedGuiListConfigGui { +public class GroupConfigGui extends MappedGuiListConfigGui> { private static GroupConfigGui INSTANCE; @@ -73,8 +74,8 @@ public class GroupConfigGui extends MappedGuiListConfigGui newInstanceOfGui(IncludeGroup group, GuiItem item) { + return new LazyElement<>(item, () -> new GroupConfigSubSettingGui(this, group)); } @Override diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/UnitRepairConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/UnitRepairConfigGui.java index 833aea1..0e366ae 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/UnitRepairConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/UnitRepairConfigGui.java @@ -18,7 +18,8 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; -public class UnitRepairConfigGui extends MappedGuiListConfigGui { +public class UnitRepairConfigGui extends + MappedGuiListConfigGui> { private static UnitRepairConfigGui INSTANCE; @@ -41,10 +42,12 @@ public class UnitRepairConfigGui extends MappedGuiListConfigGui newInstanceOfGui(Material material, GuiItem item) { + return new LazyElement<>(item, () -> { + UnitRepairElementListGui element = new UnitRepairElementListGui(material, this); + element.init(); + return element; + }); } @Override @@ -115,7 +118,7 @@ public class UnitRepairConfigGui extends MappedGuiListConfigGui getInstanceOrCreate(Material mat){ + LazyElement element = this.elementGuiMap.get(mat); if(element == null){ updateValueForGeneric(mat, false); diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MappedGuiListConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MappedGuiListConfigGui.java index cf4b852..3aa18e0 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MappedGuiListConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/MappedGuiListConfigGui.java @@ -3,15 +3,19 @@ package xyz.alexcrea.cuanvil.gui.config.list; import com.github.stefvanschie.inventoryframework.gui.GuiItem; import io.delilaheve.CustomAnvil; import org.bukkit.entity.HumanEntity; +import org.bukkit.event.inventory.InventoryClickEvent; import org.jetbrains.annotations.NotNull; import xyz.alexcrea.cuanvil.gui.config.list.elements.ElementMappedToListGui; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions; +import xyz.alexcrea.cuanvil.util.LazyValue; import java.util.Locale; import java.util.concurrent.atomic.AtomicReference; import java.util.function.Consumer; +import java.util.function.Supplier; -public abstract class MappedGuiListConfigGui< T, S extends ElementMappedToListGui> extends MappedElementListConfigGui< T, S > { +public abstract class MappedGuiListConfigGui< T, S extends MappedGuiListConfigGui.LazyElement> + extends MappedElementListConfigGui< T, S > { protected MappedGuiListConfigGui(@NotNull String title) { super(title); @@ -20,7 +24,10 @@ public abstract class MappedGuiListConfigGui< T, S extends ElementMappedToListGu @Override public void reloadValues() { - this.elementGuiMap.forEach((conflict, gui) -> gui.cleanAndBeUnusable()); + this.elementGuiMap.forEach((conflict, element) -> { + ElementMappedToListGui gui = element.getStored(); + if(gui != null) gui.cleanAndBeUnusable(); + }); this.elementGuiMap.clear(); super.reloadValues(); @@ -30,23 +37,24 @@ public abstract class MappedGuiListConfigGui< T, S extends ElementMappedToListGu protected S newElementRequested(T generic, GuiItem newItem) { S element = newInstanceOfGui(generic, newItem); - newItem.setAction(GuiGlobalActions.openGuiAction(element.getMappedGui())); + newItem.setAction(element.openAction()); return element; } @Override protected GuiItem findItemFromElement(T generic, S element) { - return element.getParentItemForThisGui(); + return element.getParentItem(); } @Override protected void updateElement(T generic, S element) { - element.updateLocal(); + ElementMappedToListGui gui = element.getStored(); + if(gui != null) gui.updateLocal(); } @Override protected GuiItem findGuiItemForRemoval(T generic, S element) { - return element.getParentItemForThisGui(); + return element.getParentItem(); } @Override @@ -90,7 +98,7 @@ public abstract class MappedGuiListConfigGui< T, S extends ElementMappedToListGu updateValueForGeneric(generic, true); // show the new conflict config to the player - this.elementGuiMap.get(generic).getMappedGui().show(player); + this.elementGuiMap.get(generic).get().getMappedGui().show(player); update(); }; @@ -105,4 +113,28 @@ public abstract class MappedGuiListConfigGui< T, S extends ElementMappedToListGu protected abstract T createAndSaveNewEmptyGeneric(String name); + public static class LazyElement extends LazyValue { + + private final GuiItem parentItem; + private final LazyValue> lazyOpenConsumer; + public LazyElement(GuiItem parentItem, Supplier valueSupplier) { + super(valueSupplier); + this.parentItem = parentItem; + + this.lazyOpenConsumer = new LazyValue<>(() -> + GuiGlobalActions.openGuiAction(this.get().getMappedGui())) + ; + } + + public GuiItem getParentItem() { + return parentItem; + } + + @NotNull + public Consumer openAction(){ + return event -> lazyOpenConsumer.get().accept(event); + } + + } + } diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/UnitRepairElementListGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/UnitRepairElementListGui.java index 0bf2a03..35f8ebb 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/UnitRepairElementListGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/UnitRepairElementListGui.java @@ -26,17 +26,14 @@ import java.util.function.Consumer; public class UnitRepairElementListGui extends SettingGuiListConfigGui implements ElementMappedToListGui { - private final GuiItem parentItem; private final Material parentMaterial; private final UnitRepairConfigGui parentGui; private final String materialName; private boolean shouldWork = true; public UnitRepairElementListGui(@NotNull Material parentMaterial, - @NotNull UnitRepairConfigGui parentGui, - @NotNull GuiItem parentItem) { + @NotNull UnitRepairConfigGui parentGui) { super("§e" + CasedStringUtil.snakeToUpperSpacedCase(parentMaterial.name().toLowerCase()) + " §rUnit repair"); - this.parentItem = parentItem; this.parentMaterial = parentMaterial; this.parentGui = parentGui; this.materialName = CasedStringUtil.snakeToUpperSpacedCase(parentMaterial.name().toLowerCase()); @@ -165,11 +162,6 @@ public class UnitRepairElementListGui extends SettingGuiListConfigGui { + + private final Supplier valueSupplier; + private T storedValue; + + public LazyValue(Supplier valueSupplier) { + this.valueSupplier = valueSupplier; + this.storedValue = null; + } + + @Nullable + public T getStored(){ + return storedValue; + } + + @NotNull + public T get(){ + if (storedValue != null) return storedValue; + + synchronized(this) { + if(storedValue == null) { + storedValue = valueSupplier.get(); + } + } + + return storedValue; + } + +} From 50f8a37d8bc4b35e15934e8050f5f85ed0be1e65 Mon Sep 17 00:00:00 2001 From: alexcrea <42614139+alexcrea@users.noreply.github.com> Date: Sat, 26 Oct 2024 15:29:45 +0200 Subject: [PATCH 3/5] Fix default density item value being 1 instead of 2 --- .../alexcrea/cuanvil/update/Update_1_21.java | 12 ++++----- .../cuanvil/update/plugin/PUpdate_1_6_7.java | 27 +++++++++++++++++++ .../cuanvil/update/plugin/PluginUpdates.java | 7 ++++- 3 files changed, 39 insertions(+), 7 deletions(-) create mode 100644 src/main/java/xyz/alexcrea/cuanvil/update/plugin/PUpdate_1_6_7.java diff --git a/src/main/java/xyz/alexcrea/cuanvil/update/Update_1_21.java b/src/main/java/xyz/alexcrea/cuanvil/update/Update_1_21.java index af21989..8180b07 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/update/Update_1_21.java +++ b/src/main/java/xyz/alexcrea/cuanvil/update/Update_1_21.java @@ -69,14 +69,14 @@ public class Update_1_21 { baseConfig.set("enchant_limits.minecraft:wind_burst", 3); // Add enchant values - baseConfig.set("enchant_values.density.item", 1); - baseConfig.set("enchant_values.density.book", 1); + baseConfig.set("enchant_values.minecraft:density.item", 2); + baseConfig.set("enchant_values.minecraft:density.book", 1); - baseConfig.set("enchant_values.breach.item", 4); - baseConfig.set("enchant_values.breach.book", 2); + baseConfig.set("enchant_values.minecraft:breach.item", 4); + baseConfig.set("enchant_values.minecraft:breach.book", 2); - baseConfig.set("enchant_values.wind_burst.item", 4); - baseConfig.set("enchant_values.wind_burst.book", 2); + baseConfig.set("enchant_values.minecraft:wind_burst.item", 4); + baseConfig.set("enchant_values.minecraft:wind_burst.book", 2); // Add unit repair for mace unitConfig.set("breeze_rod.mace", 0.25); diff --git a/src/main/java/xyz/alexcrea/cuanvil/update/plugin/PUpdate_1_6_7.java b/src/main/java/xyz/alexcrea/cuanvil/update/plugin/PUpdate_1_6_7.java new file mode 100644 index 0000000..f77bced --- /dev/null +++ b/src/main/java/xyz/alexcrea/cuanvil/update/plugin/PUpdate_1_6_7.java @@ -0,0 +1,27 @@ +package xyz.alexcrea.cuanvil.update.plugin; + +import org.bukkit.configuration.file.FileConfiguration; +import xyz.alexcrea.cuanvil.config.ConfigHolder; + +import javax.annotation.Nonnull; +import java.util.Set; + +public class PUpdate_1_6_7 { + + public static void handleUpdate(@Nonnull Set toSave) { + FileConfiguration config = ConfigHolder.DEFAULT_CONFIG.getConfig(); + + // We fix the density enchantment + String value = config.getString("enchant_values.minecraft:density.item"); + if(value == null) value = config.getString("enchant_values.density.item"); + + if(value == null || "1".equalsIgnoreCase(value)){ + config.set("enchant_values.minecraft:density.item", 2); + + toSave.add(ConfigHolder.DEFAULT_CONFIG); + } + + + } + +} diff --git a/src/main/java/xyz/alexcrea/cuanvil/update/plugin/PluginUpdates.java b/src/main/java/xyz/alexcrea/cuanvil/update/plugin/PluginUpdates.java index cc0901b..2069b03 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/update/plugin/PluginUpdates.java +++ b/src/main/java/xyz/alexcrea/cuanvil/update/plugin/PluginUpdates.java @@ -21,7 +21,12 @@ public class PluginUpdates { if(new Version(1, 6, 2).greaterThan(current)){ PUpdate_1_6_2.handleUpdate(toSave); - finishConfiguration("1.6.2", toSave); + // We assume 1.6.7 will run. TODO a better system instead of that I guess + } + if(new Version(1, 6, 7).greaterThan(current)){ + PUpdate_1_6_7.handleUpdate(toSave); + + finishConfiguration("1.6.7", toSave); } } From e231f0ad7b52e1a8cf466957336777cdfb18f8e9 Mon Sep 17 00:00:00 2001 From: alexcrea <42614139+alexcrea@users.noreply.github.com> Date: Sat, 26 Oct 2024 16:24:56 +0200 Subject: [PATCH 4/5] Add nms for 1.21.2 & 1.21.3 updated nms for 1.21R1 version up to 1.6.7 --- build.gradle.kts | 3 +- nms/v1_21R1/build.gradle.kts | 2 +- .../gui/version/v1_21R1_ExternGuiTester.kt | 2 +- nms/v1_21R2/build.gradle.kts | 43 +++++++++++++++++++ .../packet/versions/V1_21R2_PacketManager.kt | 33 ++++++++++++++ settings.gradle.kts | 2 + .../packet/PacketManagerSelector.kt | 1 + 7 files changed, 83 insertions(+), 3 deletions(-) create mode 100644 nms/v1_21R2/build.gradle.kts create mode 100644 nms/v1_21R2/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/packet/versions/V1_21R2_PacketManager.kt diff --git a/build.gradle.kts b/build.gradle.kts index dac932e..d5f908e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -15,7 +15,7 @@ plugins { } group = "xyz.alexcrea" -version = "1.6.6" +version = "1.6.7" repositories { // EcoEnchants @@ -57,6 +57,7 @@ dependencies { implementation(project(":nms:v1_20R3", configuration = "reobf")) implementation(project(":nms:v1_20R4", configuration = "reobf")) implementation(project(":nms:v1_21R1", configuration = "reobf")) + implementation(project(":nms:v1_21R2", configuration = "reobf")) // include kotlin for the offline jar implementation(kotlin("stdlib")) diff --git a/nms/v1_21R1/build.gradle.kts b/nms/v1_21R1/build.gradle.kts index 2ac9737..435d09c 100644 --- a/nms/v1_21R1/build.gradle.kts +++ b/nms/v1_21R1/build.gradle.kts @@ -11,7 +11,7 @@ dependencies { implementation(project(":nms:nms-common")) // Used for nms - paperweight.paperDevBundle("1.21-R0.1-SNAPSHOT") // 1.21.1 userdev did not release yet but still use R1 + paperweight.paperDevBundle("1.21.1-R0.1-SNAPSHOT") } repositories { diff --git a/nms/v1_21R1/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/gui/version/v1_21R1_ExternGuiTester.kt b/nms/v1_21R1/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/gui/version/v1_21R1_ExternGuiTester.kt index 9b73bc4..7caa61b 100644 --- a/nms/v1_21R1/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/gui/version/v1_21R1_ExternGuiTester.kt +++ b/nms/v1_21R1/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/gui/version/v1_21R1_ExternGuiTester.kt @@ -8,7 +8,7 @@ class v1_21R1_ExternGuiTester: ExternGuiTester { override val wesjdAnvilGuiName = "Wrapper1_21_R1" override fun getContainerClass(view: InventoryView): Class? { - if(view !is CraftInventoryView<*>) return null + if(view !is CraftInventoryView<*, *>) return null val container = view.handle return container.javaClass diff --git a/nms/v1_21R2/build.gradle.kts b/nms/v1_21R2/build.gradle.kts new file mode 100644 index 0000000..36dc7ac --- /dev/null +++ b/nms/v1_21R2/build.gradle.kts @@ -0,0 +1,43 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + +group = rootProject.group +version = rootProject.version + +plugins { + id("io.papermc.paperweight.userdev") +} + +dependencies { + implementation(project(":nms:nms-common")) + + // Used for nms + paperweight.paperDevBundle("1.21.3-R0.1-SNAPSHOT") +} + +repositories { + maven("https://repo.papermc.io/repository/maven-public/") + +} + +// minecraft 1.21 java version is 21. + +// Configure used version of kotlin and java +java { + disableAutoTargetJvm() + toolchain.languageVersion.set(JavaLanguageVersion.of(21)) +} + +// Set target version +tasks.withType().configureEach { + sourceCompatibility = "21" + targetCompatibility = "21" + + options.encoding = "UTF-8" +} + +kotlin { + compilerOptions { + apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0) + jvmTarget.set(JvmTarget.JVM_21) + } +} diff --git a/nms/v1_21R2/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/packet/versions/V1_21R2_PacketManager.kt b/nms/v1_21R2/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/packet/versions/V1_21R2_PacketManager.kt new file mode 100644 index 0000000..9d88c20 --- /dev/null +++ b/nms/v1_21R2/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/packet/versions/V1_21R2_PacketManager.kt @@ -0,0 +1,33 @@ +package xyz.alexcrea.cuanvil.dependency.packet.versions + +import net.minecraft.network.protocol.game.ClientboundPlayerAbilitiesPacket +import net.minecraft.world.entity.player.Abilities +import org.bukkit.craftbukkit.entity.CraftPlayer +import org.bukkit.entity.Player +import xyz.alexcrea.cuanvil.dependency.packet.PacketManager +import xyz.alexcrea.cuanvil.dependency.packet.PacketManagerBase + +class V1_21R2_PacketManager : PacketManagerBase(), PacketManager { + override val canSetInstantBuild: Boolean + get() = true + + override fun setInstantBuild(player: Player, instantBuild: Boolean) { + val nmsPlayer = (player as CraftPlayer).handle + val playerAbilities = nmsPlayer.abilities + val sendedAbilities: Abilities + if (playerAbilities.instabuild == instantBuild) { + sendedAbilities = playerAbilities + } else { + sendedAbilities = Abilities() + sendedAbilities.invulnerable = playerAbilities.invulnerable + sendedAbilities.flying = playerAbilities.flying + sendedAbilities.mayfly = playerAbilities.mayfly + sendedAbilities.instabuild = instantBuild + sendedAbilities.mayBuild = playerAbilities.mayBuild + sendedAbilities.flyingSpeed = playerAbilities.flyingSpeed + sendedAbilities.walkingSpeed = playerAbilities.walkingSpeed + } + val packet = ClientboundPlayerAbilitiesPacket(sendedAbilities) + nmsPlayer.connection.send(packet) + } +} diff --git a/settings.gradle.kts b/settings.gradle.kts index e661a74..6f7bfc5 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -34,3 +34,5 @@ include("nms:v1_20R4") findProject(":nms:v1_20R4")?.name = "v1_20R4" include("nms:v1_21R1") findProject(":nms:v1_21R1")?.name = "v1_21R1" +include("nms:v1_21R2") +findProject(":nms:v1_21R2")?.name = "v1_21R2" diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/packet/PacketManagerSelector.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/packet/PacketManagerSelector.kt index 8c251dc..69b5710 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/packet/PacketManagerSelector.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/packet/PacketManagerSelector.kt @@ -55,6 +55,7 @@ object PacketManagerSelector { 21 -> when (versionParts[2]) { 0, 1 -> V1_21R1_PacketManager() + 2, 3 -> V1_21R2_PacketManager() else -> null } From 6eab8c45ae53a9b7eab0d8aad72c94bbd6a5e20e Mon Sep 17 00:00:00 2001 From: alexcrea <42614139+alexcrea@users.noreply.github.com> Date: Sat, 26 Oct 2024 16:42:41 +0200 Subject: [PATCH 5/5] Update readme for 1.21.3 --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 2eab8ca..57186a6 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Custom Anvil **Custom Anvil** is a plugin that allows server administrators to customize every aspect of the anvil's mechanics. -It is expected to work on 1.18 to 1.21 minecraft servers running spigot or paper. +It is expected to work on 1.18 to 1.21.3 minecraft servers running spigot or paper. (the plugin support of 1.16.5 to 1.17.1 is experimental and may encounter issues) **Custom Anvil** was previously named **Unsafe Enchants+**. @@ -95,7 +95,6 @@ Custom anvil [use bstat](https://bstats.org/plugin/bukkit/Unsafe%20Enchants%20Pl ### Planned: - Better Folia support (make gui work. fix some dirty handled parts) - Get restriction on unknown enchantments -- Warn admin on unsupported minecraft version - More features for custom anvil craft ### Known issue: