Skip to content

Commit

Permalink
copied over drain fix from gti
Browse files Browse the repository at this point in the history
  • Loading branch information
Trinsdar committed Mar 28, 2024
1 parent 4a43416 commit 73b3962
Showing 1 changed file with 73 additions and 18 deletions.
91 changes: 73 additions & 18 deletions common/src/main/java/trinsdar/gt4r/cover/CoverDrain.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,15 @@
import muramasa.antimatter.cover.CoverFactory;
import muramasa.antimatter.machine.Tier;
import muramasa.antimatter.blockentity.pipe.BlockEntityFluidPipe;
import muramasa.antimatter.util.AntimatterPlatformUtils;
import muramasa.antimatter.util.Utils;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.Holder;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.BiomeTags;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.block.Blocks;
Expand All @@ -33,6 +37,9 @@
public class CoverDrain extends BaseCover {
public static String ID = "drain";

FluidHolder contained = FluidHooks.emptyFluid();
boolean receivedBlockUpdate = false;

public CoverDrain(ICoverHandler<?> source, @Nullable Tier tier, Direction side, CoverFactory factory) {
super(source, tier, side, factory);
}
Expand Down Expand Up @@ -66,31 +73,45 @@ public void onUpdate() {
}
});
}
if (world.getGameTime() % (20) != 0) {
if (!contained.isEmpty()){
cap.ifPresent(f ->{
long filled = f.insertFluid(contained.copyHolder(), true);
if (filled > 0) {
f.insertFluid(Utils.ca(filled, contained), false);
contained.setAmount(contained.getFluidAmount() - filled);
if (contained.getFluidAmount() <= 0){
contained = FluidHooks.emptyFluid();
}
}
});
}
if (!(receivedBlockUpdate || world.getGameTime() % (20) == 5)) {
return;
}
if (!contained.isEmpty()){
if (!receivedBlockUpdate) receivedBlockUpdate = true;
return;
}
BlockState blockState = world.getBlockState(offset);
FluidState state = world.getFluidState(offset);
if (state.getType() == Fluids.EMPTY || !state.getType().isSource(state)) return;
Fluid fluid = state.getType();
cap.ifPresent(f -> {
for (int i = 0; i < f.getTankAmount(); i++) {
FluidHolder toInsert = FluidPlatformUtils.createFluidStack(fluid, 1000 * TesseractGraphWrappers.dropletMultiplier);
long filled = f.insertFluid(toInsert, true);
if (filled == 1000 * TesseractGraphWrappers.dropletMultiplier) {
f.insertFluid(FluidPlatformUtils.createFluidStack(toInsert.getFluid(), filled), false);
Holder<Biome> biome = world.getBiome(offset);
if (fluid != Fluids.WATER || (!biome.is(BiomeTags.IS_DEEP_OCEAN) && !biome.is(BiomeTags.IS_OCEAN) && !biome.is(BiomeTags.IS_RIVER))){
BlockState newState = Blocks.AIR.defaultBlockState();
if (fluid == Fluids.WATER && blockState.getBlock() != Blocks.WATER && blockState.hasProperty(BlockStateProperties.WATERLOGGED) && blockState.getValue(BlockStateProperties.WATERLOGGED)){
newState = blockState.setValue(BlockStateProperties.WATERLOGGED, false);
}
world.setBlockAndUpdate(offset, newState);
}
break;
}
contained = FluidPlatformUtils.createFluidStack(fluid, 1000 * TesseractGraphWrappers.dropletMultiplier);
Holder<Biome> biome = world.getBiome(offset);
if (fluid != Fluids.WATER || (!biome.is(BiomeTags.IS_DEEP_OCEAN) && !biome.is(BiomeTags.IS_OCEAN) && !biome.is(BiomeTags.IS_RIVER))){
BlockState newState = Blocks.AIR.defaultBlockState();
if (fluid == Fluids.WATER && blockState.getBlock() != Blocks.WATER && blockState.hasProperty(BlockStateProperties.WATERLOGGED) && blockState.getValue(BlockStateProperties.WATERLOGGED)){
newState = blockState.setValue(BlockStateProperties.WATERLOGGED, false);
}
});
world.setBlockAndUpdate(offset, newState);
}
if (receivedBlockUpdate) receivedBlockUpdate = false;
}

@Override
public void onBlockUpdate() {
super.onBlockUpdate();
receivedBlockUpdate = true;
}

@Override
Expand All @@ -108,4 +129,38 @@ public ResourceLocation getModel(String type, Direction dir) {
if (type.equals("pipe")) return PIPE_COVER_MODEL;
return getBasicModel();
}

@Override
public ItemStack getDroppedStack() {
ItemStack stack = super.getDroppedStack();
if (!contained.isEmpty()){
stack.getOrCreateTag().put("containedFluid", contained.serialize());
}
return stack;
}

@Override
public void addInfoFromStack(ItemStack stack) {
super.addInfoFromStack(stack);
if (stack.getTag() != null && stack.getTag().contains("containedFluid")){
contained = AntimatterPlatformUtils.fromTag(stack.getTag().getCompound("containedFluid"));
}
}

@Override
public CompoundTag serialize() {
CompoundTag tag = super.serialize();
if (!contained.isEmpty()){
tag.put("contained", contained.serialize());
}
return tag;
}

@Override
public void deserialize(CompoundTag nbt) {
super.deserialize(nbt);
if (nbt.contains("contained")){
contained = AntimatterPlatformUtils.fromTag(nbt.getCompound("contained"));
}
}
}

0 comments on commit 73b3962

Please sign in to comment.