diff options
Diffstat (limited to 'src/main/java/gregtech/common')
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; + } +} |