aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorkekzdealer <kekzdealer@gmail.com>2019-10-14 01:58:42 +0200
committerkekzdealer <kekzdealer@gmail.com>2019-10-14 01:58:42 +0200
commite81587ac63778a87dce8759fd16bc4f4bf2a6137 (patch)
tree40d493367fcc3c27d44474d048fd0284b17cebe3 /src/main
parent2c21f381ff64c85becef006bdb8a6e73b8949cf8 (diff)
downloadGT5-Unofficial-e81587ac63778a87dce8759fd16bc4f4bf2a6137.tar.gz
GT5-Unofficial-e81587ac63778a87dce8759fd16bc4f4bf2a6137.tar.bz2
GT5-Unofficial-e81587ac63778a87dce8759fd16bc4f4bf2a6137.zip
Super fancy overhaul for nuclear reactor structure!
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/blocks/Block_ControlRod.java30
-rw-r--r--src/main/java/blocks/Block_ReactorChamber_OFF.java31
-rw-r--r--src/main/java/blocks/Block_ReactorChamber_ON.java36
-rw-r--r--src/main/java/items/ErrorItem.java2
-rw-r--r--src/main/java/kekztech/KekzCore.java31
-rw-r--r--src/main/java/tileentities/GTMTE_FluidMultiStorage.java1
-rw-r--r--src/main/java/tileentities/GTMTE_ModularNuclearReactor.java190
-rw-r--r--src/main/resources/assets/kekztech/lang/en_US.lang4
-rw-r--r--src/main/resources/assets/kekztech/textures/blocks/ControlRod.pngbin0 -> 182 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/blocks/ReactorChamber_OFF.pngbin0 -> 270 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/blocks/ReactorChamber_ON.pngbin0 -> 269 bytes
11 files changed, 248 insertions, 77 deletions
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
--- /dev/null
+++ b/src/main/resources/assets/kekztech/textures/blocks/ControlRod.png
Binary files 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
--- /dev/null
+++ b/src/main/resources/assets/kekztech/textures/blocks/ReactorChamber_OFF.png
Binary files 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
--- /dev/null
+++ b/src/main/resources/assets/kekztech/textures/blocks/ReactorChamber_ON.png
Binary files differ