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",