package com.thebrokenrail.energonrelics.mixin; import com.thebrokenrail.energonrelics.block.forcefield.util.AbstractFieldBlock; import com.thebrokenrail.energonrelics.api.energy.tick.EnergyTicker; import net.minecraft.block.Block; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(World.class) public abstract class MixinWorld { @Shadow public abstract boolean isClient(); @Inject(at = @At("TAIL"), method = "tickBlockEntities") public void tickBlockEntities(CallbackInfo info) { if (!isClient()) { EnergyTicker.tick((World) (Object) this); } } @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;syncWorldEvent(ILnet/minecraft/util/math/BlockPos;I)V"), method = "breakBlock") public void breakBlock(World world, int eventId, BlockPos pos, int data) { if (!(Block.getStateFromRawId(data).getBlock() instanceof AbstractFieldBlock)) { world.syncWorldEvent(eventId, pos, data); } } }