aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gtPlusPlus/xmod/gregtech
diff options
context:
space:
mode:
authorevgengoldwar <69961523+evgengoldwar@users.noreply.github.com>2024-07-18 19:38:15 +0400
committerGitHub <noreply@github.com>2024-07-18 22:38:15 +0700
commit5e6ba0d78c7130762f076f56c856752e40068307 (patch)
treec1e40dc55712e58a74e7173d2f2641518e0ed2e9 /src/main/java/gtPlusPlus/xmod/gregtech
parent4f7a7257760cd271cfe33d0fab3d82f64d45543f (diff)
downloadGT5-Unofficial-5e6ba0d78c7130762f076f56c856752e40068307.tar.gz
GT5-Unofficial-5e6ba0d78c7130762f076f56c856752e40068307.tar.bz2
GT5-Unofficial-5e6ba0d78c7130762f076f56c856752e40068307.zip
Added Water Pump (#2694)
* Add Water Pump * Added check humidity * Apply spotless * Added tier 2 WaterPump * Added new textures and Fixed the display in nei * Optimizing imports * Fix tooltip * Added craft for Output hatch ULV, Wooden Casing, Water Pump * Apply spotless * sa+update deps * Delete the sky check method * sa * Rewrote WaterPump to SteamMultiBase. * Added a steam hatch to the structure and changed the tooltip * Spotless apply * Changed VoidProtection and calculate water generation * Remove star imports * Rename Wooden Casing to Primitive Wooden Casing * Remove enableMultiblock_WaterPump * Rename static variables * Change variables and tooltip * Sa --------- Co-authored-by: Dream Master <dream-master@gmx.net>
Diffstat (limited to 'src/main/java/gtPlusPlus/xmod/gregtech')
-rw-r--r--src/main/java/gtPlusPlus/xmod/gregtech/api/enums/GregtechItemList.java3
-rw-r--r--src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamWaterPump.java356
-rw-r--r--src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechWaterPump.java14
3 files changed, 373 insertions, 0 deletions
diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/enums/GregtechItemList.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/enums/GregtechItemList.java
index 71274e0091..caa2254373 100644
--- a/src/main/java/gtPlusPlus/xmod/gregtech/api/enums/GregtechItemList.java
+++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/enums/GregtechItemList.java
@@ -408,6 +408,9 @@ public enum GregtechItemList implements GregtechItemContainer {
Casing_Vacuum_Furnace,
Controller_Vacuum_Furnace,
+ // Water pump
+ WaterPump,
+
// Large Rocket Engine
Casing_RocketEngine,
Controller_RocketEngine,
diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamWaterPump.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamWaterPump.java
new file mode 100644
index 0000000000..a32c0ea4cf
--- /dev/null
+++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamWaterPump.java
@@ -0,0 +1,356 @@
+package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam;
+
+import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock;
+import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain;
+import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass;
+import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose;
+import static gregtech.api.enums.GT_HatchElement.OutputHatch;
+import static gregtech.api.enums.GT_Values.AuthorEvgenWarGold;
+import static gregtech.api.util.GT_StructureUtility.buildHatchAdder;
+import static gregtech.api.util.GT_StructureUtility.ofFrame;
+
+import java.util.List;
+
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.StatCollector;
+import net.minecraft.world.World;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidRegistry;
+import net.minecraftforge.fluids.FluidStack;
+
+import org.jetbrains.annotations.NotNull;
+
+import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits;
+import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable;
+import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
+import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment;
+import com.gtnewhorizon.structurelib.structure.StructureDefinition;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.recipe.check.CheckRecipeResult;
+import gregtech.api.recipe.check.CheckRecipeResultRegistry;
+import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
+import gregtech.api.util.GT_Utility;
+import gregtech.api.util.VoidProtectionHelper;
+import gregtech.common.blocks.GT_Block_Casings9;
+import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_SteamMultiBase;
+import mcp.mobius.waila.api.IWailaConfigHandler;
+import mcp.mobius.waila.api.IWailaDataAccessor;
+
+public class GregtechMetaTileEntity_SteamWaterPump
+ extends GregtechMeta_SteamMultiBase<GregtechMetaTileEntity_SteamWaterPump> implements ISurvivalConstructable {
+
+ public GregtechMetaTileEntity_SteamWaterPump(String aName) {
+ super(aName);
+ }
+
+ public GregtechMetaTileEntity_SteamWaterPump(int aID, String aName, String aNameRegional) {
+ super(aID, aName, aNameRegional);
+ }
+
+ @Override
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GregtechMetaTileEntity_SteamWaterPump(this.mName);
+ }
+
+ @Override
+ public String getMachineType() {
+ return "Water Pump";
+ }
+
+ private static IStructureDefinition<GregtechMetaTileEntity_SteamWaterPump> STRUCTURE_DEFINITION = null;
+
+ private static final int HORIZONTAL_OFF_SET = 1;
+ private static final int VERTICAL_OFF_SET = 2;
+ private static final int DEPTH_OFF_SET = 0;
+ private static final String tier1 = "tier1";
+ private static final String tier2 = "tier2";
+
+ // Base amount of water produced per second, before applying humidity and tier modifiers.
+ private static final int BASE_WATER_PER_SECOND = 1_500;
+ private static final int PROGRESSION_TIME_TICKS = 20;
+
+ private static final int BASE_STEAM_PER_SECOND = 400;
+
+ private int mSetTier = 1;
+
+ private float currentHumidity;
+
+ private static final Fluid water = FluidRegistry.getFluid("water");
+
+ private FluidStack[] getWater() {
+ return new FluidStack[] { new FluidStack(water, calculateFinalWaterOutput()) };
+ }
+
+ private int mCountCasing;
+
+ private float getHumidity() {
+ return this.getBaseMetaTileEntity()
+ .getWorld()
+ .getBiomeGenForCoords(getBaseMetaTileEntity().getXCoord(), getBaseMetaTileEntity().getZCoord()).rainfall;
+ }
+
+ private int calculateFinalWaterOutput() {
+ return (int) (currentHumidity * BASE_WATER_PER_SECOND * mSetTier);
+ }
+
+ // spotless:off
+ @Override
+ public IStructureDefinition<GregtechMetaTileEntity_SteamWaterPump> getStructureDefinition() {
+ if (STRUCTURE_DEFINITION == null) {
+
+ STRUCTURE_DEFINITION = StructureDefinition.<GregtechMetaTileEntity_SteamWaterPump>builder()
+
+ .addShape(
+ tier1,
+ transpose(
+ new String[][] {
+ { " A ", " A ", "AAA", " A " },
+ { " A ", " ", "A A", " A " },
+ { "C~C", "CCC", "CCC", "CCC" } }))
+ .addShape(
+ tier2,
+ transpose(
+ new String[][] {
+ { " D ", " D ", "DDD", " D " },
+ { " D ", " ", "D D", " D " },
+ { "C~C", "CCC", "CCC", "CCC" } }))
+ .addElement('A', ofFrame(Materials.Bronze))
+ .addElement('D', ofFrame(Materials.Steel))
+ .addElement(
+ 'C',
+ ofChain(
+ buildSteamInput(GregtechMetaTileEntity_SteamWaterPump.class)
+ .casingIndex(((GT_Block_Casings9) GregTech_API.sBlockCasings9).getTextureIndex(2))
+ .dot(1)
+ .build(),
+ buildHatchAdder(GregtechMetaTileEntity_SteamWaterPump.class)
+ .atLeast(OutputHatch)
+ .casingIndex(((GT_Block_Casings9) GregTech_API.sBlockCasings9).getTextureIndex(2))
+ .dot(1)
+ .buildAndChain(onElementPass(x -> ++x.mCountCasing, ofBlock(GregTech_API.sBlockCasings9, 2)))
+ )
+ )
+ .build();
+
+ }
+ return STRUCTURE_DEFINITION;
+ }
+ // spotless:on
+
+ @Override
+ public void construct(ItemStack stackSize, boolean hintsOnly) {
+ if (stackSize.stackSize == 1) {
+ this.buildPiece(tier1, stackSize, hintsOnly, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET);
+ } else {
+ this.buildPiece(tier2, stackSize, hintsOnly, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET);
+ }
+ }
+
+ @Override
+ public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) {
+ if (this.mMachine) return -1;
+ int built = 0;
+ if (stackSize.stackSize == 1) {
+ mSetTier = 1;
+ built += this.survivialBuildPiece(
+ tier1,
+ stackSize,
+ HORIZONTAL_OFF_SET,
+ VERTICAL_OFF_SET,
+ DEPTH_OFF_SET,
+ elementBudget,
+ env,
+ false,
+ true);
+ } else {
+ mSetTier = 2;
+ built += this.survivialBuildPiece(
+ tier2,
+ stackSize,
+ HORIZONTAL_OFF_SET,
+ VERTICAL_OFF_SET,
+ DEPTH_OFF_SET,
+ elementBudget,
+ env,
+ false,
+ true);
+ }
+ return built;
+ }
+
+ public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) {
+ mCountCasing = 0;
+ mSetTier = 1;
+ if (!checkPiece(tier1, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET)) {
+ if (!checkPiece(tier2, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET)) return false;
+ mSetTier = 2;
+ }
+
+ if (this.mOutputHatches.size() != 1 || this.mSteamInputFluids.size() != 1) return false;
+
+ currentHumidity = getHumidity();
+ return mCountCasing >= 9;
+ }
+
+ @Override
+ public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side,
+ final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) {
+ if (side == facing) {
+ return new ITexture[] {
+ Textures.BlockIcons
+ .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings9, 2)),
+ aActive ? getFrontOverlayActive() : getFrontOverlay() };
+ }
+ return new ITexture[] { Textures.BlockIcons
+ .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings9, 2)) };
+ }
+
+ @Override
+ protected GT_RenderedTexture getFrontOverlay() {
+ return new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_WATER_PUMP);
+ }
+
+ @Override
+ protected GT_RenderedTexture getFrontOverlayActive() {
+ return new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_WATER_PUMP_ACTIVE);
+ }
+
+ @Override
+ protected GT_Multiblock_Tooltip_Builder createTooltip() {
+ GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder();
+ tt.addMachineType(getMachineType())
+ .addInfo("Controller Block for the Water Pump")
+ .addInfo("Generates water based on biome humidity")
+ .addInfo("Has 2 tiers: Bronze and Steel")
+ .addInfo("Steel tier extracts 2x water")
+ .addInfo(
+ EnumChatFormatting.AQUA + "Generates: "
+ + EnumChatFormatting.WHITE
+ + " humidity * Tier * "
+ + BASE_WATER_PER_SECOND
+ + " L/s"
+ + EnumChatFormatting.AQUA
+ + " of water."
+ + EnumChatFormatting.RESET)
+ .addInfo(
+ EnumChatFormatting.RED + "Consumes: "
+ + EnumChatFormatting.WHITE
+ + BASE_STEAM_PER_SECOND
+ + " L/s"
+ + EnumChatFormatting.RED
+ + " of steam."
+ + EnumChatFormatting.RESET)
+ .addSeparator()
+ .beginStructureBlock(3, 3, 5, false)
+ .addInputHatch(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1)
+ .addStructureInfo(
+ EnumChatFormatting.WHITE + "Steam Input Hatch "
+ + EnumChatFormatting.GOLD
+ + "1"
+ + EnumChatFormatting.GRAY
+ + " Any casing")
+ .addStructureInfo(EnumChatFormatting.BLUE + "Tier " + EnumChatFormatting.DARK_PURPLE + 1)
+ .addStructureInfo(EnumChatFormatting.GOLD + "10" + EnumChatFormatting.GRAY + " Bronze Frame Box")
+ .addStructureInfo(EnumChatFormatting.GOLD + "10" + EnumChatFormatting.GRAY + " Wooden Casing")
+ .addStructureInfo(EnumChatFormatting.BLUE + "Tier " + EnumChatFormatting.DARK_PURPLE + 2)
+ .addStructureInfo(EnumChatFormatting.GOLD + "10" + EnumChatFormatting.GRAY + " Steel Frame Box")
+ .addStructureInfo(EnumChatFormatting.GOLD + "10 " + EnumChatFormatting.GRAY + " Wooden Casing")
+ .toolTipFinisher(AuthorEvgenWarGold);
+ return tt;
+ }
+
+ @Override
+ @NotNull
+ public CheckRecipeResult checkProcessing() {
+
+ VoidProtectionHelper voidProtection = new VoidProtectionHelper().setMachine(this)
+ .setFluidOutputs(getWater())
+ .build();
+
+ if (voidProtection.isFluidFull()) {
+ mOutputFluids = null;
+ mMaxProgresstime = 0;
+ return CheckRecipeResultRegistry.FLUID_OUTPUT_FULL;
+ } else {
+ if (getTotalSteamStored() >= BASE_STEAM_PER_SECOND) {
+ mMaxProgresstime = PROGRESSION_TIME_TICKS;
+ tryConsumeSteam(BASE_STEAM_PER_SECOND);
+ mOutputFluids = getWater();
+ updateSlots();
+ return CheckRecipeResultRegistry.SUCCESSFUL;
+ } else return CheckRecipeResultRegistry.NO_RECIPE;
+ }
+ }
+
+ @Override
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
+ super.onPostTick(aBaseMetaTileEntity, aTick);
+ if (aBaseMetaTileEntity.isServerSide()) {
+ if ((aTick % 1200) == 0) {
+ currentHumidity = getHumidity();
+ }
+ }
+ }
+
+ @Override
+ public void getWailaBody(ItemStack itemStack, List<String> currenttip, IWailaDataAccessor accessor,
+ IWailaConfigHandler config) {
+ super.getWailaBody(itemStack, currenttip, accessor, config);
+ NBTTagCompound tag = accessor.getNBTData();
+
+ currenttip.add(
+ StatCollector.translateToLocal("GT5U.machines.tier") + ": "
+ + EnumChatFormatting.BLUE
+ + tag.getInteger("mSetTier")
+ + EnumChatFormatting.RESET);
+ currenttip.add(
+ StatCollector.translateToLocal("GT5U.biomes.humidity") + " "
+ + EnumChatFormatting.BLUE
+ + tag.getFloat("humidity")
+ + " %"
+ + EnumChatFormatting.RESET);
+ }
+
+ @Override
+ public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y,
+ int z) {
+ super.getWailaNBTData(player, tile, tag, world, x, y, z);
+ tag.setFloat("humidity", currentHumidity * 100);
+ tag.setInteger("mSetTier", mSetTier);
+ }
+
+ @Override
+ public void saveNBTData(NBTTagCompound aNBT) {
+ super.saveNBTData(aNBT);
+ aNBT.setInteger("mSetTier", mSetTier);
+ }
+
+ @Override
+ public void loadNBTData(final NBTTagCompound aNBT) {
+ super.loadNBTData(aNBT);
+ mSetTier = aNBT.getInteger("mSetTier");
+ }
+
+ @Override
+ public int getMaxParallelRecipes() {
+ return 1;
+ }
+
+ @Override
+ protected IAlignmentLimits getInitialAlignmentLimits() {
+ return (d, r, f) -> d.offsetY == 0 && r.isNotRotated() && !f.isVerticallyFliped();
+ }
+
+}
diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechWaterPump.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechWaterPump.java
new file mode 100644
index 0000000000..476e13bd15
--- /dev/null
+++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechWaterPump.java
@@ -0,0 +1,14 @@
+package gtPlusPlus.xmod.gregtech.registration.gregtech;
+
+import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList;
+import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam.GregtechMetaTileEntity_SteamWaterPump;
+
+public class GregtechWaterPump {
+
+ public static void run() {
+ // Water Pump Multiblock
+ GregtechItemList.WaterPump.set(
+ new GregtechMetaTileEntity_SteamWaterPump(31085, "waterpump.controller.tier.single", "Water Pump")
+ .getStackForm(1L));
+ }
+}