From e81587ac63778a87dce8759fd16bc4f4bf2a6137 Mon Sep 17 00:00:00 2001 From: kekzdealer Date: Mon, 14 Oct 2019 01:58:42 +0200 Subject: Super fancy overhaul for nuclear reactor structure! --- src/main/java/blocks/Block_ControlRod.java | 30 ++++ src/main/java/blocks/Block_ReactorChamber_OFF.java | 31 ++++ src/main/java/blocks/Block_ReactorChamber_ON.java | 36 ++++ src/main/java/items/ErrorItem.java | 2 +- src/main/java/kekztech/KekzCore.java | 31 ++++ .../java/tileentities/GTMTE_FluidMultiStorage.java | 1 - .../tileentities/GTMTE_ModularNuclearReactor.java | 190 +++++++++++++-------- src/main/resources/assets/kekztech/lang/en_US.lang | 4 + .../assets/kekztech/textures/blocks/ControlRod.png | Bin 0 -> 182 bytes .../textures/blocks/ReactorChamber_OFF.png | Bin 0 -> 270 bytes .../kekztech/textures/blocks/ReactorChamber_ON.png | Bin 0 -> 269 bytes 11 files changed, 248 insertions(+), 77 deletions(-) create mode 100644 src/main/java/blocks/Block_ControlRod.java create mode 100644 src/main/java/blocks/Block_ReactorChamber_OFF.java create mode 100644 src/main/java/blocks/Block_ReactorChamber_ON.java create mode 100644 src/main/resources/assets/kekztech/textures/blocks/ControlRod.png create mode 100644 src/main/resources/assets/kekztech/textures/blocks/ReactorChamber_OFF.png create mode 100644 src/main/resources/assets/kekztech/textures/blocks/ReactorChamber_ON.png (limited to 'src') diff --git a/src/main/java/blocks/Block_ControlRod.java b/src/main/java/blocks/Block_ControlRod.java new file mode 100644 index 0000000000..4e407a5ed1 --- /dev/null +++ b/src/main/java/blocks/Block_ControlRod.java @@ -0,0 +1,30 @@ +package blocks; + +import cpw.mods.fml.common.registry.GameRegistry; +import kekztech.KekzCore; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.creativetab.CreativeTabs; + +public class Block_ControlRod extends Block { + + private static Block_ControlRod instance = new Block_ControlRod(); + + private Block_ControlRod() { + super(Material.iron); + } + + public static Block_ControlRod getInstance() { + return instance; + } + + public void registerBlock() { + final String blockName = "kekztech_controlrod_block"; + super.setBlockName(blockName); + super.setCreativeTab(CreativeTabs.tabMisc); + super.setBlockTextureName(KekzCore.MODID + ":" + "ControlRod"); + super.setHardness(5.0f); + super.setResistance(6.0f); + GameRegistry.registerBlock(getInstance(), blockName); + } +} diff --git a/src/main/java/blocks/Block_ReactorChamber_OFF.java b/src/main/java/blocks/Block_ReactorChamber_OFF.java new file mode 100644 index 0000000000..effe7aa9b4 --- /dev/null +++ b/src/main/java/blocks/Block_ReactorChamber_OFF.java @@ -0,0 +1,31 @@ +package blocks; + +import cpw.mods.fml.common.registry.GameRegistry; +import kekztech.KekzCore; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.creativetab.CreativeTabs; + +public class Block_ReactorChamber_OFF extends Block { + + private static Block_ReactorChamber_OFF instance = new Block_ReactorChamber_OFF(); + + private Block_ReactorChamber_OFF() { + super(Material.iron); + } + + public static Block_ReactorChamber_OFF getInstance() { + return instance; + } + + public void registerBlock() { + final String blockName = "kekztech_reactorchamberoff_block"; + super.setBlockName(blockName); + super.setCreativeTab(CreativeTabs.tabMisc); + super.setBlockTextureName(KekzCore.MODID + ":" + "ReactorChamber_OFF"); + super.setHardness(10.0f); + super.setResistance(16.0f); + GameRegistry.registerBlock(getInstance(), blockName); + } + +} diff --git a/src/main/java/blocks/Block_ReactorChamber_ON.java b/src/main/java/blocks/Block_ReactorChamber_ON.java new file mode 100644 index 0000000000..26004e0753 --- /dev/null +++ b/src/main/java/blocks/Block_ReactorChamber_ON.java @@ -0,0 +1,36 @@ +package blocks; + +import cpw.mods.fml.common.registry.GameRegistry; +import kekztech.KekzCore; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.creativetab.CreativeTabs; + +public class Block_ReactorChamber_ON extends Block { + + private static Block_ReactorChamber_ON instance = new Block_ReactorChamber_ON(); + + private Block_ReactorChamber_ON() { + super(Material.iron); + } + + public static Block_ReactorChamber_ON getInstance() { + return instance; + } + + public void registerBlock() { + final String blockName = "kekztech_reactorchamberon_block"; + super.setBlockName(blockName); + super.setCreativeTab(CreativeTabs.tabMisc); + super.setBlockTextureName(KekzCore.MODID + ":" + "ReactorChamber_ON"); + super.setHardness(-1.0f); + super.setResistance(16.0f); + GameRegistry.registerBlock(getInstance(), blockName); + } + + @Override + public int getLightValue() { + return 15; + } + +} diff --git a/src/main/java/items/ErrorItem.java b/src/main/java/items/ErrorItem.java index 0ab41873f1..f0dbc9e600 100644 --- a/src/main/java/items/ErrorItem.java +++ b/src/main/java/items/ErrorItem.java @@ -35,7 +35,7 @@ public class ErrorItem extends Item { @SuppressWarnings({"unchecked", "rawtypes"}) @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean b) { - list.add("REMINDER: KekzTech recipes are only confirmed to work in GTNH!"); + list.add("REMINDER: KekzTech recipes are only tested to work in GTNH!"); list.add("Placeholder item in case something went wrong"); list.add("If this item shows up in GTNH, you may report it to:"); list.add("https://github.com/kekzdealer/KekzTech"); diff --git a/src/main/java/kekztech/KekzCore.java b/src/main/java/kekztech/KekzCore.java index 49238e6648..b9f8e47015 100644 --- a/src/main/java/kekztech/KekzCore.java +++ b/src/main/java/kekztech/KekzCore.java @@ -1,6 +1,9 @@ package kekztech; +import blocks.Block_ControlRod; import blocks.Block_GDCUnit; +import blocks.Block_ReactorChamber_OFF; +import blocks.Block_ReactorChamber_ON; import blocks.Block_TFFTCasing; import blocks.Block_TFFTMultiHatch; import blocks.Block_TFFTStorageFieldBlockT1; @@ -73,6 +76,9 @@ public class KekzCore { Block_TFFTStorageFieldBlockT3.getInstance().registerBlock(); Block_TFFTStorageFieldBlockT4.getInstance().registerBlock(); Block_TFFTMultiHatch.getInstance().registerBlock(); + Block_ReactorChamber_OFF.getInstance().registerBlock(); + Block_ReactorChamber_ON.getInstance().registerBlock(); + Block_ControlRod.getInstance().registerBlock(); // Register TileEntities GameRegistry.registerTileEntity(TE_TFFTMultiHatch.class, "kekztech_tfftmultihatch_tile"); } @@ -225,6 +231,31 @@ public class KekzCore { new ItemStack(Block_TFFTMultiHatch.getInstance(), 1), 6000, 480); + // Reactor structure blocks + final ItemStack[] controlrod = { + GT_Utility.getIntegratedCircuit(6), + GT_OreDictUnificator.get(OrePrefixes.pipeHuge, Materials.Lead, 1), + GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Steel, 4), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 64) + }; + GT_Values.RA.addAssemblerRecipe( + controlrod, + null, + new ItemStack(Block_ControlRod.getInstance(), 1), + 800, 480); + final ItemStack[] reactorchamber = { + GT_Utility.getIntegratedCircuit(6), + GT_OreDictUnificator.get(OrePrefixes.pipeHuge, Materials.Lead, 1), + GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Lead, 9), + GT_OreDictUnificator.get(OrePrefixes.ring, Materials.TungstenSteel, 18), + GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Steel, 2), + }; + GT_Values.RA.addAssemblerRecipe( + reactorchamber, + FluidRegistry.getFluidStack("wet.concrete", 144), + new ItemStack(Block_ReactorChamber_OFF.getInstance(), 1), + 1600, 480); + // Ceramic plates GT_Values.RA.addAlloySmelterRecipe( craftingItem.getStackOfAmountFromDamage(Items.YSZCeramicDust.getMetaID(), 10), diff --git a/src/main/java/tileentities/GTMTE_FluidMultiStorage.java b/src/main/java/tileentities/GTMTE_FluidMultiStorage.java index b6dbf05c89..e4ab4e574e 100644 --- a/src/main/java/tileentities/GTMTE_FluidMultiStorage.java +++ b/src/main/java/tileentities/GTMTE_FluidMultiStorage.java @@ -201,7 +201,6 @@ public class GTMTE_FluidMultiStorage extends GT_MetaTileEntity_MultiBlockBase { if(mfh != null) { mfh.setLock(!super.getBaseMetaTileEntity().isActive()); } - } public Vector3ic rotateOffsetVector(Vector3ic forgeDirection, int x, int y, int z) { diff --git a/src/main/java/tileentities/GTMTE_ModularNuclearReactor.java b/src/main/java/tileentities/GTMTE_ModularNuclearReactor.java index 901716dc6e..6d37a31d83 100644 --- a/src/main/java/tileentities/GTMTE_ModularNuclearReactor.java +++ b/src/main/java/tileentities/GTMTE_ModularNuclearReactor.java @@ -1,10 +1,17 @@ package tileentities; +import org.joml.Vector2i; +import org.joml.Vector2ic; +import org.joml.Vector3i; +import org.joml.Vector3ic; import org.lwjgl.input.Keyboard; -import container.GUIContainer_ModularNuclearReactor; +import blocks.Block_ControlRod; +import blocks.Block_ReactorChamber_OFF; +import blocks.Block_ReactorChamber_ON; 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; @@ -18,9 +25,13 @@ 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 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; @@ -72,10 +83,10 @@ public class GTMTE_ModularNuclearReactor extends GT_MetaTileEntity_MultiBlockBas // 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 GT_GUIContainer_MultiMachine(aPlayerInventory, aBaseMetaTileEntity, this.getLocalName(), + "MultiblockDisplay.png"); // In case someone ignores the warning... - return new GUIContainer_ModularNuclearReactor(aBaseMetaTileEntity, aPlayerInventory.player); + //return new GUIContainer_ModularNuclearReactor(aBaseMetaTileEntity, aPlayerInventory.player); } @Override @@ -87,90 +98,119 @@ public class GTMTE_ModularNuclearReactor extends GT_MetaTileEntity_MultiBlockBas public boolean checkRecipe(ItemStack stack) { return false; } - + @Override - public boolean checkMachine(IGregTechTileEntity thisController, ItemStack guiSlotItem) { + public void onPostTick(IGregTechTileEntity thisController, long aTick) { + super.onPostTick(thisController, aTick); - 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; + if(super.getBaseMetaTileEntity().isActive()) { + // Switch to ON blocks + } else { + // Switch to OFF blocks + } + } - int minCasingAmount = 92; + @Override + public boolean checkMachine(IGregTechTileEntity thisController, ItemStack guiSlotItem) { + // Figure out the vector for the direction the back face of the controller is facing + final Vector2ic forgeDirection = new Vector2i( + ForgeDirection.getOrientation(thisController.getBackFacing()).offsetX, + ForgeDirection.getOrientation(thisController.getBackFacing()).offsetZ + ); + int minCasingAmount = 100; 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)) { + // Determine the ground level center of the structure + final Vector3ic center = new Vector3i( + thisController.getXCoord(), + thisController.getYCoord(), + thisController.getZCoord()) + .add(forgeDirection.x() * 3, 0, forgeDirection.y() * 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 Vector3ic 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; } - } 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; + // - 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 Vector3ic 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; + } + } + } } - if(this.mInputHatches.size() == 0) { - System.out.println("Coolant input hatches are required in coolant mode!"); - 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--; + } } - if(this.mOutputHatches.size() == 0) { - System.out.println("Hot coolant output hatches are required in coolant mode!"); - checklist = false; + } + // 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(this.mMaintenanceHatches.size() < 1) { - System.out.println("You need a maintenance hatch to do maintenance."); + + + if(minCasingAmount > 0) { + checklist = false; } return checklist; diff --git a/src/main/resources/assets/kekztech/lang/en_US.lang b/src/main/resources/assets/kekztech/lang/en_US.lang index 84aa0113ca..5f36b8e44f 100644 --- a/src/main/resources/assets/kekztech/lang/en_US.lang +++ b/src/main/resources/assets/kekztech/lang/en_US.lang @@ -82,3 +82,7 @@ tile.kekztech_tfftstoragefieldblock2_block.name=T.F.F.T Storage Field Block (Tie tile.kekztech_tfftstoragefieldblock3_block.name=T.F.F.T Storage Field Block (Tier III) tile.kekztech_tfftstoragefieldblock4_block.name=T.F.F.T Storage Field Block (Tier IV) tile.kekztech_tfftmultihatch_block.name=T.F.F.T Multi-Fluid I/O Hatch + +tile.kekztech_controlrod_block.name=Nuclear Reactor Control Rod +tile.kekztech_reactorchamberoff_block.name=Nuclear Reactor Chamber (OFF) +tile.kekztech_reactorchamberon_block.name=Nuclear Reactor Chamber (ON) diff --git a/src/main/resources/assets/kekztech/textures/blocks/ControlRod.png b/src/main/resources/assets/kekztech/textures/blocks/ControlRod.png new file mode 100644 index 0000000000..177e5c7231 Binary files /dev/null and b/src/main/resources/assets/kekztech/textures/blocks/ControlRod.png differ diff --git a/src/main/resources/assets/kekztech/textures/blocks/ReactorChamber_OFF.png b/src/main/resources/assets/kekztech/textures/blocks/ReactorChamber_OFF.png new file mode 100644 index 0000000000..40a33e52a9 Binary files /dev/null and b/src/main/resources/assets/kekztech/textures/blocks/ReactorChamber_OFF.png differ diff --git a/src/main/resources/assets/kekztech/textures/blocks/ReactorChamber_ON.png b/src/main/resources/assets/kekztech/textures/blocks/ReactorChamber_ON.png new file mode 100644 index 0000000000..6480a8ab9b Binary files /dev/null and b/src/main/resources/assets/kekztech/textures/blocks/ReactorChamber_ON.png differ -- cgit