From 4e465dffd1d289e6d5757929252e66cf0eee3249 Mon Sep 17 00:00:00 2001 From: Christina Berchtold Date: Fri, 24 Apr 2020 20:14:42 +0200 Subject: moved blocks and TEs into 'common' package --- .../tileentities/GTMTE_ModularNuclearReactor.java | 247 +++++++++++++++++++++ 1 file changed, 247 insertions(+) create mode 100644 src/main/java/common/tileentities/GTMTE_ModularNuclearReactor.java (limited to 'src/main/java/common/tileentities/GTMTE_ModularNuclearReactor.java') diff --git a/src/main/java/common/tileentities/GTMTE_ModularNuclearReactor.java b/src/main/java/common/tileentities/GTMTE_ModularNuclearReactor.java new file mode 100644 index 0000000000..e08c383997 --- /dev/null +++ b/src/main/java/common/tileentities/GTMTE_ModularNuclearReactor.java @@ -0,0 +1,247 @@ +package common.tileentities; + +import org.joml.Vector3i; +import org.lwjgl.input.Keyboard; + +import common.blocks.Block_ControlRod; +import common.blocks.Block_ReactorChamber_OFF; +import common.blocks.Block_ReactorChamber_ON; +import container.GUIContainer_ModularNuclearReactor; +import gregtech.api.GregTech_API; +import gregtech.api.enums.Textures; +import gregtech.api.gui.GT_GUIContainer_MultiMachine; +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; +import util.MultiBlockTooltipBuilder; + +public class GTMTE_ModularNuclearReactor extends GT_MetaTileEntity_MultiBlockBase { + + private final Block CASING = GregTech_API.sBlockCasings3; + private final int CASING_META = 12; + private final int CASING_TEXTURE_ID = 44; + + private final Block CHAMBER_OFF = Block_ReactorChamber_OFF.getInstance(); + private final Block CHAMBER_ON = Block_ReactorChamber_ON.getInstance(); + private final Block CONTROL_ROD = Block_ControlRod.getInstance(); + + 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() { + final MultiBlockTooltipBuilder b = new MultiBlockTooltipBuilder(); + b.addInfo("Can be built, BUT DOES NOT WORK") + .addInfo("Converts fissile material and outputs power or heat") + .addSeparator() + .addInfo("EU-MODE:") + .addInfo(" Directly outputs electricity depending on inserted fuel rods") + .addSeparator() + .addInfo("COOLANT-MODE:") + .addInfo(" Requires coolant to be pumped into the reactor.") + .addInfo(" Coolant is heated and should be drained and converted to electricity by other means.") + .addSeparator() + .addInfo("NOTES:") + .addInfo(" Does NOT use Industrialcraft 2 reactor components!") + .addInfo(" Consult controller GUI on how to arrange the outer casings.") + .addSeparator() + .beginStructureBlock(7, 6, 7) + .addController("Front bottom Center") + .addCasingInfo("Radiation Proof Machine Casing", 100) + .addOtherStructurePart("Control Rods", "Four pillars, four blocks high each. Diagonal to the inner edges of the shell") + .addOtherStructurePart("Nuclear Reactor Chamber", "17 of them to fill out the rest of the floor inside the shell") + .addDynamoHatch("ONLY in EU-mode, at least one") + .addOtherStructurePart("Input Bus, Output Bus", "Optional but required for automation") + .addOtherStructurePart("Input Hatch, Output Hatch", "ONLY in Coolant-Mode, at least one each") + .signAndFinalize("Kekzdealer"); + if(!Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) { + return b.getInformation(); + } else { + return b.getStructureInformation(); + } + } + + @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]}; + } + + // TODO: Opening UI crashes server. Controller isn't craftable right now. + public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) { + /*return new GT_GUIContainer_MultiMachine(aPlayerInventory, aBaseMetaTileEntity, this.getLocalName(), + "MultiblockDisplay.png");*/ + return new GUIContainer_ModularNuclearReactor(aBaseMetaTileEntity, aPlayerInventory.player); + } + + @Override + public boolean isCorrectMachinePart(ItemStack stack) { + return true; + } + + @Override + public boolean checkRecipe(ItemStack stack) { + return false; + } + + @Override + public void onPostTick(IGregTechTileEntity thisController, long aTick) { + super.onPostTick(thisController, aTick); + + if(super.getBaseMetaTileEntity().isActive()) { + // Switch to ON blocks + } else { + // Switch to OFF blocks + } + } + + @Override + public boolean checkMachine(IGregTechTileEntity thisController, ItemStack guiSlotItem) { + // Figure out the vector for the direction the back face of the controller is facing + final int dirX = ForgeDirection.getOrientation(thisController.getBackFacing()).offsetX; + final int dirZ = ForgeDirection.getOrientation(thisController.getBackFacing()).offsetZ; + int minCasingAmount = 100; + boolean checklist = true; // if this is still true at the end, machine is good to go :) + + // Determine the ground level center of the structure + final Vector3i center = new Vector3i( + thisController.getXCoord(), + thisController.getYCoord(), + thisController.getZCoord()) + .add(dirX * 3, 0, dirZ * 3); + // Scan for outer tube + // - Scan sides + for(int x = -3; x <= 3; x++) { + for(int z = -3; z <= 3; z++) { + // Only scan the three wide even sides, skip rest + if((Math.abs(x) <= 1 && Math.abs(z) == 3) || (Math.abs(z) <= 1 && Math.abs(x) == 3)) { + for(int h = 0; h < 6; h++) { + final Vector3i pos = new Vector3i(center.x() + x, center.y() + h, center.z() + z); + if(h == 0 && pos.x() == thisController.getXCoord() && pos.y() == thisController.getYCoord() && pos.z() == thisController.getZCoord()) { + // Ignore controller + continue; + } else if (thisController.getBlock(pos.x(), pos.y(), pos.z()) == CASING + && thisController.getMetaID(pos.x(), pos.y(), pos.z()) == CASING_META) { + minCasingAmount--; + } else { + checklist = false; + } + } + } + } + } + // - Scan corners of tube + for(int x = -2; x <= 2; x++) { + for(int z = -2; z <= 2; z++) { + // Only scan the four corners, skip rest + if(Math.abs(x) + Math.abs(z) == 4) { + for(int h = 0; h < 6; h++) { + final Vector3i pos = new Vector3i(center.x() + x, center.y() + h, center.z() + z); + if(h == 0 && pos.x() == thisController.getXCoord() && pos.y() == thisController.getYCoord() && pos.z() == thisController.getZCoord()) { + // Ignore controller + continue; + } else if (thisController.getBlock(pos.x(), pos.y(), pos.z()) == CASING + && thisController.getMetaID(pos.x(), pos.y(), pos.z()) == CASING_META) { + minCasingAmount--; + } else { + checklist = false; + } + } + } + } + } + // Scan ground layer + for(int x = -2; x <= 2; x++) { + for(int z = -2; z <= 2; z++) { + if(!(thisController.getBlock(center.x() + x, center.y(), center.z() + z) == CASING + && thisController.getMetaID(center.x() + x, center.y(), center.z() + z) == CASING_META)) { + checklist = false; + } else { + minCasingAmount--; + } + } + } + // Scan reactor chambers + for(int x = -2; x <= 2; x++) { + for(int z = -2; z <= 2; z++) { + // Skip if diagonal, don't skip center + if(Math.abs(x) == Math.abs(z) && !(x == 0 && z == 0)) { + continue; + } + if(!(thisController.getBlock(center.x() + x, center.y() + 1, center.z() + z) == CHAMBER_OFF + || thisController.getBlock(center.x() + x, center.y() + 1, center.z() + z) == CHAMBER_ON)) { + checklist = false; + } + } + } + // Scan control rods + for(int h = 1; h < 5; h++) { + for(int x = -1; x <= 1; x++) { + for(int z = -1; z <= 1; z++) { + // Only check diagonal + if(x == 0 || z == 0) { + continue; + } + if(!(thisController.getBlock(center.x() + x, center.y() + h, center.z() + z) == CONTROL_ROD)) { + checklist = false; + } + } + } + } + + + + + if(minCasingAmount > 0) { + 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 From f5c4c0cc44b50c631eb044f12fae5032584620ed Mon Sep 17 00:00:00 2001 From: Christina Berchtold Date: Sat, 25 Apr 2020 19:52:46 +0200 Subject: huge refactor of recipe and block registration --- .../java/common/tileentities/GTMTE_ModularNuclearReactor.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) (limited to 'src/main/java/common/tileentities/GTMTE_ModularNuclearReactor.java') diff --git a/src/main/java/common/tileentities/GTMTE_ModularNuclearReactor.java b/src/main/java/common/tileentities/GTMTE_ModularNuclearReactor.java index e08c383997..dd912c0d04 100644 --- a/src/main/java/common/tileentities/GTMTE_ModularNuclearReactor.java +++ b/src/main/java/common/tileentities/GTMTE_ModularNuclearReactor.java @@ -3,13 +3,10 @@ package common.tileentities; import org.joml.Vector3i; import org.lwjgl.input.Keyboard; -import common.blocks.Block_ControlRod; -import common.blocks.Block_ReactorChamber_OFF; -import common.blocks.Block_ReactorChamber_ON; +import common.Blocks; import container.GUIContainer_ModularNuclearReactor; import gregtech.api.GregTech_API; import gregtech.api.enums.Textures; -import gregtech.api.gui.GT_GUIContainer_MultiMachine; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; @@ -27,9 +24,9 @@ public class GTMTE_ModularNuclearReactor extends GT_MetaTileEntity_MultiBlockBas private final int CASING_META = 12; private final int CASING_TEXTURE_ID = 44; - private final Block CHAMBER_OFF = Block_ReactorChamber_OFF.getInstance(); - private final Block CHAMBER_ON = Block_ReactorChamber_ON.getInstance(); - private final Block CONTROL_ROD = Block_ControlRod.getInstance(); + private final Block CHAMBER_OFF = Blocks.reactorChamberOFF; + private final Block CHAMBER_ON = Blocks.reactorChamberON; + private final Block CONTROL_ROD = Blocks.reactorControlRod; private boolean euMode = true; -- cgit From fea89499d449a215b0b9ec3012b76c0ef35815f5 Mon Sep 17 00:00:00 2001 From: Christina Berchtold Date: Wed, 29 Apr 2020 10:23:20 +0200 Subject: split gui-/containers into client/common packages --- src/main/java/common/tileentities/GTMTE_ModularNuclearReactor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main/java/common/tileentities/GTMTE_ModularNuclearReactor.java') diff --git a/src/main/java/common/tileentities/GTMTE_ModularNuclearReactor.java b/src/main/java/common/tileentities/GTMTE_ModularNuclearReactor.java index dd912c0d04..5e0b86ed69 100644 --- a/src/main/java/common/tileentities/GTMTE_ModularNuclearReactor.java +++ b/src/main/java/common/tileentities/GTMTE_ModularNuclearReactor.java @@ -3,8 +3,8 @@ package common.tileentities; import org.joml.Vector3i; import org.lwjgl.input.Keyboard; +import client.gui.GUIContainer_ModularNuclearReactor; import common.Blocks; -import container.GUIContainer_ModularNuclearReactor; import gregtech.api.GregTech_API; import gregtech.api.enums.Textures; import gregtech.api.interfaces.ITexture; -- cgit