aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/common')
-rw-r--r--src/main/java/gregtech/common/tileentities/casings/functional/MotorCasing.java11
-rw-r--r--src/main/java/gregtech/common/tileentities/casings/upgrade/InventoryUpgrade.java104
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multiblock/MultiBlock_CokeOven.java163
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multiblock/MultiBlock_Macerator.java48
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multiblock/logic/CokeOvenProcessingLogic.java64
5 files changed, 373 insertions, 17 deletions
diff --git a/src/main/java/gregtech/common/tileentities/casings/functional/MotorCasing.java b/src/main/java/gregtech/common/tileentities/casings/functional/MotorCasing.java
new file mode 100644
index 0000000000..32a53d418a
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/casings/functional/MotorCasing.java
@@ -0,0 +1,11 @@
+package gregtech.common.tileentities.casings.functional;
+
+import gregtech.api.multitileentity.multiblock.casing.FunctionalCasing;
+
+public class MotorCasing extends FunctionalCasing {
+
+ @Override
+ public String getTileEntityName() {
+ return "gt.multitileentity.multiblock.functional.motor";
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/casings/upgrade/InventoryUpgrade.java b/src/main/java/gregtech/common/tileentities/casings/upgrade/InventoryUpgrade.java
new file mode 100644
index 0000000000..de144caf11
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/casings/upgrade/InventoryUpgrade.java
@@ -0,0 +1,104 @@
+package gregtech.common.tileentities.casings.upgrade;
+
+import java.util.UUID;
+
+import net.minecraft.nbt.NBTTagCompound;
+
+import com.gtnewhorizons.modularui.api.screen.ModularWindow.Builder;
+import com.gtnewhorizons.modularui.api.screen.UIBuildContext;
+import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget;
+
+import gregtech.api.enums.GT_Values.NBT;
+import gregtech.api.multitileentity.interfaces.IMultiBlockController;
+import gregtech.api.multitileentity.multiblock.casing.UpgradeCasing;
+import gregtech.api.net.GT_Packet_MultiTileEntity;
+
+public class InventoryUpgrade extends UpgradeCasing {
+
+ public UUID mInventoryID;
+ public static final int INPUT = 0;
+ public static final int OUTPUT = 1;
+ public static final int BOTH = 2;
+ private String mInventoryName = "inventory";
+ private int mInventorySize;
+ private int mType = BOTH;
+
+ public String getInventoryName() {
+ return mInventoryName;
+ }
+
+ public void setInventoryName(String aInventoryName) {
+ mInventoryName = aInventoryName;
+ }
+
+ @Override
+ protected void customWork(IMultiBlockController aTarget) {
+ int tInvSize = mInventorySize;
+ if (mType == BOTH) {
+ tInvSize /= 2;
+ }
+ aTarget.registerInventory(mInventoryName, mInventoryID.toString(), tInvSize, mType);
+ }
+
+ @Override
+ public String getTileEntityName() {
+ return "gt.multitileentity.multiblock.inventory";
+ }
+
+ @Override
+ public void readMultiTileNBT(NBTTagCompound aNBT) {
+ super.readMultiTileNBT(aNBT);
+ if (aNBT.hasKey(NBT.UPGRADE_INVENTORY_UUID)) {
+ mInventoryID = UUID.fromString(aNBT.getString(NBT.UPGRADE_INVENTORY_UUID));
+ } else {
+ mInventoryID = UUID.randomUUID();
+ }
+ mInventorySize = aNBT.getInteger(NBT.UPGRADE_INVENTORY_SIZE);
+ mInventoryName = aNBT.getString(NBT.UPGRADE_INVENTORY_NAME);
+
+ }
+
+ @Override
+ public void writeMultiTileNBT(NBTTagCompound aNBT) {
+ super.writeMultiTileNBT(aNBT);
+ aNBT.setString(NBT.UPGRADE_INVENTORY_UUID, mInventoryID.toString());
+ aNBT.setString(NBT.UPGRADE_INVENTORY_NAME, mInventoryName);
+ }
+
+ @Override
+ protected void onBaseTEDestroyed() {
+ super.onBaseTEDestroyed();
+ unregisterInventories();
+ }
+
+ private void unregisterInventories() {
+ final IMultiBlockController controller = getTarget(false);
+ if (controller != null) {
+ controller.unregisterInventory(mInventoryName, mInventoryID.toString(), mType);
+ }
+ }
+
+ @Override
+ public boolean hasGui(byte aSide) {
+ return true;
+ }
+
+ @Override
+ public void addUIWidgets(Builder builder, UIBuildContext buildContext) {
+ builder.widget(new TextFieldWidget().setGetter(() -> mInventoryName).setSetter((val) -> {
+ mInventoryName = val;
+ final IMultiBlockController controller = getTarget(false);
+ if (controller != null) {
+ controller.changeInventoryName(mInventoryName, mInventoryID.toString(), mType);
+ }
+ }).setSize(100, 25).setPos(50, 30));
+ }
+
+ @Override
+ public GT_Packet_MultiTileEntity getClientDataPacket() {
+ final GT_Packet_MultiTileEntity packet = super.getClientDataPacket();
+ String name = getInventoryName();
+ packet.setInventoryName(name);
+ return packet;
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multiblock/MultiBlock_CokeOven.java b/src/main/java/gregtech/common/tileentities/machines/multiblock/MultiBlock_CokeOven.java
new file mode 100644
index 0000000000..b69909d9fb
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/multiblock/MultiBlock_CokeOven.java
@@ -0,0 +1,163 @@
+package gregtech.common.tileentities.machines.multiblock;
+
+import static gregtech.api.multitileentity.multiblock.base.MultiBlockPart.ITEM_IN;
+import static gregtech.api.multitileentity.multiblock.base.MultiBlockPart.ITEM_OUT;
+
+import java.util.List;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.StatCollector;
+
+import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
+import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment;
+import com.gtnewhorizon.structurelib.structure.StructureDefinition;
+import com.gtnewhorizon.structurelib.util.Vec3Impl;
+import com.gtnewhorizons.modularui.api.math.Alignment;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.api.screen.UIBuildContext;
+import com.gtnewhorizons.modularui.common.internal.network.NetworkUtils;
+import com.gtnewhorizons.modularui.common.widget.DrawableWidget;
+import com.gtnewhorizons.modularui.common.widget.SlotWidget;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
+
+import gregtech.GT_Mod;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.logic.PollutionLogic;
+import gregtech.api.logic.ProcessingLogic;
+import gregtech.api.logic.interfaces.PollutionLogicHost;
+import gregtech.api.logic.interfaces.ProcessingLogicHost;
+import gregtech.api.multitileentity.enums.GT_MultiTileCasing;
+import gregtech.api.multitileentity.multiblock.base.MultiBlockController;
+import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
+import gregtech.common.tileentities.machines.multiblock.logic.CokeOvenProcessingLogic;
+
+public class MultiBlock_CokeOven extends MultiBlockController<MultiBlock_CokeOven>
+ implements PollutionLogicHost, ProcessingLogicHost {
+
+ private static IStructureDefinition<MultiBlock_CokeOven> STRUCTURE_DEFINITION = null;
+ private static final Vec3Impl OFFSET = new Vec3Impl(1, 1, 0);
+ private static final String MAIN = "Main";
+ private static final PollutionLogic POLLUTION_LOGIC = new PollutionLogic().setPollutionAmount(10);
+ private final ProcessingLogic PROCESSING_LOGIC = new CokeOvenProcessingLogic();
+
+ public MultiBlock_CokeOven() {
+ super();
+ setElectric(false);
+ }
+
+ @Override
+ public void construct(ItemStack trigger, boolean hintsOnly) {
+ buildState.startBuilding(getStartingStructureOffset());
+ buildPiece(MAIN, trigger, hintsOnly, buildState.stopBuilding());
+ }
+
+ @Override
+ public boolean checkMachine() {
+ buildState.startBuilding(getStartingStructureOffset());
+ return checkPiece(MAIN, buildState.stopBuilding());
+ }
+
+ @Override
+ public int survivalConstruct(ItemStack trigger, int elementBudget, ISurvivalBuildEnvironment env) {
+ buildState.startBuilding(getStartingStructureOffset());
+ return survivalBuildPiece(MAIN, trigger, buildState.stopBuilding(), elementBudget, env, false);
+ }
+
+ @Override
+ public short getCasingRegistryID() {
+ return 0;
+ }
+
+ @Override
+ public short getCasingMeta() {
+ return GT_MultiTileCasing.CokeOven.getId();
+ }
+
+ @Override
+ protected GT_Multiblock_Tooltip_Builder createTooltip() {
+ final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder();
+ tt.addMachineType("Coke Oven").addInfo("Used for charcoal").beginStructureBlock(3, 3, 3, true)
+ .addCasingInfoExactly("Coke Oven Bricks", 25, false)
+ .addPollutionAmount(POLLUTION_LOGIC.getPollutionAmount()).toolTipFinisher(GT_Values.AuthorBlueWeabo);
+ return tt;
+ }
+
+ @Override
+ public Vec3Impl getStartingStructureOffset() {
+ return OFFSET;
+ }
+
+ @Override
+ public IStructureDefinition<MultiBlock_CokeOven> getStructureDefinition() {
+ if (STRUCTURE_DEFINITION == null) {
+ STRUCTURE_DEFINITION = StructureDefinition.<MultiBlock_CokeOven>builder().addShape(
+ MAIN,
+ new String[][] { { "AAA", "A~A", "AAA" }, { "AAA", "A-A", "AAA" }, { "AAA", "AAA", "AAA" } })
+ .addElement(
+ 'A',
+ addMultiTileCasing("gt.multitileentity.casings", getCasingMeta(), ITEM_IN | ITEM_OUT))
+ .build();
+ }
+ return STRUCTURE_DEFINITION;
+ }
+
+ @Override
+ protected boolean hasFluidInput() {
+ return false;
+ }
+
+ @Override
+ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) {
+ builder.widget(new SlotWidget(inputInventory, 0).setPos(18, 18).setSize(18, 18));
+ builder.widget(new SlotWidget(outputInventory, 0).setPos(36, 36).setSize(18, 18));
+ builder.widget(createButtons());
+ }
+
+ @Override
+ protected void addTitleTextStyle(ModularWindow.Builder builder, String title) {
+ final int TAB_PADDING = 3;
+ final int TITLE_PADDING = 2;
+ int titleWidth = 0, titleHeight = 0;
+ if (NetworkUtils.isClient()) {
+ final FontRenderer fontRenderer = Minecraft.getMinecraft().fontRenderer;
+ // noinspection unchecked
+ final List<String> titleLines = fontRenderer
+ .listFormattedStringToWidth(title, getGUIWidth() - (TAB_PADDING + TITLE_PADDING) * 2);
+ titleWidth = titleLines.size() > 1 ? getGUIWidth() - (TAB_PADDING + TITLE_PADDING) * 2
+ : fontRenderer.getStringWidth(title);
+ // noinspection PointlessArithmeticExpression
+ titleHeight = titleLines.size() * fontRenderer.FONT_HEIGHT + (titleLines.size() - 1);
+ }
+
+ final DrawableWidget tab = new DrawableWidget();
+ final TextWidget text = new TextWidget(title).setDefaultColor(getTitleColor())
+ .setTextAlignment(Alignment.CenterLeft).setMaxWidth(titleWidth);
+ if (GT_Mod.gregtechproxy.mTitleTabStyle == 1) {
+ tab.setDrawable(getGUITextureSet().getTitleTabAngular()).setPos(0, -(titleHeight + TAB_PADDING) + 1)
+ .setSize(getGUIWidth(), titleHeight + TAB_PADDING * 2);
+ text.setPos(TAB_PADDING + TITLE_PADDING, -titleHeight + TAB_PADDING);
+ } else {
+ tab.setDrawable(getGUITextureSet().getTitleTabDark()).setPos(0, -(titleHeight + TAB_PADDING * 2) + 1)
+ .setSize(titleWidth + (TAB_PADDING + TITLE_PADDING) * 2, titleHeight + TAB_PADDING * 2 - 1);
+ text.setPos(TAB_PADDING + TITLE_PADDING, -titleHeight);
+ }
+ builder.widget(tab).widget(text);
+ }
+
+ @Override
+ public String getLocalName() {
+ return StatCollector.translateToLocal("gt.multiBlock.controller.cokeOven");
+ }
+
+ @Override
+ public PollutionLogic getPollutionLogic() {
+ return POLLUTION_LOGIC;
+ }
+
+ @Override
+ public ProcessingLogic getProcessingLogic() {
+ return PROCESSING_LOGIC;
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multiblock/MultiBlock_Macerator.java b/src/main/java/gregtech/common/tileentities/machines/multiblock/MultiBlock_Macerator.java
index ddf232680d..3c0619e667 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multiblock/MultiBlock_Macerator.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multiblock/MultiBlock_Macerator.java
@@ -16,6 +16,7 @@ import static gregtech.api.multitileentity.multiblock.base.MultiBlockPart.NOTHIN
import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
+import net.minecraft.util.ResourceLocation;
import org.apache.commons.lang3.tuple.Pair;
@@ -23,6 +24,7 @@ import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
import com.gtnewhorizon.structurelib.structure.StructureDefinition;
import com.gtnewhorizon.structurelib.util.Vec3Impl;
+import gregtech.api.enums.SoundResource;
import gregtech.api.enums.TierEU;
import gregtech.api.interfaces.ITexture;
import gregtech.api.multitileentity.multiblock.base.MultiBlock_Stackable;
@@ -33,7 +35,11 @@ import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
public class MultiBlock_Macerator extends MultiBlock_Stackable<MultiBlock_Macerator> {
- private IStructureDefinition<MultiBlock_Macerator> STRUCTURE_DEFINITION = null;
+ private static IStructureDefinition<MultiBlock_Macerator> STRUCTURE_DEFINITION = null;
+
+ public MultiBlock_Macerator() {
+ super();
+ }
@Override
public String getTileEntityName() {
@@ -52,30 +58,32 @@ public class MultiBlock_Macerator extends MultiBlock_Stackable<MultiBlock_Macera
transpose(new String[][] { { " BBB ", " B---B ", "DC---CD", " B---B ", " BBB " }, }))
.addShape(
STACKABLE_BOTTOM,
- transpose(new String[][] { { " A~F ", "AAAAA", "AAAAA", "AAAAA", " AAA " }, }))
- .addElement('A', ofChain(addMultiTileCasing(getCasingRegistryID(), getCasingMeta(), ENERGY_IN)))
+ transpose(new String[][] { { " G~F ", "AAAAA", "AAAAA", "AAAAA", " AAA " }, }))
+ .addElement(
+ 'A',
+ ofChain(addMultiTileCasing("gt.multitileentity.casings", getCasingMeta(), ENERGY_IN)))
.addElement(
'B',
ofChain(
addMultiTileCasing(
- getCasingRegistryID(),
+ "gt.multitileentity.casings",
getCasingMeta(),
FLUID_IN | ITEM_IN | FLUID_OUT | ITEM_OUT)))
- .addElement('C', addMultiTileCasing(getCasingRegistryID(), getCasingMeta(), NOTHING))
- .addElement('D', addMultiTileCasing(getCasingRegistryID(), getCasingMeta(), NOTHING))
+ .addElement('C', addMultiTileCasing("gt.multitileentity.casings", getCasingMeta(), NOTHING))
+ .addElement('D', addMultiTileCasing("gt.multitileentity.casings", getCasingMeta(), NOTHING))
.addElement(
'F',
ofChain(
- addMultiTileCasing(getCasingRegistryID(), 20001, NOTHING),
- addMultiTileCasing(getCasingRegistryID(), 20002, NOTHING)))
- .build();
+ addMultiTileCasing("gt.multitileentity.casings", 20001, NOTHING),
+ addMultiTileCasing("gt.multitileentity.casings", 20002, NOTHING)))
+ .addElement('G', addMultiTileCasing("gt.multitileentity.casings", 10000, NOTHING)).build();
}
return STRUCTURE_DEFINITION;
}
@Override
public short getCasingRegistryID() {
- return getMultiTileEntityRegistryID();
+ return 0;
}
@Override
@@ -138,7 +146,7 @@ public class MultiBlock_Macerator extends MultiBlock_Stackable<MultiBlock_Macera
@Override
public ITexture[] getTexture(Block aBlock, byte aSide, boolean isActive, int aRenderPass) {
// TODO: MTE(Texture)
- if (mFacing == aSide) {
+ if (facing == aSide) {
return new ITexture[] {
// Base Texture
MACHINE_CASINGS[1][0],
@@ -160,21 +168,21 @@ public class MultiBlock_Macerator extends MultiBlock_Stackable<MultiBlock_Macera
}
@Override
- public boolean checkRecipe(ItemStack aStack) {
+ protected boolean checkRecipe() {
if (isSeparateInputs()) {
for (Pair<ItemStack[], String> tItemInputs : getItemInputsForEachInventory()) {
- if (processRecipe(aStack, tItemInputs.getLeft(), tItemInputs.getRight())) {
+ if (processRecipe(tItemInputs.getLeft(), tItemInputs.getRight())) {
return true;
}
}
return false;
} else {
ItemStack[] tItemInputs = getInventoriesForInput().getStacks().toArray(new ItemStack[0]);
- return processRecipe(aStack, tItemInputs, null);
+ return processRecipe(tItemInputs, null);
}
}
- private boolean processRecipe(ItemStack aStack, ItemStack[] aItemInputs, String aInventory) {
+ private boolean processRecipe(ItemStack[] aItemInputs, String aInventory) {
GT_Recipe_Map tRecipeMap = GT_Recipe_Map.sMaceratorRecipes;
GT_Recipe tRecipe = tRecipeMap.findRecipe(this, false, TierEU.IV, null, aItemInputs);
if (tRecipe == null) {
@@ -185,9 +193,15 @@ public class MultiBlock_Macerator extends MultiBlock_Stackable<MultiBlock_Macera
return false;
}
- mMaxProgressTime = tRecipe.mDuration;
+ setDuration(tRecipe.mDuration);
+ setEut(tRecipe.mEUt);
- setItemOutputs(tRecipe.mOutputs, aInventory);
+ setItemOutputs(aInventory, tRecipe.mOutputs);
return true;
}
+
+ @Override
+ protected ResourceLocation getActivitySoundLoop() {
+ return SoundResource.IC2_MACHINES_MACERATOR_OP.resourceLocation;
+ }
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/multiblock/logic/CokeOvenProcessingLogic.java b/src/main/java/gregtech/common/tileentities/machines/multiblock/logic/CokeOvenProcessingLogic.java
new file mode 100644
index 0000000000..5997520884
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/machines/multiblock/logic/CokeOvenProcessingLogic.java
@@ -0,0 +1,64 @@
+package gregtech.common.tileentities.machines.multiblock.logic;
+
+import static net.minecraftforge.oredict.OreDictionary.getOreID;
+import static net.minecraftforge.oredict.OreDictionary.getOreIDs;
+
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+
+import gregtech.api.logic.ProcessingLogic;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+
+public class CokeOvenProcessingLogic extends ProcessingLogic {
+
+ private static final int NORMAL_RECIPE_TIME = 1800;
+ private static final int WOOD_ORE_ID = getOreID("logWood");
+ private static final int COAL_ORE_ID = getOreID("coal");
+ private static final int COAL_BLOCK_ORE_ID = getOreID("blockCoal");
+ private static final int SUGARCANE_ORE_ID = getOreID("sugarcane");
+ private static final int CACTUS_ORE_ID = getOreID("blockCactus");
+ private static final int CACTUS_CHARCOAL_ORE_ID = getOreID("itemCharcoalCactus");
+ private static final int SUGAR_CHARCOAL_ORE_ID = getOreID("itemCharcoalSugar");
+ private int timeMultiplier = 1;
+
+ @Override
+ public boolean process() {
+ if (inputItems == null || inputItems[0] == null) {
+ return false;
+ }
+ ItemStack input = inputItems[0];
+ int originalStackSize = input.stackSize;
+ ItemStack output = findRecipe(input);
+ if (currentOutputItems != null && currentOutputItems[0] != null && !currentOutputItems[0].isItemEqual(output)) {
+ return false;
+ }
+ input.stackSize -= 1;
+ setDuration(NORMAL_RECIPE_TIME * timeMultiplier);
+ setOutputItems(output);
+
+ return originalStackSize > input.stackSize;
+ }
+
+ protected ItemStack findRecipe(ItemStack input) {
+ for (int oreId : getOreIDs(input)) {
+ if (oreId == COAL_ORE_ID) {
+ return GT_OreDictUnificator.get("fuelCoke", null, 1);
+ } else if (oreId == COAL_BLOCK_ORE_ID) {
+ timeMultiplier = 9;
+ return GT_ModHandler.getModItem("Railcraft", "cube", 1, 0);
+ } else if (oreId == WOOD_ORE_ID) {
+ return new ItemStack(Items.coal, 1, 1);
+ } else if (oreId == SUGARCANE_ORE_ID) {
+ return GT_OreDictUnificator.get("itemCharcoalSugar", null, 1);
+ } else if (oreId == SUGAR_CHARCOAL_ORE_ID) {
+ return GT_OreDictUnificator.get("itemCokeSugar", null, 1);
+ } else if (oreId == CACTUS_ORE_ID) {
+ return GT_OreDictUnificator.get("itemCharcoalCactus", null, 1);
+ } else if (oreId == CACTUS_CHARCOAL_ORE_ID) {
+ return GT_OreDictUnificator.get("itemCokeCactus", null, 1);
+ }
+ }
+ return null;
+ }
+}