aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dependencies.gradle6
-rw-r--r--gradle.properties8
-rw-r--r--settings.gradle2
-rw-r--r--src/main/java/gregtech/api/enums/Textures.java2
-rw-r--r--src/main/java/gtPlusPlus/xmod/gregtech/api/enums/GregtechItemList.java2
-rw-r--r--src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamForgeHammer.java389
-rw-r--r--src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSteamMultis.java7
-rw-r--r--src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/MetaTileEntityIDs.java1
-rw-r--r--src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FRONT_STEAM_FORGE_HAMMER.pngbin0 -> 278 bytes
-rw-r--r--src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FRONT_STEAM_FORGE_HAMMER_ACTIVE.pngbin0 -> 330 bytes
10 files changed, 412 insertions, 5 deletions
diff --git a/dependencies.gradle b/dependencies.gradle
index 24154f2a4a..766e13672d 100644
--- a/dependencies.gradle
+++ b/dependencies.gradle
@@ -38,7 +38,7 @@ dependencies {
api("net.industrial-craft:industrialcraft-2:2.2.828-experimental:dev")
api("com.github.GTNewHorizons:NotEnoughItems:2.6.14-GTNH:dev")
api("com.github.GTNewHorizons:NotEnoughIds:2.1.0:dev")
- api("com.github.GTNewHorizons:GTNHLib:0.3.2:dev")
+ api("com.github.GTNewHorizons:GTNHLib:0.3.3:dev")
api("com.github.GTNewHorizons:ModularUI:1.2.0:dev")
api("com.github.GTNewHorizons:waila:1.8.1:dev")
api("com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-412-GTNH:dev")
@@ -51,10 +51,10 @@ dependencies {
runtimeOnly("com.github.GTNewHorizons:Draconic-Evolution:1.3.6-GTNH:dev") // needed?
implementation('com.github.GTNewHorizons:GTNEIOrePlugin:1.3.2:dev') { transitive = false }
- implementation("com.github.GTNewHorizons:Avaritia:1.50:dev")
+ implementation("com.github.GTNewHorizons:Avaritia:1.51:dev")
implementation("com.github.GTNewHorizons:ForestryMC:4.9.7:dev") { transitive = false }
- compileOnlyApi('com.github.GTNewHorizons:Angelica:1.0.0-beta1:api') { transitive = false }
+ compileOnlyApi('com.github.GTNewHorizons:Angelica:1.0.0-beta2:api') { transitive = false }
compileOnlyApi("com.github.GTNewHorizons:AppleCore:3.3.0:dev") { transitive = false }
compileOnlyApi("com.github.GTNewHorizons:BuildCraft:7.1.39:dev") { transitive = false }
compileOnlyApi("com.github.GTNewHorizons:EnderIO:2.8.17:dev") { transitive = false }
diff --git a/gradle.properties b/gradle.properties
index 59d895df61..a3c688815c 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -117,9 +117,15 @@ minimizeShadowedDependencies = true
# If disabled, won't rename the shadowed classes.
relocateShadowedDependencies = true
-# Adds the GTNH maven, CurseMaven, Modrinth, and some more well-known 1.7.10 repositories.
+# Adds CurseMaven, Modrinth, and some more well-known 1.7.10 repositories.
includeWellKnownRepositories = true
+# A list of repositories to exclude from the includeWellKnownRepositories setting. Should be a space separated
+# list of strings, with the acceptable keys being(case does not matter):
+# cursemaven
+# modrinth
+excludeWellKnownRepositories =
+
# Change these to your Maven coordinates if you want to publish to a custom Maven repository instead of the default GTNH Maven.
# Authenticate with the MAVEN_USER and MAVEN_PASSWORD environment variables.
# If you need a more complex setup disable maven publishing here and add a publishing repository to addon.gradle.
diff --git a/settings.gradle b/settings.gradle
index 6fe010ce8b..731d57d0e9 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -17,7 +17,7 @@ pluginManagement {
}
plugins {
- id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.23'
+ id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.24'
}
diff --git a/src/main/java/gregtech/api/enums/Textures.java b/src/main/java/gregtech/api/enums/Textures.java
index 5d3f65cfaf..33b8483a2d 100644
--- a/src/main/java/gregtech/api/enums/Textures.java
+++ b/src/main/java/gregtech/api/enums/Textures.java
@@ -660,6 +660,8 @@ public class Textures {
OVERLAY_FRONT_WATER_PUMP_ACTIVE,
OVERLAY_FRONT_STEAM_CENTRIFUGE,
OVERLAY_FRONT_STEAM_CENTRIFUGE_ACTIVE,
+ OVERLAY_FRONT_STEAM_FORGE_HAMMER,
+ OVERLAY_FRONT_STEAM_FORGE_HAMMER_ACTIVE,
OVERLAY_FRONT_STEAM_COMPRESSOR,
OVERLAY_FRONT_STEAM_COMPRESSOR_GLOW,
OVERLAY_FRONT_STEAM_EXTRACTOR,
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 caa2254373..930d34d10d 100644
--- a/src/main/java/gtPlusPlus/xmod/gregtech/api/enums/GregtechItemList.java
+++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/enums/GregtechItemList.java
@@ -453,6 +453,8 @@ public enum GregtechItemList implements GregtechItemContainer {
Controller_SteamWasherMulti,
// Big Steam Centrifuge
Controller_SteamCentrifugeMulti,
+ // Bit Steam Forge Hammer
+ Controller_SteamForgeHammerMulti,
// Big Steam Compressor
Controller_SteamCompressorMulti,
diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamForgeHammer.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamForgeHammer.java
new file mode 100644
index 0000000000..1866bfd367
--- /dev/null
+++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamForgeHammer.java
@@ -0,0 +1,389 @@
+package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam;
+
+import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlocksTiered;
+import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain;
+import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose;
+import static gregtech.api.GregTech_API.sBlockCasings1;
+import static gregtech.api.GregTech_API.sBlockCasings2;
+import static gregtech.api.enums.GT_Values.AuthorEvgenWarGold;
+import static gregtech.api.util.GT_StructureUtility.buildHatchAdder;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.annotation.Nonnull;
+
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.ResourceLocation;
+import net.minecraft.util.StatCollector;
+import net.minecraft.world.World;
+import net.minecraftforge.common.util.ForgeDirection;
+
+import org.apache.commons.lang3.tuple.Pair;
+import org.jetbrains.annotations.NotNull;
+
+import com.google.common.collect.ImmutableList;
+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 cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.SoundResource;
+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.logic.ProcessingLogic;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch;
+import gregtech.api.objects.GT_RenderedTexture;
+import gregtech.api.recipe.RecipeMap;
+import gregtech.api.recipe.RecipeMaps;
+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.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_SteamMultiBase;
+import mcp.mobius.waila.api.IWailaConfigHandler;
+import mcp.mobius.waila.api.IWailaDataAccessor;
+
+public class GregtechMetaTileEntity_SteamForgeHammer
+ extends GregtechMeta_SteamMultiBase<GregtechMetaTileEntity_SteamForgeHammer> implements ISurvivalConstructable {
+
+ public GregtechMetaTileEntity_SteamForgeHammer(String aName) {
+ super(aName);
+ }
+
+ public GregtechMetaTileEntity_SteamForgeHammer(int aID, String aName, String aNameRegional) {
+ super(aID, aName, aNameRegional);
+ }
+
+ @Override
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GregtechMetaTileEntity_SteamForgeHammer(this.mName);
+ }
+
+ @Override
+ public String getMachineType() {
+ return "Forge Hammer";
+ }
+
+ private static final String STRUCTUR_PIECE_MAIN = "main";
+
+ private IStructureDefinition<GregtechMetaTileEntity_SteamForgeHammer> STRUCTURE_DEFINITION = null;
+
+ // spotless:off
+ private final String[][] shape = new String[][] {
+ {" "," "," B "," "," "},
+ {" "," A ","AABAA"," A "," "},
+ {" "," ","A C A"," "," "},
+ {" "," ","A C A"," "," "},
+ {" "," ","A A"," "," "},
+ {" "," A~A ","AA AA"," AAA "," "},
+ {" AAA ","AAAAA","AAAAA","AAAAA"," AAA "} };
+ //spotless:on
+
+ private static final int HORIZONTAL_OFF_SET = 2;
+ private static final int VERTICAL_OFF_SET = 5;
+ private static final int DEPTH_OFF_SET = 1;
+
+ private int tierPipeCasing = -1;
+ private int tierMachineCasing = -1;
+
+ private int tCountCasing = 0;
+
+ private int tierMachine = 1;
+
+ private int tierSimpleBlock = -1;
+
+ public static int getTierSimpleBlock(Block block, int meta) {
+ if (block == Blocks.iron_block && meta == 0) return 1;
+ if (block == GregTech_API.sBlockMetal6 && meta == 13) return 2;
+ return 0;
+ }
+
+ public int getTierMachineCasing(Block block, int meta) {
+ if (block == sBlockCasings1 && 10 == meta) {
+ tCountCasing++;
+ return 1;
+ }
+ if (block == sBlockCasings2 && 0 == meta) {
+ tCountCasing++;
+ return 2;
+ }
+ return 0;
+ }
+
+ public static int getTierPipeCasing(Block block, int meta) {
+ if (block == sBlockCasings2 && 12 == meta) return 1;
+ if (block == sBlockCasings2 && 13 == meta) return 2;
+ return 0;
+ }
+
+ protected void updateHatchTexture() {
+ for (GT_MetaTileEntity_Hatch h : mSteamInputs) h.updateTexture(getCasingTextureID());
+ for (GT_MetaTileEntity_Hatch h : mSteamOutputs) h.updateTexture(getCasingTextureID());
+ for (GT_MetaTileEntity_Hatch h : mSteamInputFluids) h.updateTexture(getCasingTextureID());
+ }
+
+ private int getCasingTextureID() {
+ if (tierPipeCasing == 2 || tierMachineCasing == 2 || tierSimpleBlock == 2)
+ return ((GT_Block_Casings2) GregTech_API.sBlockCasings2).getTextureIndex(0);
+ return ((GT_Block_Casings1) GregTech_API.sBlockCasings1).getTextureIndex(10);
+ }
+
+ @Override
+ public void onValueUpdate(byte aValue) {
+ tierMachineCasing = aValue;
+ }
+
+ @Override
+ public byte getUpdateData() {
+ return (byte) tierMachineCasing;
+ }
+
+ @Override
+ protected GT_RenderedTexture getFrontOverlay() {
+ return new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_FORGE_HAMMER);
+ }
+
+ @Override
+ protected GT_RenderedTexture getFrontOverlayActive() {
+ return new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_FORGE_HAMMER_ACTIVE);
+ }
+
+ @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(getCasingTextureID()),
+ aActive ? getFrontOverlayActive() : getFrontOverlay() };
+ }
+ return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(getCasingTextureID()) };
+ }
+
+ @Override
+ public IStructureDefinition<GregtechMetaTileEntity_SteamForgeHammer> getStructureDefinition() {
+ if (STRUCTURE_DEFINITION == null) {
+
+ STRUCTURE_DEFINITION = StructureDefinition.<GregtechMetaTileEntity_SteamForgeHammer>builder()
+
+ .addShape(STRUCTUR_PIECE_MAIN, transpose(shape))
+ .addElement(
+ 'B',
+ ofBlocksTiered(
+ GregtechMetaTileEntity_SteamForgeHammer::getTierPipeCasing,
+ ImmutableList.of(Pair.of(sBlockCasings2, 12), Pair.of(sBlockCasings2, 13)),
+ -1,
+ (t, m) -> t.tierPipeCasing = m,
+ t -> t.tierPipeCasing))
+ .addElement(
+ 'C',
+ ofBlocksTiered(
+ GregtechMetaTileEntity_SteamForgeHammer::getTierSimpleBlock,
+ ImmutableList.of(Pair.of(Blocks.iron_block, 0), Pair.of(GregTech_API.sBlockMetal6, 13)),
+ -1,
+ (t, m) -> t.tierSimpleBlock = m,
+ t -> t.tierSimpleBlock))
+ .addElement(
+ 'A',
+ ofChain(
+ buildSteamInput(GregtechMetaTileEntity_SteamForgeHammer.class).casingIndex(10)
+ .dot(1)
+ .build(),
+ buildHatchAdder(GregtechMetaTileEntity_SteamForgeHammer.class)
+ .atLeast(SteamHatchElement.InputBus_Steam, SteamHatchElement.OutputBus_Steam)
+ .casingIndex(10)
+ .dot(1)
+ .buildAndChain(),
+ ofBlocksTiered(
+ this::getTierMachineCasing,
+ ImmutableList.of(Pair.of(sBlockCasings1, 10), Pair.of(sBlockCasings2, 0)),
+ -1,
+ (t, m) -> t.tierMachineCasing = m,
+ t -> t.tierMachineCasing)))
+ .build();
+
+ }
+ return STRUCTURE_DEFINITION;
+ }
+
+ @Override
+ public void construct(ItemStack stackSize, boolean hintsOnly) {
+ this.buildPiece(STRUCTUR_PIECE_MAIN, 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;
+ return this.survivialBuildPiece(
+ STRUCTUR_PIECE_MAIN,
+ stackSize,
+ HORIZONTAL_OFF_SET,
+ VERTICAL_OFF_SET,
+ DEPTH_OFF_SET,
+ elementBudget,
+ env,
+ false,
+ true);
+ }
+
+ @Override
+ public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) {
+ tierPipeCasing = -1;
+ tierMachineCasing = -1;
+ tierSimpleBlock = -1;
+ tCountCasing = 0;
+ if (!checkPiece(STRUCTUR_PIECE_MAIN, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET)) return false;
+ if (tierPipeCasing < 0 && tierMachineCasing < 0 && tierSimpleBlock < 0) return false;
+ if (tierPipeCasing == 1 && tierMachineCasing == 1
+ && tierSimpleBlock == 1
+ && tCountCasing > 35
+ && !mSteamInputs.isEmpty()
+ && !mSteamOutputs.isEmpty()
+ && !mSteamInputFluids.isEmpty()) {
+ updateHatchTexture();
+ tierMachine = 1;
+ return true;
+ }
+ if (tierPipeCasing == 2 && tierMachineCasing == 2
+ && tierSimpleBlock == 2
+ && tCountCasing > 35
+ && !mSteamInputs.isEmpty()
+ && !mSteamOutputs.isEmpty()
+ && !mSteamInputFluids.isEmpty()) {
+ updateHatchTexture();
+ tierMachine = 2;
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public int getMaxParallelRecipes() {
+ return tierMachine == 1 ? 8 : 16;
+ }
+
+ @Override
+ public RecipeMap<?> getRecipeMap() {
+ return RecipeMaps.hammerRecipes;
+ }
+
+ @SideOnly(Side.CLIENT)
+ @Override
+ protected ResourceLocation getActivitySoundLoop() {
+ return SoundResource.RANDOM_ANVIL_USE.resourceLocation;
+ }
+
+ @Override
+ protected ProcessingLogic createProcessingLogic() {
+ return new ProcessingLogic() {
+
+ @Override
+ @Nonnull
+ protected GT_OverclockCalculator createOverclockCalculator(@NotNull GT_Recipe recipe) {
+ return GT_OverclockCalculator.ofNoOverclock(recipe)
+ .setEUtDiscount(1.33F)
+ .setSpeedBoost(1.5F);
+ }
+ }.setMaxParallelSupplier(this::getMaxParallelRecipes);
+ }
+
+ @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 Steam Forge Hammer")
+ .addInfo("Runs recipes up to MV tier")
+ .addInfo("33.3% faster than a single block steam machine would run.")
+ .addInfo(
+ "On Tier 1, it uses only 66.6% of the steam/s required compared to what a single block steam machine would use.")
+ .addInfo("Processes up to 8 x Tier things at a time.")
+ .addSeparator()
+ .beginStructureBlock(6, 5, 5, false)
+ .addInputBus(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1)
+ .addOutputBus(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1)
+ .addStructureInfo(
+ EnumChatFormatting.WHITE + "Steam Input Hatch "
+ + EnumChatFormatting.GOLD
+ + "1"
+ + EnumChatFormatting.GRAY
+ + " Any casing")
+ .addStructureInfo("")
+ .addStructureInfo(EnumChatFormatting.BLUE + "Tier " + EnumChatFormatting.DARK_PURPLE + 1)
+ .addStructureInfo(EnumChatFormatting.GOLD + "35-39x" + EnumChatFormatting.GRAY + " Bronze Plated Bricks")
+ .addStructureInfo(EnumChatFormatting.GOLD + "2x" + EnumChatFormatting.GRAY + " Bronze Pipe Casing")
+ .addStructureInfo(EnumChatFormatting.GOLD + "2x" + EnumChatFormatting.GRAY + " Iron Block")
+ .addStructureInfo("")
+ .addStructureInfo(EnumChatFormatting.BLUE + "Tier " + EnumChatFormatting.DARK_PURPLE + 2)
+ .addStructureInfo(
+ EnumChatFormatting.GOLD + "35-39x" + EnumChatFormatting.GRAY + " Solid Steel Machine Casing")
+ .addStructureInfo(EnumChatFormatting.GOLD + "2x" + EnumChatFormatting.GRAY + " Steel Pipe Casing")
+ .addStructureInfo(
+ EnumChatFormatting.GOLD + "2x"
+ + EnumChatFormatting.GRAY
+ + " Steel Block"
+ + EnumChatFormatting.RED
+ + " from GregTech")
+ .addStructureInfo("")
+ .toolTipFinisher(AuthorEvgenWarGold);
+ return tt;
+ }
+
+ @Override
+ public String[] getInfoData() {
+ ArrayList<String> info = new ArrayList<>(Arrays.asList(super.getInfoData()));
+ info.add("Machine Tier: " + EnumChatFormatting.YELLOW + tierMachine);
+ info.add("Parallel: " + EnumChatFormatting.YELLOW + getMaxParallelRecipes());
+ return info.toArray(new String[0]);
+ }
+
+ @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("GTPP.machines.tier") + ": "
+ + EnumChatFormatting.YELLOW
+ + tag.getInteger("tierMachine")
+ + EnumChatFormatting.RESET);
+ currenttip.add(
+ StatCollector.translateToLocal("GT5U.multiblock.curparallelism") + ": "
+ + EnumChatFormatting.BLUE
+ + tag.getInteger("parallel")
+ + 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.setInteger("tierMachine", tierMachine);
+ tag.setInteger("parallel", getMaxParallelRecipes());
+ }
+
+ @Override
+ public void saveNBTData(NBTTagCompound aNBT) {
+ super.saveNBTData(aNBT);
+ aNBT.setInteger("tierMachine", tierMachine);
+ }
+
+ @Override
+ public void loadNBTData(final NBTTagCompound aNBT) {
+ super.loadNBTData(aNBT);
+ tierMachine = aNBT.getInteger("tierMachine");
+ }
+
+}
diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSteamMultis.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSteamMultis.java
index e28b3e1e15..ebffa24904 100644
--- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSteamMultis.java
+++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSteamMultis.java
@@ -1,5 +1,6 @@
package gtPlusPlus.xmod.gregtech.registration.gregtech;
+import static gtPlusPlus.xmod.gregtech.registration.gregtech.MetaTileEntityIDs.ControllerSteamForgeHammer;
import static gtPlusPlus.xmod.gregtech.registration.gregtech.MetaTileEntityIDs.Controller_SteamCentrifugeMulti;
import static gtPlusPlus.xmod.gregtech.registration.gregtech.MetaTileEntityIDs.Controller_SteamCompressorMulti;
import static gtPlusPlus.xmod.gregtech.registration.gregtech.MetaTileEntityIDs.Controller_SteamMaceratorMulti;
@@ -13,6 +14,7 @@ import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEn
import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Steam_BusOutput;
import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam.GregtechMetaTileEntity_SteamCentrifuge;
import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam.GregtechMetaTileEntity_SteamCompressor;
+import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam.GregtechMetaTileEntity_SteamForgeHammer;
import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam.GregtechMetaTileEntity_SteamMacerator;
import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam.GregtechMetaTileEntity_SteamWasher;
@@ -42,6 +44,11 @@ public class GregtechSteamMultis {
Controller_SteamWasherMulti.ID,
"gtpp.multimachine.steam.washer",
"Steam Washer").getStackForm(1));
+ GregtechItemList.Controller_SteamForgeHammerMulti.set(
+ new GregtechMetaTileEntity_SteamForgeHammer(
+ ControllerSteamForgeHammer.ID,
+ "gtpp.multimachine.steam.forge.hammer",
+ "Steam Forge Hammer").getStackForm(1));
GregtechItemList.Hatch_Input_Bus_Steam.set(
new GT_MetaTileEntity_Hatch_Steam_BusInput(
diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/MetaTileEntityIDs.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/MetaTileEntityIDs.java
index bafc38b211..42126abc0a 100644
--- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/MetaTileEntityIDs.java
+++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/MetaTileEntityIDs.java
@@ -185,6 +185,7 @@ public enum MetaTileEntityIDs {
XL_HeatExchanger(31079),
Controller_SteamCentrifugeMulti(31080),
Controller_SteamWasherMulti(31082),
+ ControllerSteamForgeHammer(31083),
GT4_Electric_Auto_Workbench_LV(31091),
GT4_Electric_Auto_Workbench_MV(31092),
GT4_Electric_Auto_Workbench_HV(31093),
diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FRONT_STEAM_FORGE_HAMMER.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FRONT_STEAM_FORGE_HAMMER.png
new file mode 100644
index 0000000000..7bd2218231
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FRONT_STEAM_FORGE_HAMMER.png
Binary files differ
diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FRONT_STEAM_FORGE_HAMMER_ACTIVE.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FRONT_STEAM_FORGE_HAMMER_ACTIVE.png
new file mode 100644
index 0000000000..13c81e1892
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FRONT_STEAM_FORGE_HAMMER_ACTIVE.png
Binary files differ