diff --git a/src/main/java/org/auioc/mcmod/arnicalib/mod/mixin/common/MixinPistonBaseBlock.java b/src/main/java/org/auioc/mcmod/arnicalib/mod/mixin/common/MixinPistonBaseBlock.java new file mode 100644 index 00000000..c24395d9 --- /dev/null +++ b/src/main/java/org/auioc/mcmod/arnicalib/mod/mixin/common/MixinPistonBaseBlock.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2024 AUIOC.ORG + * + * This file is part of ArnicaLib, a mod made for Minecraft. + * + * ArnicaLib is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + */ + +package org.auioc.mcmod.arnicalib.mod.mixin.common; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.piston.PistonBaseBlock; +import net.minecraft.world.level.block.state.BlockState; +import org.auioc.mcmod.arnicalib.mod.common.event.AHCommonEventFactory; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(value = PistonBaseBlock.class) +public class MixinPistonBaseBlock { + + @Inject( + method = "Lnet/minecraft/world/level/block/piston/PistonBaseBlock;isPushable(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lnet/minecraft/core/Direction;ZLnet/minecraft/core/Direction;)Z", + at = @At(value = "HEAD"), + require = 1, + allow = 1, + cancellable = true + ) + private static void isPushable(BlockState pState, Level pLevel, BlockPos pPos, Direction pMovementDirection, boolean pAllowDestroy, Direction pPistonFacing, CallbackInfoReturnable cir) { + if (AHCommonEventFactory.onPistonCheckPushable(pState, pLevel, pPos, pMovementDirection, pAllowDestroy, pPistonFacing)) { + cir.setReturnValue(false); + } + } + +} diff --git a/src/main/resources/arnicalib.mixin.json b/src/main/resources/arnicalib.mixin.json index 969e36ce..f1d9039f 100644 --- a/src/main/resources/arnicalib.mixin.json +++ b/src/main/resources/arnicalib.mixin.json @@ -6,6 +6,7 @@ "common.MixinAccessorArrow", "common.MixinAccessorEnchantment", "common.MixinAccessorMobEffectInstance", + "common.MixinPistonBaseBlock", "common.MixinProjectile", "server.MixinBowItem", "server.MixinMemoryServerHandshakePacketListenerImpl",