Fixed Shears test

This commit is contained in:
Frank 2023-12-18 16:47:22 +01:00
parent 194e78c960
commit 2021063c6f
2 changed files with 18 additions and 14 deletions

View file

@ -3,31 +3,39 @@ package org.betterx.bclib.mixin.common.shears;
import org.betterx.worlds.together.tag.v3.CommonItemTags; import org.betterx.worlds.together.tag.v3.CommonItemTags;
import net.minecraft.advancements.critereon.ItemPredicate; import net.minecraft.advancements.critereon.ItemPredicate;
import net.minecraft.core.HolderSet;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import java.util.Set; import java.util.Optional;
import org.jetbrains.annotations.Nullable;
@Mixin(ItemPredicate.class) @Mixin(ItemPredicate.class)
public abstract class ItemPredicateBuilderMixin { public abstract class ItemPredicateBuilderMixin {
@Shadow @Shadow
@Final @Final
private @Nullable Set<Item> items; private Optional<HolderSet<Item>> items;
@Unique
private static final ResourceLocation BCL_SHEARS = new ResourceLocation("shears");
@Inject(method = "matches", at = @At("HEAD"), cancellable = true) @Inject(method = "matches", at = @At("HEAD"), cancellable = true)
void bclib_isShears(ItemStack itemStack, CallbackInfoReturnable<Boolean> info) { void bclib_isShears(ItemStack itemStack, CallbackInfoReturnable<Boolean> info) {
if (this.items != null && this.items.size() == 1 && this.items.contains(Items.SHEARS)) { if (this.items != null && this.items.isPresent()) {
if (itemStack.is(CommonItemTags.SHEARS)) { final HolderSet<Item> items = this.items.get();
info.setReturnValue(true); if (items.size() == 1 && items.get(0) != null && items.get(0).is(BCL_SHEARS)) {
if (itemStack.is(CommonItemTags.SHEARS)) {
info.setReturnValue(true);
}
} }
} }
} }

View file

@ -13,17 +13,13 @@ import net.minecraft.world.level.block.state.BlockState;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(TripWireBlock.class) @Mixin(TripWireBlock.class)
public class TripWireBlockMixin { public class TripWireBlockMixin {
@Inject(method = "playerWillDestroy(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/entity/player/Player;)V", at = @At("HEAD")) @Inject(method = "playerWillDestroy", at = @At("HEAD"))
private void bclib_isShears( private void bclib_isShears(
Level level, Level level, BlockPos blockPos, BlockState blockState, Player player, CallbackInfoReturnable<BlockState> cir
BlockPos blockPos,
BlockState blockState,
Player player,
CallbackInfo info
) { ) {
MethodReplace.addItemReplace(Items.SHEARS, BaseShearsItem::isShear); MethodReplace.addItemReplace(Items.SHEARS, BaseShearsItem::isShear);
} }