ExtraHoppers/src/main/java/net/shadowfacts/extrahoppers/mixin/MixinWorldChunk.java

37 lines
1.3 KiB
Java

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<FluidState> 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();
}
}
}