aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamWasher.java116
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;
+ }
}