package net.shadowfacts.extrahoppers.mixin; import net.minecraft.block.BlockState; import net.minecraft.fluid.FluidState; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.WorldChunk; 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.callback.CallbackInfoReturnable; import net.shadowfacts.extrahoppers.util.DynamicFluidStateProvider; /** * @author shadowfacts */ @Mixin(WorldChunk.class) public abstract class MixinWorldChunk implements Chunk { @Shadow private World world; @Inject(method = "getFluidState(III)Lnet/minecraft/fluid/FluidState;", at = @At("HEAD"), cancellable = true) public void getFluidState(int x, int y, int z, CallbackInfoReturnable cir) { BlockPos pos = new BlockPos(x, y, z); BlockState state = getBlockState(pos); if (state.getBlock() instanceof DynamicFluidStateProvider) { FluidState fluidState = ((DynamicFluidStateProvider)state.getBlock()).getFluidState(state, world, pos); cir.setReturnValue(fluidState); cir.cancel(); } } }