Skip to content

Commit

Permalink
Add some utility to enchant event
Browse files Browse the repository at this point in the history
  • Loading branch information
LLytho committed Mar 22, 2024
1 parent 4dd03ab commit b892f55
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 5 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
Expand Down
Original file line number Diff line number Diff line change
@@ -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<ResourceLocation> getEnchantmentIds() {
return state
.getEnchantments(clickedButton)
.stream()
.map(ei -> ei.enchantment)
.map(BuiltInRegistries.ENCHANTMENT::getKey)
.toList();
}

public List<EnchantmentInstance> getEnchantments() {
return state.getEnchantments(clickedButton);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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<Boolean> cir) {
private void clickMenuButton$InvokeEnchantEvent(Player player, int clickedBtn, CallbackInfoReturnable<Boolean> cir) {
this.access.execute((level, pos) -> {
if (player != this.morejs$process.getPlayer()) {
MoreJS.LOG.warn("<{}> Player changed during clickMenuButton", this.morejs$process.getPlayer());
Expand All @@ -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);
}
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -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
Expand Down

0 comments on commit b892f55

Please sign in to comment.