From 528d3633ab5b7534325281759ffeec4772f68da9 Mon Sep 17 00:00:00 2001 From: Christina Berchtold Date: Sat, 8 Jun 2019 00:22:03 +0200 Subject: I haven't commited in a while D; --- .../java/reactor/GTMTE_ModularNuclearReactor.java | 188 +++++++++++++++++++++ 1 file changed, 188 insertions(+) create mode 100644 src/main/java/reactor/GTMTE_ModularNuclearReactor.java (limited to 'src/main/java/reactor/GTMTE_ModularNuclearReactor.java') diff --git a/src/main/java/reactor/GTMTE_ModularNuclearReactor.java b/src/main/java/reactor/GTMTE_ModularNuclearReactor.java new file mode 100644 index 0000000000..f3d9a2a00c --- /dev/null +++ b/src/main/java/reactor/GTMTE_ModularNuclearReactor.java @@ -0,0 +1,188 @@ +package reactor; + +import gregtech.api.GregTech_API; +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.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase; +import gregtech.api.objects.GT_RenderedTexture; +import net.minecraft.block.Block; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +public class GTMTE_ModularNuclearReactor extends GT_MetaTileEntity_MultiBlockBase { + + final Block CASING = GregTech_API.sBlockCasings3; + final int CASING_META = 12; + final int CASING_TEXTURE_ID = 44; + + private boolean euMode = true; + + public GTMTE_ModularNuclearReactor(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + + } + + public GTMTE_ModularNuclearReactor(String aName) { + super(aName); + + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity var1) { + return new GTMTE_ModularNuclearReactor(super.mName); + } + + @Override + public String[] getDescription() { + return new String[] { + "Modular Nuclear Reactor", + "------------------------------------------", + "EU-MODE - Turn nuclear fuel into directly into electricity.", + "", + "COOLANT-MODE - Heat up coolant for other applications", + "HU to Hot Coolant ratio is 1HU = 1L Hot Coolant", + "------------------------------------------", + "Dimensions: 5x5x5 (WxHxL)", + "Structure:", + " 80x Radiation Proof Machine Casing (at least)", + " Controller front center", + " Dynamo Hatch (ONLY in EU-mode, at least one)", + " Input Bus, Output Bus (optional)", + " Input Hatch, Output Hatch (ONLY in Coolant-Mode, at least one each)" + }; + } + + @Override + public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final byte aSide, final byte aFacing, + final byte aColorIndex, final boolean aActive, final boolean aRedstone) { + return aSide == aFacing + ? new ITexture[]{Textures.BlockIcons.CASING_BLOCKS[CASING_TEXTURE_ID], + new GT_RenderedTexture(aActive ? + Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE + : Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER)} + : new ITexture[]{Textures.BlockIcons.CASING_BLOCKS[CASING_TEXTURE_ID]}; + } + + public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) { + return new GUIContainer_ModularNuclearReactor(aPlayerInventory, aBaseMetaTileEntity, this.getLocalName(), + "MultiblockDisplay.png"); + } + + @Override + public boolean isCorrectMachinePart(ItemStack stack) { + return true; + } + + @Override + public boolean checkRecipe(ItemStack stack) { + return false; + } + + @Override + public boolean checkMachine(IGregTechTileEntity thisController, ItemStack guiSlotItem) { + + final byte SIDE_LENGTH = 5; + final byte MAX_OFFSET = (byte) Math.floor(SIDE_LENGTH / 2); + final int XDIR_BACKFACE = ForgeDirection.getOrientation(thisController.getBackFacing()).offsetX * MAX_OFFSET; + final int ZDIR_BACKFACE = ForgeDirection.getOrientation(thisController.getBackFacing()).offsetZ * MAX_OFFSET; + + int minCasingAmount = 92; + boolean checklist = true; // if this is still true at the end, machine is good to go :) + + for (int leftToRight = -MAX_OFFSET; leftToRight <= MAX_OFFSET; leftToRight++) { + + for (int frontToBack = -MAX_OFFSET; frontToBack <= MAX_OFFSET; frontToBack++) { + + for (int thisY = -MAX_OFFSET; thisY <= MAX_OFFSET; thisY++) { + + // Center 3x3x3 air cube + if((leftToRight > -2 && leftToRight < 2) && (frontToBack > -2 && frontToBack < 2) && (thisY > -2 && thisY < 2)) { + if(!thisController.getAirOffset(XDIR_BACKFACE + leftToRight, thisY, ZDIR_BACKFACE + frontToBack)) { + checklist = false; + } + } else if (!(XDIR_BACKFACE + leftToRight == 0 && ZDIR_BACKFACE + frontToBack == 0 && thisY == 0)) { // Make sure this isn't the controller + // Get next TE + final int THIS_X = XDIR_BACKFACE + leftToRight; + final int THIS_Z = ZDIR_BACKFACE + frontToBack; + IGregTechTileEntity currentTE = + thisController.getIGregTechTileEntityOffset(THIS_X, thisY, THIS_Z);// x, y ,z + + // Tries to add TE as either of those kinds of hatches. + // The number is the texture index number for the texture that needs to be painted over the hatch texture (TAE for GT++) + if ( !super.addMaintenanceToMachineList(currentTE, CASING_TEXTURE_ID) + && !super.addInputToMachineList(currentTE, CASING_TEXTURE_ID) + && !super.addOutputToMachineList(currentTE, CASING_TEXTURE_ID) + && !super.addDynamoToMachineList(currentTE, CASING_TEXTURE_ID)) { + + // If it's not a hatch, is it the right casing for this machine? Check block and block meta. + if ((thisController.getBlockOffset(THIS_X, thisY, THIS_Z) == CASING) && (thisController.getMetaIDOffset(THIS_X, thisY, THIS_Z) == CASING_META)) { + // Seems to be valid casing. Decrement counter. + minCasingAmount--; + } else { + checklist = false; + } + } + } + } + } + } + + if(minCasingAmount > 0) { + checklist = false; + } + + if(euMode) { + if(this.mDynamoHatches.size() == 0) { + System.out.println("Dynamo hatches are required in EU mode!"); + checklist = false; + } + if(this.mInputHatches.size() > 0) { + System.out.println("Input hatches are only allowed in coolant mode!"); + checklist = false; + } + if(this.mOutputHatches.size() > 0) { + System.out.println("Output hatches are only allowed in coolant mode!"); + checklist = false; + } + } else { + if(this.mDynamoHatches.size() > 0) { + System.out.println("Dynamo hatches are only allowed in EU mode!"); + checklist = false; + } + if(this.mInputHatches.size() == 0) { + System.out.println("Coolant input hatches are required in coolant mode!"); + checklist = false; + } + if(this.mOutputHatches.size() == 0) { + System.out.println("Hot coolant output hatches are required in coolant mode!"); + checklist = false; + } + } + + return checklist; + } + + @Override + public int getMaxEfficiency(ItemStack stack) { + return 10000; + } + + @Override + public int getPollutionPerTick(ItemStack stack) { + return 0; + } + + @Override + public int getDamageToComponent(ItemStack stack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack stack) { + return false; + } + +} -- cgit