37 lines
1.3 KiB
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();
|
|
}
|
|
}
|
|
|
|
}
|