From b892f5594a29b173d0d043c9fcb01d288cf383aa Mon Sep 17 00:00:00 2001 From: LLytho Date: Fri, 22 Mar 2024 21:56:49 +0100 Subject: [PATCH] Add some utility to enchant event --- CHANGELOG.md | 5 +++ .../almostreliable/morejs/core/Events.java | 7 +++- .../enchantment/PlayerEnchantEventJS.java | 42 +++++++++++++++++++ .../enchanting/EnchantmentMenuMixin.java | 4 +- gradle.properties | 2 +- 5 files changed, 55 insertions(+), 5 deletions(-) create mode 100644 Common/src/main/java/com/almostreliable/morejs/features/enchantment/PlayerEnchantEventJS.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a76a19..f1a1022 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## [0.8.0] - 2024-03-22 + +- Add `event.clickedButton`, `event.costs`, `event.enchantments`, `event.enchantmentIds` + to `MoreJSEvents.enchantmentTableEnchant` event + ## [0.7.0] - 2024-03-14 - Add `removeContainer` and `addContainerRecipe` to potion event diff --git a/Common/src/main/java/com/almostreliable/morejs/core/Events.java b/Common/src/main/java/com/almostreliable/morejs/core/Events.java index aec6834..34df22c 100644 --- a/Common/src/main/java/com/almostreliable/morejs/core/Events.java +++ b/Common/src/main/java/com/almostreliable/morejs/core/Events.java @@ -3,11 +3,12 @@ import com.almostreliable.morejs.features.enchantment.EnchantmentTableServerEventJS; import com.almostreliable.morejs.features.enchantment.EnchantmentTableTooltipEventJS; import com.almostreliable.morejs.features.enchantment.FilterAvailableEnchantmentsEventJS; +import com.almostreliable.morejs.features.enchantment.PlayerEnchantEventJS; import com.almostreliable.morejs.features.misc.ExperiencePlayerEventJS; import com.almostreliable.morejs.features.misc.PiglinPlayerBehaviorEventJS; import com.almostreliable.morejs.features.potion.PotionBrewingRegisterEvent; -import com.almostreliable.morejs.features.structure.StructureLoadEventJS; import com.almostreliable.morejs.features.structure.StructureAfterPlaceEventJS; +import com.almostreliable.morejs.features.structure.StructureLoadEventJS; import com.almostreliable.morejs.features.teleport.EntityTeleportsEventJS; import com.almostreliable.morejs.features.villager.events.*; import dev.latvian.mods.kubejs.event.EventGroup; @@ -25,7 +26,9 @@ public interface Events { EventHandler UPDATE_WANDERER_OFFERS = GROUP.server("updateWandererOffers", () -> UpdateAbstractVillagerOffersEventJS.class); EventHandler ENCHANTMENT_TABLE_IS_ENCHANTABLE = GROUP.server("enchantmentTableIsEnchantable", () -> EnchantmentTableServerEventJS.class); EventHandler ENCHANTMENT_TABLE_CHANGED = GROUP.server("enchantmentTableChanged", () -> EnchantmentTableServerEventJS.class); - EventHandler ENCHANTMENT_TABLE_ENCHANT = GROUP.server("enchantmentTableEnchant", () -> EnchantmentTableServerEventJS.class).hasResult(); + EventHandler ENCHANTMENT_TABLE_ENCHANT = GROUP + .server("enchantmentTableEnchant", () -> PlayerEnchantEventJS.class) + .hasResult(); EventHandler ENCHANTMENT_TABLE_TOOLTIP = GROUP.client("enchantmentTableTooltip", () -> EnchantmentTableTooltipEventJS.class); EventHandler TELEPORT = GROUP.server("teleport", () -> EntityTeleportsEventJS.class).hasResult(); EventHandler STRUCTURE_LOAD = GROUP.server("structureLoad", () -> StructureLoadEventJS.class); diff --git a/Common/src/main/java/com/almostreliable/morejs/features/enchantment/PlayerEnchantEventJS.java b/Common/src/main/java/com/almostreliable/morejs/features/enchantment/PlayerEnchantEventJS.java new file mode 100644 index 0000000..30b8148 --- /dev/null +++ b/Common/src/main/java/com/almostreliable/morejs/features/enchantment/PlayerEnchantEventJS.java @@ -0,0 +1,42 @@ +package com.almostreliable.morejs.features.enchantment; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.enchantment.EnchantmentInstance; +import net.minecraft.world.level.Level; + +import java.util.List; + +public class PlayerEnchantEventJS extends EnchantmentTableServerEventJS { + + private final int clickedButton; + + public PlayerEnchantEventJS(int clickedButton, ItemStack item, ItemStack secondItem, Level level, BlockPos pos, Player player, EnchantmentMenuProcess state) { + super(item, secondItem, level, pos, player, state); + this.clickedButton = clickedButton; + } + + public int getClickedButton() { + return clickedButton; + } + + public int getCosts() { + return menu.costs[clickedButton]; + } + + public List getEnchantmentIds() { + return state + .getEnchantments(clickedButton) + .stream() + .map(ei -> ei.enchantment) + .map(BuiltInRegistries.ENCHANTMENT::getKey) + .toList(); + } + + public List getEnchantments() { + return state.getEnchantments(clickedButton); + } +} diff --git a/Common/src/main/java/com/almostreliable/morejs/mixin/enchanting/EnchantmentMenuMixin.java b/Common/src/main/java/com/almostreliable/morejs/mixin/enchanting/EnchantmentMenuMixin.java index a38c736..d92f4ac 100644 --- a/Common/src/main/java/com/almostreliable/morejs/mixin/enchanting/EnchantmentMenuMixin.java +++ b/Common/src/main/java/com/almostreliable/morejs/mixin/enchanting/EnchantmentMenuMixin.java @@ -128,7 +128,7 @@ private void handleEnchantmentGetter(ItemStack itemStack, int index, int powerLe } @Inject(method = "clickMenuButton", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/inventory/ContainerLevelAccess;execute(Ljava/util/function/BiConsumer;)V"), cancellable = true) - private void clickMenuButton$InvokeEnchantEvent(Player player, int i, CallbackInfoReturnable cir) { + private void clickMenuButton$InvokeEnchantEvent(Player player, int clickedBtn, CallbackInfoReturnable cir) { this.access.execute((level, pos) -> { if (player != this.morejs$process.getPlayer()) { MoreJS.LOG.warn("<{}> Player changed during clickMenuButton", this.morejs$process.getPlayer()); @@ -137,7 +137,7 @@ private void handleEnchantmentGetter(ItemStack itemStack, int index, int powerLe ItemStack item = this.enchantSlots.getItem(0); ItemStack secondItem = this.enchantSlots.getItem(1); - var e = new EnchantmentTableServerEventJS(item, secondItem, level, pos, player, this.morejs$process); + var e = new PlayerEnchantEventJS(clickedBtn, item, secondItem, level, pos, player, this.morejs$process); if (Events.ENCHANTMENT_TABLE_ENCHANT.post(e).interruptFalse()) { cir.setReturnValue(false); } diff --git a/gradle.properties b/gradle.properties index b84a07c..8555597 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ # Project -version = 0.7.0 +version = 0.8.0 group = com.almostreliable.morejs license = GNU Lesser General Public License v3.0 mixinVersion = 0.8.5