diff options
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamWasher.java | 116 |
1 files changed, 113 insertions, 3 deletions
diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamWasher.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamWasher.java index 3012016d23..5b84cf9ec4 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamWasher.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamWasher.java @@ -8,6 +8,7 @@ import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.List; import javax.annotation.Nonnull; @@ -23,6 +24,7 @@ import net.minecraft.util.ResourceLocation; import net.minecraft.util.StatCollector; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; import org.apache.commons.lang3.tuple.Pair; import org.jetbrains.annotations.NotNull; @@ -30,6 +32,8 @@ import org.jetbrains.annotations.NotNull; import com.google.common.collect.ImmutableList; import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing; +import com.gtnewhorizon.structurelib.alignment.enumerable.Flip; import com.gtnewhorizon.structurelib.structure.IStructureDefinition; import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; import com.gtnewhorizon.structurelib.structure.StructureDefinition; @@ -45,16 +49,19 @@ import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.logic.ProcessingLogic; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.multitileentity.multiblock.casing.Glasses; import gregtech.api.objects.GT_RenderedTexture; import gregtech.api.recipe.RecipeMap; import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; import gregtech.api.util.GT_Multiblock_Tooltip_Builder; import gregtech.api.util.GT_OverclockCalculator; import gregtech.api.util.GT_Recipe; import gregtech.common.blocks.GT_Block_Casings1; import gregtech.common.blocks.GT_Block_Casings2; import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import gtPlusPlus.core.util.minecraft.FluidUtils; import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_SteamMultiBase; import ic2.core.init.BlocksItems; import ic2.core.init.InternalName; @@ -101,6 +108,8 @@ public class GregtechMetaTileEntity_SteamWasher extends GregtechMeta_SteamMultiB private static final int MACHINEMODE_OREWASH = 0; private static final int MACHINEMODE_SIMPLEWASH = 1; + private boolean isBroken = true; + private int tierGearBoxCasing = -1; private int tierPipeCasing = -1; private int tierMachineCasing = -1; @@ -198,13 +207,12 @@ public class GregtechMetaTileEntity_SteamWasher extends GregtechMeta_SteamMultiB -1, (t, m) -> t.tierPipeCasing = m, t -> t.tierPipeCasing)) - .addElement('D', ofChain(ofBlock(Blocks.glass, 0), Glasses.chainAllGlasses())) + .addElement('D', ofBlock(Blocks.glass, 0)) .addElement( 'E', ofChain( isAir(), ofBlockAnyMeta(Blocks.water), - ofBlockAnyMeta(Blocks.flowing_water), ofBlockAnyMeta(BlocksItems.getFluidBlock(InternalName.fluidDistilledWater)))) .addElement( 'A', @@ -296,10 +304,29 @@ public class GregtechMetaTileEntity_SteamWasher extends GregtechMeta_SteamMultiB return RecipeMaps.oreWasherRecipes; } + @NotNull + @Override + public Collection<RecipeMap<?>> getAvailableRecipeMaps() { + return Arrays.asList(GTPPRecipeMaps.simpleWasherRecipes, RecipeMaps.oreWasherRecipes); + } + @Override protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@Nonnull GT_Recipe recipe) { + if (isBroken) { + checkForWater(); + isBroken = false; + } else { + return CheckRecipeResultRegistry.SUCCESSFUL; + } + return SimpleCheckRecipeResult.ofFailure("no_water"); + } + @Override @Nonnull protected GT_OverclockCalculator createOverclockCalculator(@NotNull GT_Recipe recipe) { @@ -432,4 +459,87 @@ public class GregtechMetaTileEntity_SteamWasher extends GregtechMeta_SteamMultiB machineModeIcons.add(GT_UITextures.OVERLAY_BUTTON_MACHINEMODE_WASHPLANT); machineModeIcons.add(GT_UITextures.OVERLAY_BUTTON_MACHINEMODE_SIMPLEWASHER); } + + @Override + public String getMachineModeName() { + return StatCollector.translateToLocal("GT5U.GTPP_MULTI_WASH_PLANT.mode." + machineMode); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isServerSide()) { + if (mUpdate < 0) mUpdate = 300; + if ((aTick % 1200) == 0) { + isBroken = true; + } + } + } + + private void checkForWater() { + ExtendedFacing facing = getExtendedFacing(); + final ForgeDirection frontFacing = facing.getDirection(); + final Flip curFlip = facing.getFlip(); + IGregTechTileEntity gregTechTileEntity = this.getBaseMetaTileEntity(); + + double xOffset = getExtendedFacing().getRelativeBackInWorld().offsetX; + double zOffset = getExtendedFacing().getRelativeBackInWorld().offsetZ; + double yOffset = getExtendedFacing().getRelativeBackInWorld().offsetY; + + switch (frontFacing) { + case WEST -> { + xOffset -= 1; + zOffset += curFlip.isHorizontallyFlipped() ? -6 : 4; + } + case EAST -> { + xOffset -= 1; + zOffset += curFlip.isHorizontallyFlipped() ? 4 : -6; + } + case NORTH -> { + zOffset -= 1; + xOffset += curFlip.isHorizontallyFlipped() ? 4 : -6; + } + case SOUTH -> { + zOffset -= 1; + xOffset += curFlip.isHorizontallyFlipped() ? -6 : 4; + } + } + + int x = gregTechTileEntity.getXCoord(); + int y = gregTechTileEntity.getYCoord(); + int z = gregTechTileEntity.getZCoord(); + + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) { + Block tBlock = this.getBaseMetaTileEntity() + .getWorld() + .getBlock((int) (i + xOffset + x), (int) (y + yOffset), (int) (j + zOffset + z)); + if (tBlock == Blocks.air) { + if (tryConsumeWater()) { + this.getBaseMetaTileEntity() + .getWorld() + .setBlock( + (int) (i + xOffset + x), + (int) (y + yOffset), + (int) (j + zOffset + z), + Blocks.water); + } + } + } + } + } + + private boolean tryConsumeWater() { + if (getStoredFluids() != null) { + for (FluidStack waterCapacity : this.getStoredFluids()) { + if (waterCapacity.isFluidEqual(FluidUtils.getWater(1000))) { + if (waterCapacity.amount >= 1000) { + waterCapacity.amount -= 1000; + return true; + } + } + } + } + return false; + } } |