aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.classpath5
-rw-r--r--.directory6
-rw-r--r--.gitignore58
-rw-r--r--.gradle/2.0/taskArtifacts/cache.properties2
-rw-r--r--.project34
-rw-r--r--LICENSE42
-rw-r--r--README.md6
-rw-r--r--config/CodeChickenLib.cfg2
-rw-r--r--config/GregTech/WorldGeneration.cfg20
-rw-r--r--config/IC2.ini336
-rw-r--r--config/Ztones.cfg58
-rw-r--r--config/devtips.cfg52
-rw-r--r--config/forge.cfg114
-rw-r--r--config/forgeChunkLoading.cfg94
-rw-r--r--config/splash.properties2
-rw-r--r--gradle/wrapper/gradle-wrapper.jarbin0 -> 51017 bytes
-rw-r--r--gradlew.bat180
-rw-r--r--libs/CodeChickenCore-1.7.10-1.0.7.47-dev.jarbin0 -> 143543 bytes
-rw-r--r--libs/CodeChickenLib-1.7.10-1.1.3.140-dev.jarbin0 -> 310211 bytes
-rw-r--r--libs/NotEnoughItems-1.7.10-1.0.5.120-dev.jarbin0 -> 506974 bytes
-rw-r--r--libs/Ztones-1.7.10-2.2.2-deobf.jarbin0 -> 557656 bytes
-rw-r--r--libs/gregtech-5.09.32-dev.jarbin0 -> 17028484 bytes
-rw-r--r--libs/industrialcraft-2-2.2.828a-experimental-deobf.jarbin0 -> 5495479 bytes
-rw-r--r--libs/joml-1.9.18.jarbin0 -> 678796 bytes
-rw-r--r--logs/2019-07-04-1.log.gzbin1579 -> 2959 bytes
-rw-r--r--logs/2019-07-04-2.log.gzbin2992 -> 2983 bytes
-rw-r--r--logs/2019-07-04-3.log.gzbin2959 -> 2342 bytes
-rw-r--r--logs/2019-07-04-4.log.gzbin0 -> 1871 bytes
-rw-r--r--logs/2019-07-04-5.log.gzbin0 -> 777 bytes
-rw-r--r--logs/2019-07-04-6.log.gzbin0 -> 690 bytes
-rw-r--r--logs/2019-07-04-7.log.gzbin0 -> 774 bytes
-rw-r--r--logs/2019-07-25-1.log.gzbin0 -> 2108 bytes
-rw-r--r--logs/2019-07-30-1.log.gzbin0 -> 1629 bytes
-rw-r--r--logs/2019-07-30-2.log.gzbin0 -> 890 bytes
-rw-r--r--logs/2019-10-02-1.log.gzbin0 -> 764 bytes
-rw-r--r--logs/2019-10-08-1.log.gzbin0 -> 669 bytes
-rw-r--r--logs/2019-10-08-2.log.gzbin0 -> 669 bytes
-rw-r--r--logs/2019-10-08-3.log.gzbin0 -> 684 bytes
-rw-r--r--logs/2019-10-08-4.log.gzbin0 -> 719 bytes
-rw-r--r--logs/2019-10-08-5.log.gzbin0 -> 681 bytes
-rw-r--r--logs/2019-10-08-6.log.gzbin0 -> 684 bytes
-rw-r--r--logs/2019-10-08-7.log.gzbin0 -> 985 bytes
-rw-r--r--logs/2019-10-09-1.log.gzbin0 -> 2256 bytes
-rw-r--r--mods/1.7.10/CodeChickenLib-1.7.10-1.1.3.140-universal.jarbin0 -> 314810 bytes
-rw-r--r--mods/devtips-1.1.jarbin0 -> 7584 bytes
-rw-r--r--mods/ic2/EJML-core-0.26.jarbin0 -> 341614 bytes
-rw-r--r--options.txt20
-rw-r--r--saves/NEI/local/New World/NEI.cfg5
-rw-r--r--saves/NEI/local/New World/NEI.datbin87 -> 78 bytes
-rw-r--r--saves/New World/DIM-1/data/villages.datbin56 -> 56 bytes
-rw-r--r--saves/New World/DIM1/data/villages.datbin56 -> 56 bytes
-rw-r--r--saves/New World/NEI/players/kekzdealer@gmail.com.dat0
-rw-r--r--saves/New World/data/Mineshaft.datbin3904 -> 0 bytes
-rw-r--r--saves/New World/data/Stronghold.datbin2663 -> 0 bytes
-rw-r--r--saves/New World/data/villages.datbin56 -> 56 bytes
-rw-r--r--saves/New World/level.datbin14761 -> 14603 bytes
-rw-r--r--saves/New World/level.dat_mcrbin13631 -> 13883 bytes
-rw-r--r--saves/New World/level.dat_oldbin14762 -> 14601 bytes
-rw-r--r--saves/New World/playerdata/ddc68fe4-0789-360b-a837-3dcbb936da65.datbin875 -> 0 bytes
-rw-r--r--saves/New World/playerdata/fd8b4f31-35bd-474b-8add-e80df8a4a95f.datbin663 -> 0 bytes
-rw-r--r--saves/New World/region/r.-1.0.mcabin24576 -> 655360 bytes
-rw-r--r--saves/New World/region/r.0.-1.mcabin1708032 -> 0 bytes
-rw-r--r--saves/New World/region/r.0.0.mcabin2461696 -> 69632 bytes
-rw-r--r--saves/New World/session.lockbin8 -> 8 bytes
-rw-r--r--saves/New World/stats/ddc68fe4-0789-360b-a837-3dcbb936da65.json1
-rw-r--r--saves/New World/stats/fd8b4f31-35bd-474b-8add-e80df8a4a95f.json1
-rw-r--r--src/main/java/blocks/Block_GDCUnit.java60
-rw-r--r--src/main/java/blocks/Block_TFFTCasing.java60
-rw-r--r--src/main/java/blocks/Block_TFFTStorageFieldBlockT1.java64
-rw-r--r--src/main/java/blocks/Block_TFFTStorageFieldBlockT2.java60
-rw-r--r--src/main/java/blocks/Block_TFFTStorageFieldBlockT3.java60
-rw-r--r--src/main/java/blocks/Block_TFFTStorageFieldBlockT4.java60
-rw-r--r--src/main/java/blocks/Block_YSZUnit.java60
-rw-r--r--src/main/java/container/Container_ModularNuclearReactor.java140
-rw-r--r--src/main/java/container/GUIContainer_ModularNuclearReactor.java106
-rw-r--r--src/main/java/items/ErrorItem.java93
-rw-r--r--src/main/java/items/MetaItem_CraftingComponent.java206
-rw-r--r--src/main/java/items/MetaItem_ReactorComponent.java280
-rw-r--r--src/main/java/kekztech/GTMultiController.java610
-rw-r--r--src/main/java/kekztech/GTRecipe.java208
-rw-r--r--src/main/java/kekztech/Items.java96
-rw-r--r--src/main/java/kekztech/KekzCore.java688
-rw-r--r--src/main/java/kekztech/MultiFluidHandler.java138
-rw-r--r--src/main/java/reactor/ButtonSlot.java28
-rw-r--r--src/main/java/reactor/items/CoolantCell.java52
-rw-r--r--src/main/java/reactor/items/FuelRod.java228
-rw-r--r--src/main/java/reactor/items/HeatExchanger.java120
-rw-r--r--src/main/java/reactor/items/HeatVent.java100
-rw-r--r--src/main/java/reactor/items/NeutronReflector.java52
-rw-r--r--src/main/java/tileentities/GTMTE_FluidMultiStorage.java1021
-rw-r--r--src/main/java/tileentities/GTMTE_ModularNuclearReactor.java380
-rw-r--r--src/main/java/tileentities/GTMTE_SOFuelCellMK1.java656
-rw-r--r--src/main/java/tileentities/GTMTE_SOFuelCellMK2.java656
-rw-r--r--src/main/java/tileentities/TFFTMultiHatch.java138
-rw-r--r--src/main/java/util/Util.java102
-rw-r--r--src/main/java/util/Vector3i.java64
-rw-r--r--src/main/java/util/Vector3ic.java16
-rw-r--r--src/main/resources/assets/kekztech/lang/en_US.lang166
-rw-r--r--src/main/resources/assets/kekztech/textures/blocks/TFFTStorageFieldBlock1.pngbin1036 -> 1332 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/blocks/TFFTStorageFieldBlock2.pngbin1037 -> 1334 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/blocks/TFFTStorageFieldBlock3.pngbin1038 -> 1334 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/blocks/TFFTStorageFieldBlock4.pngbin1340 -> 1669 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/DemonCore.pngbin0 -> 1927 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/PlutoniumGalliumDust.pngbin0 -> 253 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/RawDemonCore.pngbin0 -> 776 bytes
-rw-r--r--src/main/resources/assets/kekztech/textures/items/uraniumFuelRod.pngbin441 -> 0 bytes
-rw-r--r--usernamecache.json3
107 files changed, 4075 insertions, 3734 deletions
diff --git a/.classpath b/.classpath
index 956388a675..93ee7b3fb3 100644
--- a/.classpath
+++ b/.classpath
@@ -3,11 +3,12 @@
<classpathentry kind="src" path="src/main/java"/>
<classpathentry kind="src" path="src/main/resources"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
- <classpathentry combineaccessrules="false" kind="src" path="/Forge"/>
- <classpathentry kind="lib" path="E:/Development/KekzTech/libs/CodeChickenCore-1.7.10-1.0.7.47-dev.jar"/>
+ <classpathentry kind="lib" path="/home/kekzdealer/eclipse-workspace/KekzTech/libs/CodeChickenCore-1.7.10-1.0.7.47-dev.jar"/>
<classpathentry kind="lib" path="libs/CodeChickenLib-1.7.10-1.1.3.140-dev.jar"/>
<classpathentry kind="lib" path="libs/gregtech-5.09.32-dev.jar" sourcepath="libs/gregtech-5.09.32-dev-src.zip"/>
<classpathentry kind="lib" path="libs/industrialcraft-2-2.2.828a-experimental-deobf.jar"/>
<classpathentry kind="lib" path="libs/NotEnoughItems-1.7.10-1.0.5.120-dev.jar"/>
+ <classpathentry combineaccessrules="false" kind="src" path="/Forge"/>
+ <classpathentry kind="lib" path="libs/joml-1.9.18.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>
diff --git a/.directory b/.directory
new file mode 100644
index 0000000000..5edbbd9d93
--- /dev/null
+++ b/.directory
@@ -0,0 +1,6 @@
+[Dolphin]
+Timestamp=2019,10,7,18,33,15
+Version=4
+
+[Settings]
+HiddenFilesShown=true
diff --git a/.gitignore b/.gitignore
index 25baf5c841..09ea9d44f3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,29 +1,29 @@
-# Compiled class file
-*.class
-
-# Log file
-*.log
-
-# BlueJ files
-*.ctxt
-
-# Mobile Tools for Java (J2ME)
-.mtj.tmp/
-
-# Package Files #
-*.jar
-*.war
-*.nar
-*.ear
-*.zip
-*.tar.gz
-*.rar
-
-# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
-hs_err_pid*
-/bin/
-/build/
-/crash-reports/
-/saves/
-/screenshots/
-
+# Compiled class file
+*.class
+
+# Log file
+*.log
+
+# BlueJ files
+*.ctxt
+
+# Mobile Tools for Java (J2ME)
+.mtj.tmp/
+
+# Package Files #
+#*.jar
+*.war
+*.nar
+*.ear
+*.zip
+*.tar.gz
+*.rar
+
+# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
+hs_err_pid*
+/bin/
+/build/
+/crash-reports/
+/saves/
+/screenshots/
+
diff --git a/.gradle/2.0/taskArtifacts/cache.properties b/.gradle/2.0/taskArtifacts/cache.properties
index 0a27f00048..68737acfa2 100644
--- a/.gradle/2.0/taskArtifacts/cache.properties
+++ b/.gradle/2.0/taskArtifacts/cache.properties
@@ -1 +1 @@
-#Sun Jun 09 22:52:57 CEST 2019
+#Sun Jun 09 22:52:57 CEST 2019
diff --git a/.project b/.project
index 98eb3f4ded..b83d47ff64 100644
--- a/.project
+++ b/.project
@@ -1,17 +1,17 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>kekztech</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.jdt.core.javanature</nature>
- </natures>
-</projectDescription>
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>kekztech</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/LICENSE b/LICENSE
index 8b23445f4a..cbd9e607af 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,21 +1,21 @@
-MIT License
-
-Copyright (c) 2019
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+MIT License
+
+Copyright (c) 2019
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
index ef85099a4a..da244a66c2 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,3 @@
-# KekzTech
-A Minecraft mod for the 1.7.10 modpack GTNH.
-No compatibility outside GTNH guaranteed.
+# KekzTech
+A Minecraft mod for the 1.7.10 modpack GTNH.
+No compatibility outside GTNH guaranteed.
diff --git a/config/CodeChickenLib.cfg b/config/CodeChickenLib.cfg
index 94d4c170a5..947513c59e 100644
--- a/config/CodeChickenLib.cfg
+++ b/config/CodeChickenLib.cfg
@@ -3,6 +3,6 @@
dump_asm=true
#Path to directory holding packaged.srg, fields.csv and methods.csv for mcp remapping
-mappingDir=C:\Users\Kekzdealer\.gradle\caches\minecraft\net\minecraftforge\forge\1.7.10-10.13.4.1614-1.7.10\unpacked\conf
+mappingDir=/home/kekzdealer/.gradle/caches/minecraft/net/minecraftforge/forge/1.7.10-10.13.4.1614-1.7.10/unpacked/conf
textify=true
diff --git a/config/GregTech/WorldGeneration.cfg b/config/GregTech/WorldGeneration.cfg
index 9f8d5e493a..37781d6de8 100644
--- a/config/GregTech/WorldGeneration.cfg
+++ b/config/GregTech/WorldGeneration.cfg
@@ -2331,6 +2331,26 @@ worldgen {
B:Overworld_true=true
}
+ diamond {
+ B:Overworld_true=true
+ }
+
+ naquadah {
+ B:Overworld_false=false
+ }
+
+ coal {
+ B:Overworld_true=true
+ }
+
+ uranium {
+ B:Overworld_true=true
+ }
+
+ soapstone {
+ B:Overworld_true=true
+ }
+
}
small {
diff --git a/config/IC2.ini b/config/IC2.ini
index c526d786f2..e90cb15b5d 100644
--- a/config/IC2.ini
+++ b/config/IC2.ini
@@ -1,168 +1,168 @@
-; ic2 general config
-; created Jul 4, 2019 5:21:42 PM
-;---
-
-[worldgen]
-; Enable generation of rubber trees in the world.
-rubberTree = true
-; Enable generation of copper in the world.
-copperOre = true
-; Enable generation of tin in the world.
-tinOre = true
-; Enable generation of uranium in the world.
-uraniumOre = true
-; Enable generation of Lead in the world.
-leadOre = true
-; Factor scaling the IC2 ore generation quantity.
-oreDensityFactor = 1.0
-
-[protection]
-; Enable logging of players when they remove a machine using a wrench.
-wrenchLogging = true
-; Maximum Explosion power of a nuke, where TNT is 4.
-nukeExplosionPowerLimit = 60
-; Maximum explosion power of a nuclear reactor, where TNT is 4.
-reactorExplosionPowerLimit = 45
-; Enable the nuke
-enableNuke = true
-
-[balance]
-; Maximum battery tier usable by the miner.
-; 1 = batteries, 2 = lead batteries, 3 = energy crystals, 4 = lapotron crystals
-minerDischargeTier = 1
-; Increase the energy use by the player's inventory weight when going through a teleporter.
-teleporterUseInventoryWeight = true
-; Ratio of energy retained inside energy storage block Items when wrenched.
-; 0 (nothing) ... 1 (100%), default 0.8 (80 %)
-energyRetainedInStorageBlockDrops = 0.8
-; Factor to scale the UU-Matter production energy requirement.
-uuEnergyFactor = 1.0
-; Disable the vanilla ender chest, removing existing ones from the world as well.
-disableEnderChest = false
-; Comma separated list of blocks and items which should not be turned into scrap by the recycler.
-; Format: <name>[@metadata], metadata * matches any.
-; Ore dictionary entries can be specified with OreDict:<ore dict name> as the name.
-recyclerBlacklist = minecraft:glass_pane, minecraft:stick, minecraft:snowball, minecraft:snow_layer, minecraft:snow, IC2:blockScaffold
-; Whitelist for blocks/items allowed to be recycled.
-; The whitelist will be used instead of the blacklist approach if it's non-empty, disallowing everything else.
-; The format is the same as the blacklist.
-recyclerWhitelist =
-; Allow to pick blocks up using just a pickaxe instead of needing a wrench.
-ignoreWrenchRequirement = false
-
-; Base energy generation factors - increase for higher energy yield.
-[balance / energy / generator]
-generator = 1.0
-geothermal = 1.0
-; Deprecated, because of Kinetic Watermill
-water = 1.0
-solar = 1.0
-; Deprecated, because of Kinetic Windmill
-wind = 1.0
-nuclear = 1.0
-semiFluidOil = 1.0
-semiFluidFuel = 1.0
-semiFluidBiomass = 1.0
-semiFluidBioethanol = 1.0
-semiFluidBiogas = 1.0
-Stirling = 1.0
-Kinetic = 1.0
-radioisotope = 1.0
-
-; Base heat generation factors - increase for higher heat yield.
-[balance / energy / heatgenerator]
-semiFluidOil = 1.0
-semiFluidFuel = 1.0
-semiFluidBiomass = 1.0
-semiFluidBioethanol = 1.0
-semiFluidBiogas = 1.0
-solid = 1.0
-radioisotope = 1.0
-electric = 1.0
-
-; Base kinetic generation factors - increase for higher kinetic energy yield.
-[balance / energy / kineticgenerator]
-water = 1.0
-wind = 1.0
-manual = 1.0
-steam = 1.0
-electric = 1.0
-
-; Basically the amount of hU the conversion of one mB of Liquid takes/gives
-[balance / energy / fluidconversion]
-; Lava -> PahoehoeLava
-heatExchangerLava = 1.0
-; Hot Coolant <-> Cold Coolant
-heatExchangerHotCoolant = 1.0
-; Hot Water <- Water
-heatExchangerWater = 1.0
-
-; Base Coolant conversion rate for FluidReactors.
-[balance / energy / FluidReactor]
-outputModifier = 1.0
-
-; Balace Value for Turbine Livetime in sec. Default 86400sec = 24h
-[balance / SteamKineticGenerator]
-rotorlivetime = 86400
-
-; Balace Values for calcification default 100.000mB Water -> to failure
-[balance / steamgenerator / calcification]
-maxcalcification = 100000
-
-; Balance Values for Fermenter
-[balance / fermenter]
-need_amount_biomass_per_run = 10
-output_amount_biogas_per_run = 200
-hU_per_run = 8000
-biomass_per_fertilizier = 500
-
-; Additional initial uu values, a value of 1 equals cobblestone.
-; Recipes may cause the final value be lower than the one specified here.
-; Format: <name>[@metadata] = <value>
-[balance / uu-values / predefined]
-IC2:itemOreIridium = 12000
-
-[recipes]
-; To modify recipes or add custom recipes, copy the corresponding .ini file to
-; "minecraft/config/ic2" and modify it.
-;
-; Disable IC2 crafting recipes with the specified output, comma separated list.
-; Recipes in the additional section below aren't affected.
-; Format: <name>[@metadata], e.g. minecraft:bucket to disable IC2's bucket recipe from tin.
-disable =
-; Purge crafting recipes with the specified output, including vanilla and mod ones, comma separated list.
-; Recipes in the additional section below aren't affected.
-; Format: <name>[@metadata], e.g. minecraft:tnt to disable crafting tnt.
-purge =
-; Enable crafting of IC2 coins, otherwise they have to be spawned in and are thus limited.
-allowCoinCrafting = true
-; Allow only IC2 circuits to be used in IC2's recipes.
-requireIc2Circuits = false
-; Adjust smelting recipes to always output IC2 items if available.
-smeltToIc2Items = false
-; Ignore invalid recipes.
-ignoreInvalidRecipes = false
-
-[misc]
-; Enable IC2's custom sound system.
-enableIc2Audio = true
-; Maximum number of active audio sources, only change it if you know what you're doing.
-maxAudioSourceCount = 32
-; Enable hiding of secret recipes in CraftGuide/NEI.
-hideSecretRecipes = true
-; Enable activation of the quantum leggings' speed boost when sprinting instead of holding the boost key.
-quantumSpeedOnSprint = true
-; Enable burning of scrap in a generator.
-allowBurningScrap = true
-; Comma separated list with ores the miner should harvest.
-; Format: <name>[@metadata], e.g. minecraft:torch, minecraft:chest
-; The metadata * will match any, e.g. minecraft:log@*.
-; Ore dictionary entries can be specified with OreDict:<ore dict name> as the name.
-additionalValuableOres =
-; Use the new highly experimental current + voltage energy net model with energy loss.
-; Only set this to true if you know what you are doing.
-useLinearTransferModel = false
-; Potion ID of radiation potion.
-; Do not change this after you created a world...
-radiationPotionID = 24
-
+; ic2 general config
+; created Oct 9, 2019 2:31:48 AM
+;---
+
+[worldgen]
+; Enable generation of rubber trees in the world.
+rubberTree = true
+; Enable generation of copper in the world.
+copperOre = true
+; Enable generation of tin in the world.
+tinOre = true
+; Enable generation of uranium in the world.
+uraniumOre = true
+; Enable generation of Lead in the world.
+leadOre = true
+; Factor scaling the IC2 ore generation quantity.
+oreDensityFactor = 1.0
+
+[protection]
+; Enable logging of players when they remove a machine using a wrench.
+wrenchLogging = true
+; Maximum Explosion power of a nuke, where TNT is 4.
+nukeExplosionPowerLimit = 60
+; Maximum explosion power of a nuclear reactor, where TNT is 4.
+reactorExplosionPowerLimit = 45
+; Enable the nuke
+enableNuke = true
+
+[balance]
+; Maximum battery tier usable by the miner.
+; 1 = batteries, 2 = lead batteries, 3 = energy crystals, 4 = lapotron crystals
+minerDischargeTier = 1
+; Increase the energy use by the player's inventory weight when going through a teleporter.
+teleporterUseInventoryWeight = true
+; Ratio of energy retained inside energy storage block Items when wrenched.
+; 0 (nothing) ... 1 (100%), default 0.8 (80 %)
+energyRetainedInStorageBlockDrops = 0.8
+; Factor to scale the UU-Matter production energy requirement.
+uuEnergyFactor = 1.0
+; Disable the vanilla ender chest, removing existing ones from the world as well.
+disableEnderChest = false
+; Comma separated list of blocks and items which should not be turned into scrap by the recycler.
+; Format: <name>[@metadata], metadata * matches any.
+; Ore dictionary entries can be specified with OreDict:<ore dict name> as the name.
+recyclerBlacklist = minecraft:glass_pane, minecraft:stick, minecraft:snowball, minecraft:snow_layer, minecraft:snow, IC2:blockScaffold
+; Whitelist for blocks/items allowed to be recycled.
+; The whitelist will be used instead of the blacklist approach if it's non-empty, disallowing everything else.
+; The format is the same as the blacklist.
+recyclerWhitelist =
+; Allow to pick blocks up using just a pickaxe instead of needing a wrench.
+ignoreWrenchRequirement = false
+
+; Base energy generation factors - increase for higher energy yield.
+[balance / energy / generator]
+generator = 1.0
+geothermal = 1.0
+; Deprecated, because of Kinetic Watermill
+water = 1.0
+solar = 1.0
+; Deprecated, because of Kinetic Windmill
+wind = 1.0
+nuclear = 1.0
+semiFluidOil = 1.0
+semiFluidFuel = 1.0
+semiFluidBiomass = 1.0
+semiFluidBioethanol = 1.0
+semiFluidBiogas = 1.0
+Stirling = 1.0
+Kinetic = 1.0
+radioisotope = 1.0
+
+; Base heat generation factors - increase for higher heat yield.
+[balance / energy / heatgenerator]
+semiFluidOil = 1.0
+semiFluidFuel = 1.0
+semiFluidBiomass = 1.0
+semiFluidBioethanol = 1.0
+semiFluidBiogas = 1.0
+solid = 1.0
+radioisotope = 1.0
+electric = 1.0
+
+; Base kinetic generation factors - increase for higher kinetic energy yield.
+[balance / energy / kineticgenerator]
+water = 1.0
+wind = 1.0
+manual = 1.0
+steam = 1.0
+electric = 1.0
+
+; Basically the amount of hU the conversion of one mB of Liquid takes/gives
+[balance / energy / fluidconversion]
+; Lava -> PahoehoeLava
+heatExchangerLava = 1.0
+; Hot Coolant <-> Cold Coolant
+heatExchangerHotCoolant = 1.0
+; Hot Water <- Water
+heatExchangerWater = 1.0
+
+; Base Coolant conversion rate for FluidReactors.
+[balance / energy / FluidReactor]
+outputModifier = 1.0
+
+; Balace Value for Turbine Livetime in sec. Default 86400sec = 24h
+[balance / SteamKineticGenerator]
+rotorlivetime = 86400
+
+; Balace Values for calcification default 100.000mB Water -> to failure
+[balance / steamgenerator / calcification]
+maxcalcification = 100000
+
+; Balance Values for Fermenter
+[balance / fermenter]
+need_amount_biomass_per_run = 10
+output_amount_biogas_per_run = 200
+hU_per_run = 8000
+biomass_per_fertilizier = 500
+
+; Additional initial uu values, a value of 1 equals cobblestone.
+; Recipes may cause the final value be lower than the one specified here.
+; Format: <name>[@metadata] = <value>
+[balance / uu-values / predefined]
+IC2:itemOreIridium = 12000
+
+[recipes]
+; To modify recipes or add custom recipes, copy the corresponding .ini file to
+; "minecraft/config/ic2" and modify it.
+;
+; Disable IC2 crafting recipes with the specified output, comma separated list.
+; Recipes in the additional section below aren't affected.
+; Format: <name>[@metadata], e.g. minecraft:bucket to disable IC2's bucket recipe from tin.
+disable =
+; Purge crafting recipes with the specified output, including vanilla and mod ones, comma separated list.
+; Recipes in the additional section below aren't affected.
+; Format: <name>[@metadata], e.g. minecraft:tnt to disable crafting tnt.
+purge =
+; Enable crafting of IC2 coins, otherwise they have to be spawned in and are thus limited.
+allowCoinCrafting = true
+; Allow only IC2 circuits to be used in IC2's recipes.
+requireIc2Circuits = false
+; Adjust smelting recipes to always output IC2 items if available.
+smeltToIc2Items = false
+; Ignore invalid recipes.
+ignoreInvalidRecipes = false
+
+[misc]
+; Enable IC2's custom sound system.
+enableIc2Audio = true
+; Maximum number of active audio sources, only change it if you know what you're doing.
+maxAudioSourceCount = 32
+; Enable hiding of secret recipes in CraftGuide/NEI.
+hideSecretRecipes = true
+; Enable activation of the quantum leggings' speed boost when sprinting instead of holding the boost key.
+quantumSpeedOnSprint = true
+; Enable burning of scrap in a generator.
+allowBurningScrap = true
+; Comma separated list with ores the miner should harvest.
+; Format: <name>[@metadata], e.g. minecraft:torch, minecraft:chest
+; The metadata * will match any, e.g. minecraft:log@*.
+; Ore dictionary entries can be specified with OreDict:<ore dict name> as the name.
+additionalValuableOres =
+; Use the new highly experimental current + voltage energy net model with energy loss.
+; Only set this to true if you know what you are doing.
+useLinearTransferModel = false
+; Potion ID of radiation potion.
+; Do not change this after you created a world...
+radiationPotionID = 24
+
diff --git a/config/Ztones.cfg b/config/Ztones.cfg
new file mode 100644
index 0000000000..b3d51e2cf4
--- /dev/null
+++ b/config/Ztones.cfg
@@ -0,0 +1,58 @@
+# Configuration file
+
+blocks {
+ B:enableAgon=true
+ B:enableAzur=true
+ B:enableBitt=true
+ B:enableCray=true
+ B:enableFort=true
+ B:enableGlac=true
+ B:enableIszm=true
+ B:enableJelt=true
+ B:enableKorp=true
+ B:enableKryp=true
+ B:enableLair=true
+ B:enableLave=true
+ B:enableMint=true
+ B:enableMyst=true
+ B:enableReds=true
+ B:enableReed=true
+ B:enableRoen=true
+ B:enableSols=true
+ B:enableSync=true
+ B:enableTank=true
+ B:enableTest=false
+ B:enableVect=true
+ B:enableVena=true
+ B:enableZane=true
+ B:enableZech=true
+ B:enableZest=true
+ B:enableZeta=true
+ B:enableZion=true
+ B:enableZkul=true
+ B:enableZoea=true
+ B:enableZome=true
+ B:enableZone=true
+ B:enableZorg=true
+ B:enableZyth=true
+}
+
+
+items {
+ B:" Mini Charcoal"=true
+ B:"Diamond Zane"=true
+ B:"MSG Pill"=true
+ B:"Mini Coal"=true
+ B:Ofanix=true
+ B:"Splat Axe"=true
+ B:"Terrain Eater"=true
+ B:"Totem Tool"=true
+}
+
+
+tweaks {
+ # Enables dungeon chest loot [default: true]
+ B:enableChestGen=true
+}
+
+
diff --git a/config/devtips.cfg b/config/devtips.cfg
index 8a2453363f..7a42a20e8f 100644
--- a/config/devtips.cfg
+++ b/config/devtips.cfg
@@ -1,26 +1,26 @@
-# Configuration file
-
-general {
- # If set to false, tooltips will be shown without pressing Ctrl. [default: true]
- B:requiresCtrl=true
-
- # If set to false, tooltips will be shown without going into Advanced Info mode (F3 + H). [default: true]
- B:"requiresF3+H"=false
-
- # If set to true, item and block class names of items and blocks will be shown in the tooltip. Only useful for programmers. [default: true]
- B:showClassNames=true
-
- # If set to true, FluidRegistry names of fluids and fluid containers will be shown in the tooltip. [default: true]
- B:showFluidRegistryNames=true
-
- # If set to true, GameRegistry names of items and blocks will be shown in the tooltip. [default: true]
- B:showGameRegistryNames=true
-
- # If set to true, OreDictionary entries of items and blocks will be shown in the tooltip. [default: true]
- B:showOreDictNames=true
-
- # Set this to false to disable the 'Press Ctrl for more info' message [default: true]
- B:showShortMessage=true
-}
-
-
+# Configuration file
+
+general {
+ # If set to false, tooltips will be shown without pressing Ctrl. [default: true]
+ B:requiresCtrl=true
+
+ # If set to false, tooltips will be shown without going into Advanced Info mode (F3 + H). [default: true]
+ B:"requiresF3+H"=false
+
+ # If set to true, item and block class names of items and blocks will be shown in the tooltip. Only useful for programmers. [default: true]
+ B:showClassNames=true
+
+ # If set to true, FluidRegistry names of fluids and fluid containers will be shown in the tooltip. [default: true]
+ B:showFluidRegistryNames=true
+
+ # If set to true, GameRegistry names of items and blocks will be shown in the tooltip. [default: true]
+ B:showGameRegistryNames=true
+
+ # If set to true, OreDictionary entries of items and blocks will be shown in the tooltip. [default: true]
+ B:showOreDictNames=true
+
+ # Set this to false to disable the 'Press Ctrl for more info' message [default: true]
+ B:showShortMessage=true
+}
+
+
diff --git a/config/forge.cfg b/config/forge.cfg
index 976d1345d1..08d08b30c4 100644
--- a/config/forge.cfg
+++ b/config/forge.cfg
@@ -1,57 +1,57 @@
-# Configuration file
-
-general {
- # Set to true to disable Forge's version check mechanics. Forge queries a small json file on our server for version information. For more details see the ForgeVersion class in our github.
- B:disableVersionCheck=false
-
- # Controls the number threshold at which Packet51 is preferred over Packet52, default and minimum 64, maximum 1024
- I:clumpingThreshold=64
-
- # Set to true to enable the post initialization sorting of crafting recipes using Forge's sorter. May cause desyncing on conflicting recipies. MUST RESTART MINECRAFT IF CHANGED FROM THE CONFIG GUI.
- B:sortRecipies=true
-
- # Set this to true to remove any Entity that throws an error in its update method instead of closing the server and reporting a crash log. BE WARNED THIS COULD SCREW UP EVERYTHING USE SPARINGLY WE ARE NOT RESPONSIBLE FOR DAMAGES.
- B:removeErroringEntities=false
-
- # Set this to true to remove any TileEntity that throws an error in its update method instead of closing the server and reporting a crash log. BE WARNED THIS COULD SCREW UP EVERYTHING USE SPARINGLY WE ARE NOT RESPONSIBLE FOR DAMAGES.
- B:removeErroringTileEntities=false
-
- # Set this to true to check the entire entity's collision bounding box for ladders instead of just the block they are in. Causes noticable differences in mechanics so default is vanilla behavior. Default: false
- B:fullBoundingBoxLadders=false
-
- # Control the range of sky blending for colored skies in biomes.
- I:biomeSkyBlendRange <
- 2
- 4
- 6
- 8
- 10
- 12
- 14
- 16
- 18
- 20
- 22
- 24
- 26
- 28
- 30
- 32
- 34
- >
-
- # Base zombie summoning spawn chance. Allows changing the bonus zombie summoning mechanic.
- D:zombieBaseSummonChance=0.1
-
- # Chance that a zombie (or subclass) is a baby. Allows changing the zombie spawning mechanic.
- D:zombieBabyChance=0.05
-
- # The spawn fuzz when a player respawns in the world, this is controlable by WorldType, this config option is for the default overworld.
- I:defaultSpawnFuzz=20
-
- # If the overworld has ANY spawn fuzz at all. If not, the spawn will always be the exact same location.
- B:spawnHasFuzz=true
- B:enableGlobalConfig=false
-}
-
-
+# Configuration file
+
+general {
+ # Set to true to disable Forge's version check mechanics. Forge queries a small json file on our server for version information. For more details see the ForgeVersion class in our github.
+ B:disableVersionCheck=false
+
+ # Controls the number threshold at which Packet51 is preferred over Packet52, default and minimum 64, maximum 1024
+ I:clumpingThreshold=64
+
+ # Set to true to enable the post initialization sorting of crafting recipes using Forge's sorter. May cause desyncing on conflicting recipies. MUST RESTART MINECRAFT IF CHANGED FROM THE CONFIG GUI.
+ B:sortRecipies=true
+
+ # Set this to true to remove any Entity that throws an error in its update method instead of closing the server and reporting a crash log. BE WARNED THIS COULD SCREW UP EVERYTHING USE SPARINGLY WE ARE NOT RESPONSIBLE FOR DAMAGES.
+ B:removeErroringEntities=false
+
+ # Set this to true to remove any TileEntity that throws an error in its update method instead of closing the server and reporting a crash log. BE WARNED THIS COULD SCREW UP EVERYTHING USE SPARINGLY WE ARE NOT RESPONSIBLE FOR DAMAGES.
+ B:removeErroringTileEntities=false
+
+ # Set this to true to check the entire entity's collision bounding box for ladders instead of just the block they are in. Causes noticable differences in mechanics so default is vanilla behavior. Default: false
+ B:fullBoundingBoxLadders=false
+
+ # Control the range of sky blending for colored skies in biomes.
+ I:biomeSkyBlendRange <
+ 2
+ 4
+ 6
+ 8
+ 10
+ 12
+ 14
+ 16
+ 18
+ 20
+ 22
+ 24
+ 26
+ 28
+ 30
+ 32
+ 34
+ >
+
+ # Base zombie summoning spawn chance. Allows changing the bonus zombie summoning mechanic.
+ D:zombieBaseSummonChance=0.1
+
+ # Chance that a zombie (or subclass) is a baby. Allows changing the zombie spawning mechanic.
+ D:zombieBabyChance=0.05
+
+ # The spawn fuzz when a player respawns in the world, this is controlable by WorldType, this config option is for the default overworld.
+ I:defaultSpawnFuzz=20
+
+ # If the overworld has ANY spawn fuzz at all. If not, the spawn will always be the exact same location.
+ B:spawnHasFuzz=true
+ B:enableGlobalConfig=false
+}
+
+
diff --git a/config/forgeChunkLoading.cfg b/config/forgeChunkLoading.cfg
index 3051bdffab..a9ac68a0d9 100644
--- a/config/forgeChunkLoading.cfg
+++ b/config/forgeChunkLoading.cfg
@@ -1,47 +1,47 @@
-# Configuration file
-
-##########################################################################################################
-# Forge
-#--------------------------------------------------------------------------------------------------------#
-# Sample mod specific control section.
-# Copy this section and rename the with the modid for the mod you wish to override.
-# A value of zero in either entry effectively disables any chunkloading capabilities
-# for that mod
-##########################################################################################################
-
-Forge {
- # Maximum chunks per ticket for the mod.
- I:maximumChunksPerTicket=25
-
- # Maximum ticket count for the mod. Zero disables chunkloading capabilities.
- I:maximumTicketCount=200
-}
-
-
-##########################################################################################################
-# defaults
-#--------------------------------------------------------------------------------------------------------#
-# Default configuration for forge chunk loading control
-##########################################################################################################
-
-defaults {
- # Are mod overrides enabled?
- B:enabled=true
-
- # The default maximum number of chunks a mod can force, per ticket,
- # for a mod without an override. This is the maximum number of chunks a single ticket can force.
- I:maximumChunksPerTicket=25
-
- # The default maximum ticket count for a mod which does not have an override
- # in this file. This is the number of chunk loading requests a mod is allowed to make.
- I:maximumTicketCount=200
-
- # The number of tickets a player can be assigned instead of a mod. This is shared across all mods and it is up to the mods to use it.
- I:playerTicketCount=500
-
- # Unloaded chunks can first be kept in a dormant cache for quicker
- # loading times. Specify the size (in chunks) of that cache here
- I:dormantChunkCacheSize=0
-}
-
-
+# Configuration file
+
+##########################################################################################################
+# Forge
+#--------------------------------------------------------------------------------------------------------#
+# Sample mod specific control section.
+# Copy this section and rename the with the modid for the mod you wish to override.
+# A value of zero in either entry effectively disables any chunkloading capabilities
+# for that mod
+##########################################################################################################
+
+Forge {
+ # Maximum chunks per ticket for the mod.
+ I:maximumChunksPerTicket=25
+
+ # Maximum ticket count for the mod. Zero disables chunkloading capabilities.
+ I:maximumTicketCount=200
+}
+
+
+##########################################################################################################
+# defaults
+#--------------------------------------------------------------------------------------------------------#
+# Default configuration for forge chunk loading control
+##########################################################################################################
+
+defaults {
+ # Are mod overrides enabled?
+ B:enabled=true
+
+ # The default maximum number of chunks a mod can force, per ticket,
+ # for a mod without an override. This is the maximum number of chunks a single ticket can force.
+ I:maximumChunksPerTicket=25
+
+ # The default maximum ticket count for a mod which does not have an override
+ # in this file. This is the number of chunk loading requests a mod is allowed to make.
+ I:maximumTicketCount=200
+
+ # The number of tickets a player can be assigned instead of a mod. This is shared across all mods and it is up to the mods to use it.
+ I:playerTicketCount=500
+
+ # Unloaded chunks can first be kept in a dormant cache for quicker
+ # loading times. Specify the size (in chunks) of that cache here
+ I:dormantChunkCacheSize=0
+}
+
+
diff --git a/config/splash.properties b/config/splash.properties
index da46ee8ee0..2eb0cd4034 100644
--- a/config/splash.properties
+++ b/config/splash.properties
@@ -1,5 +1,5 @@
#Splash screen properties
-#Thu Jul 04 17:21:32 CEST 2019
+#Wed Oct 09 02:31:39 CEST 2019
logoTexture=textures/gui/title/mojang.png
background=0xFFFFFF
font=0x0
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000000..b761216703
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/gradlew.bat b/gradlew.bat
index 8a0b282aa6..aec99730b4 100644
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -1,90 +1,90 @@
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS=
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto init
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:init
-@rem Get command-line arguments, handling Windowz variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-if "%@eval[2+2]" == "4" goto 4NT_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-goto execute
-
-:4NT_args
-@rem Get arguments from the 4NT Shell from JP Software
-set CMD_LINE_ARGS=%$
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windowz variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+if "%@eval[2+2]" == "4" goto 4NT_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+goto execute
+
+:4NT_args
+@rem Get arguments from the 4NT Shell from JP Software
+set CMD_LINE_ARGS=%$
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/libs/CodeChickenCore-1.7.10-1.0.7.47-dev.jar b/libs/CodeChickenCore-1.7.10-1.0.7.47-dev.jar
new file mode 100644
index 0000000000..c7ecc2a5d1
--- /dev/null
+++ b/libs/CodeChickenCore-1.7.10-1.0.7.47-dev.jar
Binary files differ
diff --git a/libs/CodeChickenLib-1.7.10-1.1.3.140-dev.jar b/libs/CodeChickenLib-1.7.10-1.1.3.140-dev.jar
new file mode 100644
index 0000000000..2470ca73d9
--- /dev/null
+++ b/libs/CodeChickenLib-1.7.10-1.1.3.140-dev.jar
Binary files differ
diff --git a/libs/NotEnoughItems-1.7.10-1.0.5.120-dev.jar b/libs/NotEnoughItems-1.7.10-1.0.5.120-dev.jar
new file mode 100644
index 0000000000..0bb0483e3b
--- /dev/null
+++ b/libs/NotEnoughItems-1.7.10-1.0.5.120-dev.jar
Binary files differ
diff --git a/libs/Ztones-1.7.10-2.2.2-deobf.jar b/libs/Ztones-1.7.10-2.2.2-deobf.jar
new file mode 100644
index 0000000000..daee8dfc48
--- /dev/null
+++ b/libs/Ztones-1.7.10-2.2.2-deobf.jar
Binary files differ
diff --git a/libs/gregtech-5.09.32-dev.jar b/libs/gregtech-5.09.32-dev.jar
new file mode 100644
index 0000000000..44c5cd845f
--- /dev/null
+++ b/libs/gregtech-5.09.32-dev.jar
Binary files differ
diff --git a/libs/industrialcraft-2-2.2.828a-experimental-deobf.jar b/libs/industrialcraft-2-2.2.828a-experimental-deobf.jar
new file mode 100644
index 0000000000..30728e2a3f
--- /dev/null
+++ b/libs/industrialcraft-2-2.2.828a-experimental-deobf.jar
Binary files differ
diff --git a/libs/joml-1.9.18.jar b/libs/joml-1.9.18.jar
new file mode 100644
index 0000000000..22161aa47b
--- /dev/null
+++ b/libs/joml-1.9.18.jar
Binary files differ
diff --git a/logs/2019-07-04-1.log.gz b/logs/2019-07-04-1.log.gz
index ff74864d3f..ff6924de7b 100644
--- a/logs/2019-07-04-1.log.gz
+++ b/logs/2019-07-04-1.log.gz
Binary files differ
diff --git a/logs/2019-07-04-2.log.gz b/logs/2019-07-04-2.log.gz
index 4a4d9a17aa..b31a662fcb 100644
--- a/logs/2019-07-04-2.log.gz
+++ b/logs/2019-07-04-2.log.gz
Binary files differ
diff --git a/logs/2019-07-04-3.log.gz b/logs/2019-07-04-3.log.gz
index ff6924de7b..e02204d078 100644
--- a/logs/2019-07-04-3.log.gz
+++ b/logs/2019-07-04-3.log.gz
Binary files differ
diff --git a/logs/2019-07-04-4.log.gz b/logs/2019-07-04-4.log.gz
new file mode 100644
index 0000000000..ee99d99d76
--- /dev/null
+++ b/logs/2019-07-04-4.log.gz
Binary files differ
diff --git a/logs/2019-07-04-5.log.gz b/logs/2019-07-04-5.log.gz
new file mode 100644
index 0000000000..e20fd8beb8
--- /dev/null
+++ b/logs/2019-07-04-5.log.gz
Binary files differ
diff --git a/logs/2019-07-04-6.log.gz b/logs/2019-07-04-6.log.gz
new file mode 100644
index 0000000000..00594b280b
--- /dev/null
+++ b/logs/2019-07-04-6.log.gz
Binary files differ
diff --git a/logs/2019-07-04-7.log.gz b/logs/2019-07-04-7.log.gz
new file mode 100644
index 0000000000..560b311c5f
--- /dev/null
+++ b/logs/2019-07-04-7.log.gz
Binary files differ
diff --git a/logs/2019-07-25-1.log.gz b/logs/2019-07-25-1.log.gz
new file mode 100644
index 0000000000..b00e1e4d4b
--- /dev/null
+++ b/logs/2019-07-25-1.log.gz
Binary files differ
diff --git a/logs/2019-07-30-1.log.gz b/logs/2019-07-30-1.log.gz
new file mode 100644
index 0000000000..5245354be9
--- /dev/null
+++ b/logs/2019-07-30-1.log.gz
Binary files differ
diff --git a/logs/2019-07-30-2.log.gz b/logs/2019-07-30-2.log.gz
new file mode 100644
index 0000000000..eac305e091
--- /dev/null
+++ b/logs/2019-07-30-2.log.gz
Binary files differ
diff --git a/logs/2019-10-02-1.log.gz b/logs/2019-10-02-1.log.gz
new file mode 100644
index 0000000000..a9aa9b9d21
--- /dev/null
+++ b/logs/2019-10-02-1.log.gz
Binary files differ
diff --git a/logs/2019-10-08-1.log.gz b/logs/2019-10-08-1.log.gz
new file mode 100644
index 0000000000..b235f35517
--- /dev/null
+++ b/logs/2019-10-08-1.log.gz
Binary files differ
diff --git a/logs/2019-10-08-2.log.gz b/logs/2019-10-08-2.log.gz
new file mode 100644
index 0000000000..67d8e615f8
--- /dev/null
+++ b/logs/2019-10-08-2.log.gz
Binary files differ
diff --git a/logs/2019-10-08-3.log.gz b/logs/2019-10-08-3.log.gz
new file mode 100644
index 0000000000..efb5e3da17
--- /dev/null
+++ b/logs/2019-10-08-3.log.gz
Binary files differ
diff --git a/logs/2019-10-08-4.log.gz b/logs/2019-10-08-4.log.gz
new file mode 100644
index 0000000000..7fe6f88451
--- /dev/null
+++ b/logs/2019-10-08-4.log.gz
Binary files differ
diff --git a/logs/2019-10-08-5.log.gz b/logs/2019-10-08-5.log.gz
new file mode 100644
index 0000000000..e0a895c030
--- /dev/null
+++ b/logs/2019-10-08-5.log.gz
Binary files differ
diff --git a/logs/2019-10-08-6.log.gz b/logs/2019-10-08-6.log.gz
new file mode 100644
index 0000000000..b16e824b37
--- /dev/null
+++ b/logs/2019-10-08-6.log.gz
Binary files differ
diff --git a/logs/2019-10-08-7.log.gz b/logs/2019-10-08-7.log.gz
new file mode 100644
index 0000000000..07bcb00d89
--- /dev/null
+++ b/logs/2019-10-08-7.log.gz
Binary files differ
diff --git a/logs/2019-10-09-1.log.gz b/logs/2019-10-09-1.log.gz
new file mode 100644
index 0000000000..e0df02e6e3
--- /dev/null
+++ b/logs/2019-10-09-1.log.gz
Binary files differ
diff --git a/mods/1.7.10/CodeChickenLib-1.7.10-1.1.3.140-universal.jar b/mods/1.7.10/CodeChickenLib-1.7.10-1.1.3.140-universal.jar
new file mode 100644
index 0000000000..9aa3d80afd
--- /dev/null
+++ b/mods/1.7.10/CodeChickenLib-1.7.10-1.1.3.140-universal.jar
Binary files differ
diff --git a/mods/devtips-1.1.jar b/mods/devtips-1.1.jar
new file mode 100644
index 0000000000..a5e373537b
--- /dev/null
+++ b/mods/devtips-1.1.jar
Binary files differ
diff --git a/mods/ic2/EJML-core-0.26.jar b/mods/ic2/EJML-core-0.26.jar
new file mode 100644
index 0000000000..8f1fe755e6
--- /dev/null
+++ b/mods/ic2/EJML-core-0.26.jar
Binary files differ
diff --git a/options.txt b/options.txt
index 8c305b8fca..5bc5167523 100644
--- a/options.txt
+++ b/options.txt
@@ -14,7 +14,7 @@ fboEnable:true
difficulty:2
fancyGraphics:true
ao:2
-clouds:true
+clouds:false
resourcePacks:[]
lastServer:
lang:en_US
@@ -90,12 +90,12 @@ key_Boost Key:0
key_Mode Switch Key:0
key_Side Inventory Key:0
key_Hub Expand Key:0
-soundCategory_master:0.0
-soundCategory_music:1.0
-soundCategory_record:1.0
-soundCategory_weather:1.0
-soundCategory_block:1.0
-soundCategory_hostile:1.0
-soundCategory_neutral:1.0
-soundCategory_player:1.0
-soundCategory_ambient:1.0
+soundCategory_master:0.25496688
+soundCategory_music:0.0
+soundCategory_record:0.0
+soundCategory_weather:0.0
+soundCategory_block:0.40140846
+soundCategory_hostile:0.0
+soundCategory_neutral:0.0
+soundCategory_player:0.28169015
+soundCategory_ambient:0.18309858
diff --git a/saves/NEI/local/New World/NEI.cfg b/saves/NEI/local/New World/NEI.cfg
index 438b6fa3be..6e4acab17e 100644
--- a/saves/NEI/local/New World/NEI.cfg
+++ b/saves/NEI/local/New World/NEI.cfg
@@ -2,7 +2,4 @@
#Most of these options can be changed ingame.
#Deleting any element will restore it to it's default value
-inventory
-{
- cheatmode=2
-}
+inventory.cheatmode=2
diff --git a/saves/NEI/local/New World/NEI.dat b/saves/NEI/local/New World/NEI.dat
index 6df1570cf9..74f929fd42 100644
--- a/saves/NEI/local/New World/NEI.dat
+++ b/saves/NEI/local/New World/NEI.dat
Binary files differ
diff --git a/saves/New World/DIM-1/data/villages.dat b/saves/New World/DIM-1/data/villages.dat
index 6eea9045b7..bbfef5a15b 100644
--- a/saves/New World/DIM-1/data/villages.dat
+++ b/saves/New World/DIM-1/data/villages.dat
Binary files differ
diff --git a/saves/New World/DIM1/data/villages.dat b/saves/New World/DIM1/data/villages.dat
index 6eea9045b7..bbfef5a15b 100644
--- a/saves/New World/DIM1/data/villages.dat
+++ b/saves/New World/DIM1/data/villages.dat
Binary files differ
diff --git a/saves/New World/NEI/players/kekzdealer@gmail.com.dat b/saves/New World/NEI/players/kekzdealer@gmail.com.dat
deleted file mode 100644
index e69de29bb2..0000000000
--- a/saves/New World/NEI/players/kekzdealer@gmail.com.dat
+++ /dev/null
diff --git a/saves/New World/data/Mineshaft.dat b/saves/New World/data/Mineshaft.dat
deleted file mode 100644
index 32b69a406a..0000000000
--- a/saves/New World/data/Mineshaft.dat
+++ /dev/null
Binary files differ
diff --git a/saves/New World/data/Stronghold.dat b/saves/New World/data/Stronghold.dat
deleted file mode 100644
index ce80a0542c..0000000000
--- a/saves/New World/data/Stronghold.dat
+++ /dev/null
Binary files differ
diff --git a/saves/New World/data/villages.dat b/saves/New World/data/villages.dat
index 6eea9045b7..bbfef5a15b 100644
--- a/saves/New World/data/villages.dat
+++ b/saves/New World/data/villages.dat
Binary files differ
diff --git a/saves/New World/level.dat b/saves/New World/level.dat
index e926db4bfc..8e4ac4e060 100644
--- a/saves/New World/level.dat
+++ b/saves/New World/level.dat
Binary files differ
diff --git a/saves/New World/level.dat_mcr b/saves/New World/level.dat_mcr
index 8ded46d4c4..18145f40ad 100644
--- a/saves/New World/level.dat_mcr
+++ b/saves/New World/level.dat_mcr
Binary files differ
diff --git a/saves/New World/level.dat_old b/saves/New World/level.dat_old
index 7d023fc227..ddc26c0537 100644
--- a/saves/New World/level.dat_old
+++ b/saves/New World/level.dat_old
Binary files differ
diff --git a/saves/New World/playerdata/ddc68fe4-0789-360b-a837-3dcbb936da65.dat b/saves/New World/playerdata/ddc68fe4-0789-360b-a837-3dcbb936da65.dat
deleted file mode 100644
index cf38536515..0000000000
--- a/saves/New World/playerdata/ddc68fe4-0789-360b-a837-3dcbb936da65.dat
+++ /dev/null
Binary files differ
diff --git a/saves/New World/playerdata/fd8b4f31-35bd-474b-8add-e80df8a4a95f.dat b/saves/New World/playerdata/fd8b4f31-35bd-474b-8add-e80df8a4a95f.dat
deleted file mode 100644
index 7714b0a0b2..0000000000
--- a/saves/New World/playerdata/fd8b4f31-35bd-474b-8add-e80df8a4a95f.dat
+++ /dev/null
Binary files differ
diff --git a/saves/New World/region/r.-1.0.mca b/saves/New World/region/r.-1.0.mca
index c5ebecdb55..98be9c18aa 100644
--- a/saves/New World/region/r.-1.0.mca
+++ b/saves/New World/region/r.-1.0.mca
Binary files differ
diff --git a/saves/New World/region/r.0.-1.mca b/saves/New World/region/r.0.-1.mca
deleted file mode 100644
index ebb611446b..0000000000
--- a/saves/New World/region/r.0.-1.mca
+++ /dev/null
Binary files differ
diff --git a/saves/New World/region/r.0.0.mca b/saves/New World/region/r.0.0.mca
index bec47d6928..2550b88006 100644
--- a/saves/New World/region/r.0.0.mca
+++ b/saves/New World/region/r.0.0.mca
Binary files differ
diff --git a/saves/New World/session.lock b/saves/New World/session.lock
index 0f0c879b8d..6ffc6e410a 100644
--- a/saves/New World/session.lock
+++ b/saves/New World/session.lock
Binary files differ
diff --git a/saves/New World/stats/ddc68fe4-0789-360b-a837-3dcbb936da65.json b/saves/New World/stats/ddc68fe4-0789-360b-a837-3dcbb936da65.json
deleted file mode 100644
index ffa43e08a2..0000000000
--- a/saves/New World/stats/ddc68fe4-0789-360b-a837-3dcbb936da65.json
+++ /dev/null
@@ -1 +0,0 @@
-{"stat.walkOneCm":618295,"achievement.openInventory":523,"stat.leaveGame":1,"stat.useItem.31":1,"stat.flyOneCm":309726,"stat.drop":2,"stat.jump":756,"stat.useItem.95":233,"stat.useItem.323":8,"stat.playOneMinute":1107325,"stat.climbOneCm":6270,"achievement.buildWorkBench":1,"stat.useItem.3":47,"achievement.mineWood":1,"achievement.exploreAllBiomes":{"value":0,"progress":["Swampland"]},"stat.useItem.58":2} \ No newline at end of file
diff --git a/saves/New World/stats/fd8b4f31-35bd-474b-8add-e80df8a4a95f.json b/saves/New World/stats/fd8b4f31-35bd-474b-8add-e80df8a4a95f.json
deleted file mode 100644
index 3374979e71..0000000000
--- a/saves/New World/stats/fd8b4f31-35bd-474b-8add-e80df8a4a95f.json
+++ /dev/null
@@ -1 +0,0 @@
-{"stat.useItem.54":2,"stat.walkOneCm":12515,"stat.drop":1,"stat.jump":6,"stat.playOneMinute":262803,"achievement.openInventory":56,"achievement.exploreAllBiomes":{"value":0,"progress":["Swampland"]}} \ No newline at end of file
diff --git a/src/main/java/blocks/Block_GDCUnit.java b/src/main/java/blocks/Block_GDCUnit.java
index d11681b1d6..ed778b5e8d 100644
--- a/src/main/java/blocks/Block_GDCUnit.java
+++ b/src/main/java/blocks/Block_GDCUnit.java
@@ -1,29 +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_GDCUnit extends Block {
-
- private static Block_GDCUnit instance = new Block_GDCUnit();
-
- private Block_GDCUnit() {
- // I am a singleton
- super(Material.iron);
- }
-
- public static Block_GDCUnit getInstance() {
- return instance;
- }
-
- public void registerBlock() {
- final String blockName = "kekztech_gdcceramicelectrolyteunit_block";
- super.setBlockName(blockName);
- super.setCreativeTab(CreativeTabs.tabMisc);
- super.setBlockTextureName(KekzCore.MODID + ":" + "GDCCeramicElectrolyteUnit");
- GameRegistry.registerBlock(getInstance(), blockName);
- }
-}
+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_GDCUnit extends Block {
+
+ private static Block_GDCUnit instance = new Block_GDCUnit();
+
+ private Block_GDCUnit() {
+ // I am a singleton
+ super(Material.iron);
+ }
+
+ public static Block_GDCUnit getInstance() {
+ return instance;
+ }
+
+ public void registerBlock() {
+ final String blockName = "kekztech_gdcceramicelectrolyteunit_block";
+ super.setBlockName(blockName);
+ super.setCreativeTab(CreativeTabs.tabMisc);
+ super.setBlockTextureName(KekzCore.MODID + ":" + "GDCCeramicElectrolyteUnit");
+ super.setHardness(5.0f);
+ super.setResistance(6.0f);
+ GameRegistry.registerBlock(getInstance(), blockName);
+ }
+}
diff --git a/src/main/java/blocks/Block_TFFTCasing.java b/src/main/java/blocks/Block_TFFTCasing.java
index eb47860418..f2011a8bae 100644
--- a/src/main/java/blocks/Block_TFFTCasing.java
+++ b/src/main/java/blocks/Block_TFFTCasing.java
@@ -1,29 +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_TFFTCasing extends Block {
-
- private static Block_TFFTCasing instance = new Block_TFFTCasing();
-
- private Block_TFFTCasing() {
- // I am a singleton
- super(Material.iron);
- }
-
- public static Block_TFFTCasing getInstance() {
- return instance;
- }
-
- public void registerBlock() {
- final String blockName = "kekztech_tfftcasing_block";
- super.setBlockName(blockName);
- super.setCreativeTab(CreativeTabs.tabMisc);
- super.setBlockTextureName(KekzCore.MODID + ":" + "TFFTCasing");
- GameRegistry.registerBlock(getInstance(), blockName);
- }
-}
+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_TFFTCasing extends Block {
+
+ private static Block_TFFTCasing instance = new Block_TFFTCasing();
+
+ private Block_TFFTCasing() {
+ // I am a singleton
+ super(Material.iron);
+ }
+
+ public static Block_TFFTCasing getInstance() {
+ return instance;
+ }
+
+ public void registerBlock() {
+ final String blockName = "kekztech_tfftcasing_block";
+ super.setBlockName(blockName);
+ super.setCreativeTab(CreativeTabs.tabMisc);
+ super.setBlockTextureName(KekzCore.MODID + ":" + "TFFTCasing");
+ super.setHardness(5.0f);
+ super.setResistance(6.0f);
+ GameRegistry.registerBlock(getInstance(), blockName);
+ }
+}
diff --git a/src/main/java/blocks/Block_TFFTStorageFieldBlockT1.java b/src/main/java/blocks/Block_TFFTStorageFieldBlockT1.java
index 9a94f06121..28d23eec73 100644
--- a/src/main/java/blocks/Block_TFFTStorageFieldBlockT1.java
+++ b/src/main/java/blocks/Block_TFFTStorageFieldBlockT1.java
@@ -1,31 +1,33 @@
-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_TFFTStorageFieldBlockT1 extends Block {
-
- private static Block_TFFTStorageFieldBlockT1 instance = new Block_TFFTStorageFieldBlockT1();
-
- private Block_TFFTStorageFieldBlockT1() {
- // I am a singleton
- super(Material.iron);
- }
-
- public static Block_TFFTStorageFieldBlockT1 getInstance() {
- return instance;
- }
-
- public void registerBlock() {
- final String blockName = "kekztech_tfftstoragefieldblock1_block";
- super.setBlockName(blockName);
- super.setCreativeTab(CreativeTabs.tabMisc);
- super.setBlockTextureName(KekzCore.MODID + ":" + "TFFTStorageFieldBlock1");
- GameRegistry.registerBlock(getInstance(), blockName);
- }
-
-
-}
+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_TFFTStorageFieldBlockT1 extends Block {
+
+ private static Block_TFFTStorageFieldBlockT1 instance = new Block_TFFTStorageFieldBlockT1();
+
+ private Block_TFFTStorageFieldBlockT1() {
+ // I am a singleton
+ super(Material.iron);
+ }
+
+ public static Block_TFFTStorageFieldBlockT1 getInstance() {
+ return instance;
+ }
+
+ public void registerBlock() {
+ final String blockName = "kekztech_tfftstoragefieldblock1_block";
+ super.setBlockName(blockName);
+ super.setCreativeTab(CreativeTabs.tabMisc);
+ super.setBlockTextureName(KekzCore.MODID + ":" + "TFFTStorageFieldBlock1");
+ super.setHardness(5.0f);
+ super.setResistance(6.0f);
+ GameRegistry.registerBlock(getInstance(), blockName);
+ }
+
+
+}
diff --git a/src/main/java/blocks/Block_TFFTStorageFieldBlockT2.java b/src/main/java/blocks/Block_TFFTStorageFieldBlockT2.java
index 965e06dc54..51ddd93a7b 100644
--- a/src/main/java/blocks/Block_TFFTStorageFieldBlockT2.java
+++ b/src/main/java/blocks/Block_TFFTStorageFieldBlockT2.java
@@ -1,29 +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_TFFTStorageFieldBlockT2 extends Block {
-
- private static Block_TFFTStorageFieldBlockT2 instance = new Block_TFFTStorageFieldBlockT2();
-
- private Block_TFFTStorageFieldBlockT2() {
- // I am a singleton
- super(Material.iron);
- }
-
- public static Block_TFFTStorageFieldBlockT2 getInstance() {
- return instance;
- }
-
- public void registerBlock() {
- final String blockName = "kekztech_tfftstoragefieldblock2_block";
- super.setBlockName(blockName);
- super.setCreativeTab(CreativeTabs.tabMisc);
- super.setBlockTextureName(KekzCore.MODID + ":" + "TFFTStorageFieldBlock2");
- GameRegistry.registerBlock(getInstance(), blockName);
- }
-}
+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_TFFTStorageFieldBlockT2 extends Block {
+
+ private static Block_TFFTStorageFieldBlockT2 instance = new Block_TFFTStorageFieldBlockT2();
+
+ private Block_TFFTStorageFieldBlockT2() {
+ // I am a singleton
+ super(Material.iron);
+ }
+
+ public static Block_TFFTStorageFieldBlockT2 getInstance() {
+ return instance;
+ }
+
+ public void registerBlock() {
+ final String blockName = "kekztech_tfftstoragefieldblock2_block";
+ super.setBlockName(blockName);
+ super.setCreativeTab(CreativeTabs.tabMisc);
+ super.setBlockTextureName(KekzCore.MODID + ":" + "TFFTStorageFieldBlock2");
+ super.setHardness(5.0f);
+ super.setResistance(6.0f);
+ GameRegistry.registerBlock(getInstance(), blockName);
+ }
+}
diff --git a/src/main/java/blocks/Block_TFFTStorageFieldBlockT3.java b/src/main/java/blocks/Block_TFFTStorageFieldBlockT3.java
index 79647c99b7..174812bc48 100644
--- a/src/main/java/blocks/Block_TFFTStorageFieldBlockT3.java
+++ b/src/main/java/blocks/Block_TFFTStorageFieldBlockT3.java
@@ -1,29 +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_TFFTStorageFieldBlockT3 extends Block {
-
- private static Block_TFFTStorageFieldBlockT3 instance = new Block_TFFTStorageFieldBlockT3();
-
- private Block_TFFTStorageFieldBlockT3() {
- // I am a singleton
- super(Material.iron);
- }
-
- public static Block_TFFTStorageFieldBlockT3 getInstance() {
- return instance;
- }
-
- public void registerBlock() {
- final String blockName = "kekztech_tfftstoragefieldblock3_block";
- super.setBlockName(blockName);
- super.setCreativeTab(CreativeTabs.tabMisc);
- super.setBlockTextureName(KekzCore.MODID + ":" + "TFFTStorageFieldBlock3");
- GameRegistry.registerBlock(getInstance(), blockName);
- }
-}
+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_TFFTStorageFieldBlockT3 extends Block {
+
+ private static Block_TFFTStorageFieldBlockT3 instance = new Block_TFFTStorageFieldBlockT3();
+
+ private Block_TFFTStorageFieldBlockT3() {
+ // I am a singleton
+ super(Material.iron);
+ }
+
+ public static Block_TFFTStorageFieldBlockT3 getInstance() {
+ return instance;
+ }
+
+ public void registerBlock() {
+ final String blockName = "kekztech_tfftstoragefieldblock3_block";
+ super.setBlockName(blockName);
+ super.setCreativeTab(CreativeTabs.tabMisc);
+ super.setBlockTextureName(KekzCore.MODID + ":" + "TFFTStorageFieldBlock3");
+ super.setHardness(5.0f);
+ super.setResistance(6.0f);
+ GameRegistry.registerBlock(getInstance(), blockName);
+ }
+}
diff --git a/src/main/java/blocks/Block_TFFTStorageFieldBlockT4.java b/src/main/java/blocks/Block_TFFTStorageFieldBlockT4.java
index 5dd20cabcf..0ea69237e6 100644
--- a/src/main/java/blocks/Block_TFFTStorageFieldBlockT4.java
+++ b/src/main/java/blocks/Block_TFFTStorageFieldBlockT4.java
@@ -1,29 +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_TFFTStorageFieldBlockT4 extends Block {
-
- private static Block_TFFTStorageFieldBlockT4 instance = new Block_TFFTStorageFieldBlockT4();
-
- private Block_TFFTStorageFieldBlockT4() {
- // I am a singleton
- super(Material.iron);
- }
-
- public static Block_TFFTStorageFieldBlockT4 getInstance() {
- return instance;
- }
-
- public void registerBlock() {
- final String blockName = "kekztech_tfftstoragefieldblock4_block";
- super.setBlockName(blockName);
- super.setCreativeTab(CreativeTabs.tabMisc);
- super.setBlockTextureName(KekzCore.MODID + ":" + "TFFTStorageFieldBlock4");
- GameRegistry.registerBlock(getInstance(), blockName);
- }
-}
+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_TFFTStorageFieldBlockT4 extends Block {
+
+ private static Block_TFFTStorageFieldBlockT4 instance = new Block_TFFTStorageFieldBlockT4();
+
+ private Block_TFFTStorageFieldBlockT4() {
+ // I am a singleton
+ super(Material.iron);
+ }
+
+ public static Block_TFFTStorageFieldBlockT4 getInstance() {
+ return instance;
+ }
+
+ public void registerBlock() {
+ final String blockName = "kekztech_tfftstoragefieldblock4_block";
+ super.setBlockName(blockName);
+ super.setCreativeTab(CreativeTabs.tabMisc);
+ super.setBlockTextureName(KekzCore.MODID + ":" + "TFFTStorageFieldBlock4");
+ super.setHardness(5.0f);
+ super.setResistance(6.0f);
+ GameRegistry.registerBlock(getInstance(), blockName);
+ }
+}
diff --git a/src/main/java/blocks/Block_YSZUnit.java b/src/main/java/blocks/Block_YSZUnit.java
index 1e4df40c67..a32b28e94d 100644
--- a/src/main/java/blocks/Block_YSZUnit.java
+++ b/src/main/java/blocks/Block_YSZUnit.java
@@ -1,29 +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_YSZUnit extends Block {
-
- private static Block_YSZUnit instance = new Block_YSZUnit();
-
- private Block_YSZUnit() {
- // I am a singleton
- super(Material.iron);
- }
-
- public static Block_YSZUnit getInstance() {
- return instance;
- }
-
- public void registerBlock() {
- final String blockName = "kekztech_yszceramicelectrolyteunit_block";
- super.setBlockName(blockName);
- super.setCreativeTab(CreativeTabs.tabMisc);
- super.setBlockTextureName(KekzCore.MODID + ":" + "YSZCeramicElectrolyteUnit");
- GameRegistry.registerBlock(getInstance(), blockName);
- }
-}
+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_YSZUnit extends Block {
+
+ private static Block_YSZUnit instance = new Block_YSZUnit();
+
+ private Block_YSZUnit() {
+ // I am a singleton
+ super(Material.iron);
+ }
+
+ public static Block_YSZUnit getInstance() {
+ return instance;
+ }
+
+ public void registerBlock() {
+ final String blockName = "kekztech_yszceramicelectrolyteunit_block";
+ super.setBlockName(blockName);
+ super.setCreativeTab(CreativeTabs.tabMisc);
+ super.setBlockTextureName(KekzCore.MODID + ":" + "YSZCeramicElectrolyteUnit");
+ super.setHardness(5.0f);
+ super.setResistance(6.0f);
+ GameRegistry.registerBlock(getInstance(), blockName);
+ }
+}
diff --git a/src/main/java/container/Container_ModularNuclearReactor.java b/src/main/java/container/Container_ModularNuclearReactor.java
index 41b686c901..a8fdd5f25a 100644
--- a/src/main/java/container/Container_ModularNuclearReactor.java
+++ b/src/main/java/container/Container_ModularNuclearReactor.java
@@ -1,70 +1,70 @@
-package container;
-
-import gregtech.api.gui.GT_Container_MultiMachine;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.entity.player.InventoryPlayer;
-import net.minecraft.inventory.IInventory;
-import net.minecraft.inventory.Slot;
-import reactor.ButtonSlot;
-import tileentities.GTMTE_ModularNuclearReactor;
-
-public class Container_ModularNuclearReactor extends GT_Container_MultiMachine {
-
- private final GTMTE_ModularNuclearReactor REACTOR_TILE;
- private final IInventory PLAYER_INVENTORY;
-
- private int nextSlotID = 0;
- private final Slot[] REACTOR_SLOTS = new Slot[54];
- private final Slot SLOT_CONFIGURATION;
- private final Slot BUTTON_EU_MODE;
- private final Slot BUTTON_FLUID_MODE;
- private final Slot BUTTON_CONDITION;
- private final Slot BUTTON_CONFIGURE;
- private final Slot BUTTON_RESET;
-
-
- public Container_ModularNuclearReactor(InventoryPlayer inventoryPlayer, IGregTechTileEntity reactorTile) {
-
- super(inventoryPlayer, reactorTile);
-
- this.REACTOR_TILE = (GTMTE_ModularNuclearReactor) reactorTile;
- this.PLAYER_INVENTORY = inventoryPlayer;
-
- // Add the reactor chamber
- for(int x = 0; x < 9; x++) {
- for(int y = 0; y < 6; y++){
- REACTOR_SLOTS[nextSlotID] = super.addSlotToContainer(new Slot(PLAYER_INVENTORY, getNextSlotID(), (16 + 67 * x), (16 + 67 * y)));
- }
- }
- // Add the configuration slot
- SLOT_CONFIGURATION = super.addSlotToContainer(new Slot(PLAYER_INVENTORY, getNextSlotID(), 0, 0));
-
- // Add buttons (they're also slots)
- BUTTON_EU_MODE = super.addSlotToContainer(new ButtonSlot(PLAYER_INVENTORY, getNextSlotID(), 0, 0));
- BUTTON_FLUID_MODE = super.addSlotToContainer(new ButtonSlot(PLAYER_INVENTORY, getNextSlotID(), 0, 0));
- BUTTON_CONDITION = super.addSlotToContainer(new ButtonSlot(PLAYER_INVENTORY, getNextSlotID(), 0, 0));
- BUTTON_CONFIGURE = super.addSlotToContainer(new ButtonSlot(PLAYER_INVENTORY, getNextSlotID(), 0, 0));
- BUTTON_RESET = super.addSlotToContainer(new ButtonSlot(PLAYER_INVENTORY, getNextSlotID(), 0, 0));
-
- }
-
- private int getNextSlotID() {
- nextSlotID++;
- return nextSlotID - 1;
- }
-
- @Override
- public boolean canInteractWith(EntityPlayer p_75145_1_) {
- return true;
- }
-
- @Override
- public void detectAndSendChanges() {
- super.detectAndSendChanges();
- if (REACTOR_TILE.getBaseMetaTileEntity().isServerSide() == false) {
- return;
- }
- }
-
-}
+package container;
+
+import gregtech.api.gui.GT_Container_MultiMachine;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.inventory.IInventory;
+import net.minecraft.inventory.Slot;
+import reactor.ButtonSlot;
+import tileentities.GTMTE_ModularNuclearReactor;
+
+public class Container_ModularNuclearReactor extends GT_Container_MultiMachine {
+
+ private final GTMTE_ModularNuclearReactor REACTOR_TILE;
+ private final IInventory PLAYER_INVENTORY;
+
+ private int nextSlotID = 0;
+ private final Slot[] REACTOR_SLOTS = new Slot[54];
+ private final Slot SLOT_CONFIGURATION;
+ private final Slot BUTTON_EU_MODE;
+ private final Slot BUTTON_FLUID_MODE;
+ private final Slot BUTTON_CONDITION;
+ private final Slot BUTTON_CONFIGURE;
+ private final Slot BUTTON_RESET;
+
+
+ public Container_ModularNuclearReactor(InventoryPlayer inventoryPlayer, IGregTechTileEntity reactorTile) {
+
+ super(inventoryPlayer, reactorTile);
+
+ this.REACTOR_TILE = (GTMTE_ModularNuclearReactor) reactorTile;
+ this.PLAYER_INVENTORY = inventoryPlayer;
+
+ // Add the reactor chamber
+ for(int x = 0; x < 9; x++) {
+ for(int y = 0; y < 6; y++){
+ REACTOR_SLOTS[nextSlotID] = super.addSlotToContainer(new Slot(PLAYER_INVENTORY, getNextSlotID(), (16 + 67 * x), (16 + 67 * y)));
+ }
+ }
+ // Add the configuration slot
+ SLOT_CONFIGURATION = super.addSlotToContainer(new Slot(PLAYER_INVENTORY, getNextSlotID(), 0, 0));
+
+ // Add buttons (they're also slots)
+ BUTTON_EU_MODE = super.addSlotToContainer(new ButtonSlot(PLAYER_INVENTORY, getNextSlotID(), 0, 0));
+ BUTTON_FLUID_MODE = super.addSlotToContainer(new ButtonSlot(PLAYER_INVENTORY, getNextSlotID(), 0, 0));
+ BUTTON_CONDITION = super.addSlotToContainer(new ButtonSlot(PLAYER_INVENTORY, getNextSlotID(), 0, 0));
+ BUTTON_CONFIGURE = super.addSlotToContainer(new ButtonSlot(PLAYER_INVENTORY, getNextSlotID(), 0, 0));
+ BUTTON_RESET = super.addSlotToContainer(new ButtonSlot(PLAYER_INVENTORY, getNextSlotID(), 0, 0));
+
+ }
+
+ private int getNextSlotID() {
+ nextSlotID++;
+ return nextSlotID - 1;
+ }
+
+ @Override
+ public boolean canInteractWith(EntityPlayer p_75145_1_) {
+ return true;
+ }
+
+ @Override
+ public void detectAndSendChanges() {
+ super.detectAndSendChanges();
+ if (REACTOR_TILE.getBaseMetaTileEntity().isServerSide() == false) {
+ return;
+ }
+ }
+
+}
diff --git a/src/main/java/container/GUIContainer_ModularNuclearReactor.java b/src/main/java/container/GUIContainer_ModularNuclearReactor.java
index 58a9ff6caf..9bea52badc 100644
--- a/src/main/java/container/GUIContainer_ModularNuclearReactor.java
+++ b/src/main/java/container/GUIContainer_ModularNuclearReactor.java
@@ -1,53 +1,53 @@
-package container;
-
-import org.lwjgl.opengl.GL11;
-
-import gregtech.api.gui.GT_GUIContainerMetaTile_Machine;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import kekztech.KekzCore;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.gui.GuiButton;
-import net.minecraft.entity.player.InventoryPlayer;
-import net.minecraft.util.ResourceLocation;
-
-public class GUIContainer_ModularNuclearReactor extends GT_GUIContainerMetaTile_Machine {
-
- private final String resourceName;
- private final ResourceLocation texture;
-
- public GUIContainer_ModularNuclearReactor(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity,
- String aName, String aTextureFile) {
-
- super(new Container_ModularNuclearReactor(aInventoryPlayer, aTileEntity), aTextureFile);
-
- this.resourceName = aTextureFile;
- this.texture = new ResourceLocation(KekzCore.MODID, "textures/gui/" + resourceName);
- }
-
- @SuppressWarnings("unchecked")
- @Override
- public void initGui() {
- super.initGui();
-
- // The parameters of GuiButton are (id, x, y, width, height, text)
- super.buttonList.add(new GuiButton(1, 100, 200, 100, 20, "Hello"));
- }
-
- @Override
- protected void drawGuiContainerBackgroundLayer(float f, int mouseX, int mouseY) {
-
- Minecraft.getMinecraft().renderEngine.bindTexture(texture);
- GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
-
- final int x = (super.width - super.xSize);
- final int y = (super.height - super.ySize);
-
- super.drawTexturedModalRect(x, y, 0, 0, super.xSize, super.ySize);
- }
-
- @Override
- protected void drawGuiContainerForegroundLayer(int par1, int par2) {
-
- }
-
-}
+package container;
+
+import org.lwjgl.opengl.GL11;
+
+import gregtech.api.gui.GT_GUIContainerMetaTile_Machine;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import kekztech.KekzCore;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.GuiButton;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.util.ResourceLocation;
+
+public class GUIContainer_ModularNuclearReactor extends GT_GUIContainerMetaTile_Machine {
+
+ private final String resourceName;
+ private final ResourceLocation texture;
+
+ public GUIContainer_ModularNuclearReactor(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity,
+ String aName, String aTextureFile) {
+
+ super(new Container_ModularNuclearReactor(aInventoryPlayer, aTileEntity), aTextureFile);
+
+ this.resourceName = aTextureFile;
+ this.texture = new ResourceLocation(KekzCore.MODID, "textures/gui/" + resourceName);
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public void initGui() {
+ super.initGui();
+
+ // The parameters of GuiButton are (id, x, y, width, height, text)
+ super.buttonList.add(new GuiButton(1, 100, 200, 100, 20, "Hello"));
+ }
+
+ @Override
+ protected void drawGuiContainerBackgroundLayer(float f, int mouseX, int mouseY) {
+
+ Minecraft.getMinecraft().renderEngine.bindTexture(texture);
+ GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
+
+ final int x = (super.width - super.xSize);
+ final int y = (super.height - super.ySize);
+
+ super.drawTexturedModalRect(x, y, 0, 0, super.xSize, super.ySize);
+ }
+
+ @Override
+ protected void drawGuiContainerForegroundLayer(int par1, int par2) {
+
+ }
+
+}
diff --git a/src/main/java/items/ErrorItem.java b/src/main/java/items/ErrorItem.java
index e622197565..0ab41873f1 100644
--- a/src/main/java/items/ErrorItem.java
+++ b/src/main/java/items/ErrorItem.java
@@ -1,43 +1,50 @@
-package items;
-
-import java.util.List;
-
-import cpw.mods.fml.common.registry.GameRegistry;
-import kekztech.KekzCore;
-import net.minecraft.creativetab.CreativeTabs;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.item.Item;
-import net.minecraft.item.ItemStack;
-
-public class ErrorItem extends Item {
-
- private static final ErrorItem instance = new ErrorItem();
-
- private ErrorItem() {
- // I am a singleton
- }
-
- public static ErrorItem getInstance() {
- return instance;
- }
-
- public void registerItem() {
- super.setHasSubtypes(false);
- final String unlocalizedName = "kekztech_error_item";
- super.setUnlocalizedName(unlocalizedName);
- super.setCreativeTab(CreativeTabs.tabMisc);
- super.setMaxStackSize(64);
- super.setTextureName(KekzCore.MODID + ":" + "Error");
- GameRegistry.registerItem(getInstance(), unlocalizedName);
- }
-
- @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("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");
- }
-
-}
+package items;
+
+import java.util.List;
+
+import cpw.mods.fml.common.registry.GameRegistry;
+import kekztech.KekzCore;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
+
+public class ErrorItem extends Item {
+
+ private static final ErrorItem instance = new ErrorItem();
+
+ private ErrorItem() {
+ // I am a singleton
+ }
+
+ public static ErrorItem getInstance() {
+ return instance;
+ }
+
+ public void registerItem() {
+ super.setHasSubtypes(false);
+ final String unlocalizedName = "kekztech_error_item";
+ super.setUnlocalizedName(unlocalizedName);
+ super.setCreativeTab(CreativeTabs.tabMisc);
+ super.setMaxStackSize(64);
+ super.setTextureName(KekzCore.MODID + ":" + "Error");
+ GameRegistry.registerItem(getInstance(), unlocalizedName);
+ }
+
+ @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("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");
+ }
+
+ @Override
+ public ItemStack onItemRightClick(ItemStack item, World world, EntityPlayer player) {
+ player.swingItem();
+ return item;
+ }
+
+}
diff --git a/src/main/java/items/MetaItem_CraftingComponent.java b/src/main/java/items/MetaItem_CraftingComponent.java
index 29b8e8ac1f..0d6a1897f0 100644
--- a/src/main/java/items/MetaItem_CraftingComponent.java
+++ b/src/main/java/items/MetaItem_CraftingComponent.java
@@ -1,103 +1,103 @@
-package items;
-
-import java.util.List;
-
-import cpw.mods.fml.common.registry.GameRegistry;
-import kekztech.KekzCore;
-import net.minecraft.client.renderer.texture.IIconRegister;
-import net.minecraft.creativetab.CreativeTabs;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.item.Item;
-import net.minecraft.item.ItemStack;
-import net.minecraft.util.IIcon;
-
-public class MetaItem_CraftingComponent extends Item {
-
- private static MetaItem_CraftingComponent instance = new MetaItem_CraftingComponent();
- private final IIcon[] icons = new IIcon[16];
-
- private MetaItem_CraftingComponent() {
- // I am a singleton
- }
-
- public static MetaItem_CraftingComponent getInstance() {
- return instance;
- }
-
- public void registerItem() {
- super.setHasSubtypes(true);
- final String unlocalizedName = "kekztech_crafting_item";
- super.setUnlocalizedName(unlocalizedName);
- super.setCreativeTab(CreativeTabs.tabMisc);
- super.setMaxStackSize(64);
- GameRegistry.registerItem(getInstance(), unlocalizedName);
- }
-
- @Override
- public void registerIcons(IIconRegister reg) {
- int counter = 0;
- // Raw heat pipes
- icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "CopperHeatPipe");
- icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "SilverHeatPipe");
- icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "BoronArsenideHeatPipe");
- icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "DiamondHeatPipe");
- // Dust
- icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "BoronArsenideDust");
- icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "IsotopicallyPureDiamondDust");
- icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "AmineCarbamateDust");
- // Crystal
- icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "BoronArsenideCrystal");
- icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "IsotopicallyPureDiamondCrystal");
- // Ceramics
- icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "YSZCeramicDust");
- icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "GDCCeramicDust");
- icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "YttriaDust");
- icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "ZirconiaDust");
- icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "CeriaDust");
- icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "YSZCeramicPlate");
- icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "GDCCeramicPlate");
- }
-
- @Override
- public IIcon getIconFromDamage(int meta) {
- return icons[meta];
- }
-
- @SuppressWarnings({"unchecked", "rawtypes"})
- @Override
- public void getSubItems(Item item, CreativeTabs tab, List list) {
- for(int i = 0; i < icons.length; i++) {
- list.add(new ItemStack(item, 1, i));
- }
- }
-
- @Override
- public String getUnlocalizedName(ItemStack stack) {
- return super.getUnlocalizedName() + "." + stack.getItemDamage();
- }
-
- @SuppressWarnings({"unchecked", "rawtypes"})
- @Override
- public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean b) {
- list.add("Crafting component for KekzTech things");
- }
-
- @Override
- public double getDurabilityForDisplay(ItemStack stack) {
- return 0.0d;
- }
-
- @Override
- public boolean showDurabilityBar(ItemStack stack) {
- return false;
- }
-
- public ItemStack getStackFromDamage(int meta) {
- return new ItemStack(getInstance(), 1, meta);
- }
-
- public ItemStack getStackOfAmountFromDamage(int meta, int amount) {
- return new ItemStack(getInstance(), amount, meta);
- }
-
-}
+package items;
+
+import java.util.List;
+
+import cpw.mods.fml.common.registry.GameRegistry;
+import kekztech.KekzCore;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.IIcon;
+
+public class MetaItem_CraftingComponent extends Item {
+
+ private static MetaItem_CraftingComponent instance = new MetaItem_CraftingComponent();
+ private final IIcon[] icons = new IIcon[16];
+
+ private MetaItem_CraftingComponent() {
+ // I am a singleton
+ }
+
+ public static MetaItem_CraftingComponent getInstance() {
+ return instance;
+ }
+
+ public void registerItem() {
+ super.setHasSubtypes(true);
+ final String unlocalizedName = "kekztech_crafting_item";
+ super.setUnlocalizedName(unlocalizedName);
+ super.setCreativeTab(CreativeTabs.tabMisc);
+ super.setMaxStackSize(64);
+ GameRegistry.registerItem(getInstance(), unlocalizedName);
+ }
+
+ @Override
+ public void registerIcons(IIconRegister reg) {
+ int counter = 0;
+ // Raw heat pipes
+ icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "CopperHeatPipe");
+ icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "SilverHeatPipe");
+ icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "BoronArsenideHeatPipe");
+ icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "DiamondHeatPipe");
+ // Dust
+ icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "BoronArsenideDust");
+ icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "IsotopicallyPureDiamondDust");
+ icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "AmineCarbamateDust");
+ // Crystal
+ icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "BoronArsenideCrystal");
+ icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "IsotopicallyPureDiamondCrystal");
+ // Ceramics
+ icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "YSZCeramicDust");
+ icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "GDCCeramicDust");
+ icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "YttriaDust");
+ icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "ZirconiaDust");
+ icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "CeriaDust");
+ icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "YSZCeramicPlate");
+ icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "GDCCeramicPlate");
+ }
+
+ @Override
+ public IIcon getIconFromDamage(int meta) {
+ return icons[meta];
+ }
+
+ @SuppressWarnings({"unchecked", "rawtypes"})
+ @Override
+ public void getSubItems(Item item, CreativeTabs tab, List list) {
+ for(int i = 0; i < icons.length; i++) {
+ list.add(new ItemStack(item, 1, i));
+ }
+ }
+
+ @Override
+ public String getUnlocalizedName(ItemStack stack) {
+ return super.getUnlocalizedName() + "." + stack.getItemDamage();
+ }
+
+ @SuppressWarnings({"unchecked", "rawtypes"})
+ @Override
+ public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean b) {
+ list.add("Crafting component for KekzTech things");
+ }
+
+ @Override
+ public double getDurabilityForDisplay(ItemStack stack) {
+ return 0.0d;
+ }
+
+ @Override
+ public boolean showDurabilityBar(ItemStack stack) {
+ return false;
+ }
+
+ public ItemStack getStackFromDamage(int meta) {
+ return new ItemStack(getInstance(), 1, meta);
+ }
+
+ public ItemStack getStackOfAmountFromDamage(int meta, int amount) {
+ return new ItemStack(getInstance(), amount, meta);
+ }
+
+}
diff --git a/src/main/java/items/MetaItem_ReactorComponent.java b/src/main/java/items/MetaItem_ReactorComponent.java
index 458de48a00..9a8d668a40 100644
--- a/src/main/java/items/MetaItem_ReactorComponent.java
+++ b/src/main/java/items/MetaItem_ReactorComponent.java
@@ -1,140 +1,140 @@
-package items;
-
-import java.util.List;
-
-import cpw.mods.fml.common.registry.GameRegistry;
-import kekztech.KekzCore;
-import net.minecraft.client.renderer.texture.IIconRegister;
-import net.minecraft.creativetab.CreativeTabs;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.item.Item;
-import net.minecraft.item.ItemStack;
-import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.util.IIcon;
-import reactor.items.CoolantCell;
-import reactor.items.FuelRod;
-import reactor.items.HeatExchanger;
-import reactor.items.HeatVent;
-import reactor.items.NeutronReflector;
-
-public class MetaItem_ReactorComponent extends Item {
-
- private static MetaItem_ReactorComponent instance = new MetaItem_ReactorComponent();
- private final IIcon[] icons = new IIcon[50];
-
- private MetaItem_ReactorComponent() {
- // I am a singleton
- }
-
- public static MetaItem_ReactorComponent getInstance() {
- return instance;
- }
-
- public void registerItem() {
- super.setHasSubtypes(true);
- final String unlocalizedName = "kekztech_reactor_item";
- super.setUnlocalizedName(unlocalizedName);
- super.setCreativeTab(CreativeTabs.tabMisc);
- super.setMaxStackSize(1);
- GameRegistry.registerItem(getInstance(), unlocalizedName);
- }
-
- @Override
- public void registerIcons(IIconRegister reg) {
- int counter = 0;
- for(String s : HeatVent.RESOURCE_NAMES) {
- icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + s);
- }
- for(String s : HeatExchanger.RESOURCE_NAME) {
- icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + s);
- }
- for(String s : FuelRod.RESOURCE_NAME) {
- icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + s);
- }
- for(String s : FuelRod.RESOURCE_NAME_DEPLETED) {
- icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + s);
- }
- for(String s : NeutronReflector.RESOURCE_NAME) {
- icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + s);
- }
- for(String s : CoolantCell.RESOURCE_NAME) {
- icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + s);
- }
- }
-
- @Override
- public IIcon getIconFromDamage(int meta) {
- return icons[meta];
- }
-
- @SuppressWarnings({"unchecked", "rawtypes"})
- @Override
- public void getSubItems(Item item, CreativeTabs tab, List list) {
- for(int i = 0; i < icons.length; i++) {
- list.add(new ItemStack(item, 1, i));
- }
- }
-
- @Override
- public String getUnlocalizedName(ItemStack stack) {
- return super.getUnlocalizedName() + "." + stack.getItemDamage();
- }
-
- @SuppressWarnings({"unchecked", "rawtypes"})
- @Override
- public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean b) {
- list.add("Part for the Modular Nuclear Reactor");
- }
-
- @Override
- public double getDurabilityForDisplay(ItemStack stack) {
- NBTTagCompound nbt = (stack.getTagCompound() == null) ? new NBTTagCompound() : stack.getTagCompound();
- if(nbt.getInteger("HEALTH") != 0 && nbt.getInteger("MAXHEALTH") != 0) {
- return 1 - (double) (nbt.getInteger("HEALTH") / nbt.getInteger("MAXHEALTH"));
- } else {
- return 0.0d;
- }
- }
-
- @Override
- public boolean showDurabilityBar(ItemStack stack) {
- final int meta = stack.getItemDamage();
- if(meta >= 31 && meta <= 45) {
- return false;
- } else {
- return true;
- }
- }
-
- public ItemStack getStackFromDamage(int meta) {
- return new ItemStack(getInstance(), 1, meta);
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-}
+package items;
+
+import java.util.List;
+
+import cpw.mods.fml.common.registry.GameRegistry;
+import kekztech.KekzCore;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.IIcon;
+import reactor.items.CoolantCell;
+import reactor.items.FuelRod;
+import reactor.items.HeatExchanger;
+import reactor.items.HeatVent;
+import reactor.items.NeutronReflector;
+
+public class MetaItem_ReactorComponent extends Item {
+
+ private static MetaItem_ReactorComponent instance = new MetaItem_ReactorComponent();
+ private final IIcon[] icons = new IIcon[50];
+
+ private MetaItem_ReactorComponent() {
+ // I am a singleton
+ }
+
+ public static MetaItem_ReactorComponent getInstance() {
+ return instance;
+ }
+
+ public void registerItem() {
+ super.setHasSubtypes(true);
+ final String unlocalizedName = "kekztech_reactor_item";
+ super.setUnlocalizedName(unlocalizedName);
+ super.setCreativeTab(CreativeTabs.tabMisc);
+ super.setMaxStackSize(1);
+ GameRegistry.registerItem(getInstance(), unlocalizedName);
+ }
+
+ @Override
+ public void registerIcons(IIconRegister reg) {
+ int counter = 0;
+ for(String s : HeatVent.RESOURCE_NAMES) {
+ icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + s);
+ }
+ for(String s : HeatExchanger.RESOURCE_NAME) {
+ icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + s);
+ }
+ for(String s : FuelRod.RESOURCE_NAME) {
+ icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + s);
+ }
+ for(String s : FuelRod.RESOURCE_NAME_DEPLETED) {
+ icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + s);
+ }
+ for(String s : NeutronReflector.RESOURCE_NAME) {
+ icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + s);
+ }
+ for(String s : CoolantCell.RESOURCE_NAME) {
+ icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + s);
+ }
+ }
+
+ @Override
+ public IIcon getIconFromDamage(int meta) {
+ return icons[meta];
+ }
+
+ @SuppressWarnings({"unchecked", "rawtypes"})
+ @Override
+ public void getSubItems(Item item, CreativeTabs tab, List list) {
+ for(int i = 0; i < icons.length; i++) {
+ list.add(new ItemStack(item, 1, i));
+ }
+ }
+
+ @Override
+ public String getUnlocalizedName(ItemStack stack) {
+ return super.getUnlocalizedName() + "." + stack.getItemDamage();
+ }
+
+ @SuppressWarnings({"unchecked", "rawtypes"})
+ @Override
+ public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean b) {
+ list.add("Part for the Modular Nuclear Reactor");
+ }
+
+ @Override
+ public double getDurabilityForDisplay(ItemStack stack) {
+ NBTTagCompound nbt = (stack.getTagCompound() == null) ? new NBTTagCompound() : stack.getTagCompound();
+ if(nbt.getInteger("HEALTH") != 0 && nbt.getInteger("MAXHEALTH") != 0) {
+ return 1 - (double) (nbt.getInteger("HEALTH") / nbt.getInteger("MAXHEALTH"));
+ } else {
+ return 0.0d;
+ }
+ }
+
+ @Override
+ public boolean showDurabilityBar(ItemStack stack) {
+ final int meta = stack.getItemDamage();
+ if(meta >= 31 && meta <= 45) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ public ItemStack getStackFromDamage(int meta) {
+ return new ItemStack(getInstance(), 1, meta);
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
diff --git a/src/main/java/kekztech/GTMultiController.java b/src/main/java/kekztech/GTMultiController.java
index d824077201..2138907faa 100644
--- a/src/main/java/kekztech/GTMultiController.java
+++ b/src/main/java/kekztech/GTMultiController.java
@@ -1,305 +1,305 @@
-package kekztech;
-
-import java.util.ArrayList;
-
-import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch;
-import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Dynamo;
-import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy;
-import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input;
-import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus;
-import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Maintenance;
-import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Muffler;
-import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output;
-import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_OutputBus;
-import gregtech.api.util.GT_Utility;
-import net.minecraft.item.ItemStack;
-import net.minecraftforge.fluids.FluidStack;
-
-/**
- * Only purpose of this class is to make me learn about GT multis :)
- * @author Kekzdealer
- *
- */
-public abstract class GTMultiController {
-
- private final GTRecipe GT_RECIPE = new GTRecipe();
-
- private boolean running = false;
- private boolean structureValid = false;
-
- public final ArrayList<GT_MetaTileEntity_Hatch_Dynamo> mDynamoHatches = new ArrayList<>();
- public final ArrayList<GT_MetaTileEntity_Hatch_Energy> mEnergyHatches = new ArrayList<>();
- public final ArrayList<GT_MetaTileEntity_Hatch_Input> mInputHatches = new ArrayList<>();
- public final ArrayList<GT_MetaTileEntity_Hatch_Output> mOutputHatches = new ArrayList<>();
- public final ArrayList<GT_MetaTileEntity_Hatch_InputBus> mInputBusses = new ArrayList<>();
- public final ArrayList<GT_MetaTileEntity_Hatch_OutputBus> mOutputBusses = new ArrayList<>();
- public final ArrayList<GT_MetaTileEntity_Hatch_Muffler> mMufflerHatches = new ArrayList<>();
- public final ArrayList<GT_MetaTileEntity_Hatch_Maintenance> mMaintenanceHatches = new ArrayList<>();
-
- protected GTRecipe getGT_RECIPE() {
- return GT_RECIPE;
- }
-
- protected abstract boolean checkStructure();
- protected abstract String[] getDescription();
-
- protected long getMaxInputVoltage() {
- long voltage = 0L;
- for(GT_MetaTileEntity_Hatch_Energy energyHatch : mEnergyHatches) {
- voltage += energyHatch.getBaseMetaTileEntity().getInputVoltage();
- }
- return voltage;
- }
-
- private void updateDynamoHatches() {
- if(GT_RECIPE.getEuPerTick() > 0) {
- long remOutput = GT_RECIPE.getEuPerTick();
- for(GT_MetaTileEntity_Hatch_Dynamo dynamoHatch : mDynamoHatches) {
- final long deltaCapacity = dynamoHatch.getBaseMetaTileEntity().getEUCapacity()
- - dynamoHatch.getBaseMetaTileEntity().getStoredEU();
- final long toOutput = Math.min(deltaCapacity, GT_RECIPE.getEuPerTick());
- dynamoHatch.getBaseMetaTileEntity().increaseStoredEnergyUnits(toOutput, false);
- remOutput -= toOutput;
- }
- }
- }
-
- private void updateEnergyHatches() {
- if(GT_RECIPE.getEuPerTick() < 0) {
- long remConsumption = GT_RECIPE.getEuPerTick();
- for(GT_MetaTileEntity_Hatch_Energy energyHatch : mEnergyHatches) {
- if(remConsumption > 0) {
- final long toConsume = Math.min(remConsumption, energyHatch.getBaseMetaTileEntity().getStoredEU());
- energyHatch.getBaseMetaTileEntity().decreaseStoredEnergyUnits(toConsume, false);
- remConsumption -= toConsume;
- }
- }
- }
- }
-
- private void updateInputBusses() {
- if(GT_RECIPE.getInputItems() != null) {
- // Check for each input stack...
- for(ItemStack inputStack : GT_RECIPE.getInputItems()) {
- int remainingRequired = inputStack.stackSize;
- // ...Each slot in each input bus...
- for(GT_MetaTileEntity_Hatch_InputBus inputBus : mInputBusses) {
- for(int slot = 0; slot <= inputBus.getBaseMetaTileEntity().getSizeInventory(); slot++) {
-
- final ItemStack slotStack = inputBus.getBaseMetaTileEntity().getStackInSlot(slot);
- if(GT_Utility.isStackValid(slotStack)) {
- if(GT_Utility.areStacksEqual(inputStack, slotStack)) {
- // Found correct slot
- final int toConsume = Math.min(slotStack.stackSize, inputStack.stackSize);
- final ItemStack retrievedStack = inputBus.getBaseMetaTileEntity().decrStackSize(slot, toConsume);
- }
- }
- }
- }
- }
- }
- }
-
- private void updateInputHatches() {
- if(GT_RECIPE.getInputFluids() != null) {
- // Check for each input stack
- for(FluidStack inputStack : GT_RECIPE.getInputFluids()) {
- int remainingRequired = inputStack.amount;
- // ...In each input hatch...
- for(GT_MetaTileEntity_Hatch_Input inputHatch : mInputHatches) {
-
- FluidStack slotStack = inputHatch.getFluid();
- if(slotStack.amount > 0 && slotStack.isFluidEqual(inputStack)) {
- // Found correct hatch
- final int toConsume = Math.min(slotStack.amount, remainingRequired);
- inputHatch.drain(toConsume, true);
- remainingRequired -= toConsume;
- }
- }
- }
- }
- }
-
- private void updateOutputBusses() {
- if(GT_RECIPE.getOutputItems() != null) {
-
- }
- }
-
- private void updateOutputHatches() {
- if(GT_RECIPE.getOutputFluids() != null) {
- // Find for each output stack...
- for(FluidStack outputStack : GT_RECIPE.getOutputFluids()) {
- // ...an output hatch that can accept the stack
- for(GT_MetaTileEntity_Hatch_Output outputHatch : mOutputHatches) {
-
- }
- }
- }
- }
-
- protected boolean tryAddHatch(IGregTechTileEntity hatch, int aBaseCasingIndex) {
- if (hatch == null) {
- return false;
- } else {
- final IMetaTileEntity aMetaTileEntity = hatch.getMetaTileEntity();
- if (aMetaTileEntity == null) {
- return false;
- } else {
- if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch) {
- ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex);
- }
-
- if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) {
- return this.mInputHatches.add((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity);
- } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_InputBus) {
- return this.mInputBusses.add((GT_MetaTileEntity_Hatch_InputBus) aMetaTileEntity);
- } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) {
- return this.mOutputHatches.add((GT_MetaTileEntity_Hatch_Output) aMetaTileEntity);
- } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_OutputBus) {
- return this.mOutputBusses.add((GT_MetaTileEntity_Hatch_OutputBus) aMetaTileEntity);
- } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Energy) {
- return this.mEnergyHatches.add((GT_MetaTileEntity_Hatch_Energy) aMetaTileEntity);
- } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Dynamo) {
- return this.mDynamoHatches.add((GT_MetaTileEntity_Hatch_Dynamo) aMetaTileEntity);
- } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Maintenance) {
- return this.mMaintenanceHatches.add((GT_MetaTileEntity_Hatch_Maintenance) aMetaTileEntity);
- } else {
- return aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Muffler
- ? this.mMufflerHatches.add((GT_MetaTileEntity_Hatch_Muffler) aMetaTileEntity)
- : false;
- }
- }
- }
- }
-
- protected boolean tryAddMaintenanceHatch(IGregTechTileEntity hatch, int aBaseCasingIndex) {
- if (hatch == null) {
- return false;
- } else {
- IMetaTileEntity aMetaTileEntity = hatch.getMetaTileEntity();
- if (aMetaTileEntity == null) {
- return false;
- } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Maintenance) {
- ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex);
- return this.mMaintenanceHatches.add((GT_MetaTileEntity_Hatch_Maintenance) aMetaTileEntity);
- } else {
- return false;
- }
- }
- }
-
- protected boolean tryAddEnergyHatch(IGregTechTileEntity hatch, int aBaseCasingIndex) {
- if (hatch == null) {
- return false;
- } else {
- IMetaTileEntity aMetaTileEntity = hatch.getMetaTileEntity();
- if (aMetaTileEntity == null) {
- return false;
- } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Energy) {
- ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex);
- return this.mEnergyHatches.add((GT_MetaTileEntity_Hatch_Energy) aMetaTileEntity);
- } else {
- return false;
- }
- }
- }
-
- protected boolean tryAddDynamoHatch(IGregTechTileEntity hatch, int aBaseCasingIndex) {
- if (hatch == null) {
- return false;
- } else {
- IMetaTileEntity aMetaTileEntity = hatch.getMetaTileEntity();
- if (aMetaTileEntity == null) {
- return false;
- } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Dynamo) {
- ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex);
- return this.mDynamoHatches.add((GT_MetaTileEntity_Hatch_Dynamo) aMetaTileEntity);
- } else {
- return false;
- }
- }
- }
-
- protected boolean tryAddMufflerHatch(IGregTechTileEntity hatch, int aBaseCasingIndex) {
- if (hatch == null) {
- return false;
- } else {
- IMetaTileEntity aMetaTileEntity = hatch.getMetaTileEntity();
- if (aMetaTileEntity == null) {
- return false;
- } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Muffler) {
- ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex);
- return this.mMufflerHatches.add((GT_MetaTileEntity_Hatch_Muffler) aMetaTileEntity);
- } else {
- return false;
- }
- }
- }
-
- protected boolean tryAddInputBus(IGregTechTileEntity hatch, int aBaseCasingIndex) {
- if (hatch == null) {
- return false;
- } else {
- IMetaTileEntity aMetaTileEntity = hatch.getMetaTileEntity();
- if (aMetaTileEntity == null) {
- return false;
- } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_InputBus) {
- ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex);
- return this.mInputBusses.add((GT_MetaTileEntity_Hatch_InputBus) aMetaTileEntity);
- } else {
- return false;
- }
- }
- }
-
- protected boolean tryAddInputHatch(IGregTechTileEntity hatch, int aBaseCasingIndex) {
- if (hatch == null) {
- return false;
- } else {
- IMetaTileEntity aMetaTileEntity = hatch.getMetaTileEntity();
- if (aMetaTileEntity == null) {
- return false;
- } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) {
- ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex);
- return this.mInputHatches.add((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity);
- } else {
- return false;
- }
- }
- }
-
- protected boolean tryAddOutputBus(IGregTechTileEntity hatch, int aBaseCasingIndex) {
- if (hatch == null) {
- return false;
- } else {
- IMetaTileEntity aMetaTileEntity = hatch.getMetaTileEntity();
- if (aMetaTileEntity == null) {
- return false;
- } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_OutputBus) {
- ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex);
- return this.mOutputBusses.add((GT_MetaTileEntity_Hatch_OutputBus) aMetaTileEntity);
- } else {
- return false;
- }
- }
- }
-
- protected boolean tryAddOutputHatch(IGregTechTileEntity hatch, int aBaseCasingIndex) {
- if (hatch == null) {
- return false;
- } else {
- IMetaTileEntity aMetaTileEntity = hatch.getMetaTileEntity();
- if (aMetaTileEntity == null) {
- return false;
- } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) {
- ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex);
- return this.mOutputHatches.add((GT_MetaTileEntity_Hatch_Output) aMetaTileEntity);
- } else {
- return false;
- }
- }
- }
-}
+package kekztech;
+
+import java.util.ArrayList;
+
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Dynamo;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Maintenance;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Muffler;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_OutputBus;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.FluidStack;
+
+/**
+ * Only purpose of this class is to make me learn about GT multis :)
+ * @author Kekzdealer
+ *
+ */
+public abstract class GTMultiController {
+
+ private final GTRecipe GT_RECIPE = new GTRecipe();
+
+ private boolean running = false;
+ private boolean structureValid = false;
+
+ public final ArrayList<GT_MetaTileEntity_Hatch_Dynamo> mDynamoHatches = new ArrayList<>();
+ public final ArrayList<GT_MetaTileEntity_Hatch_Energy> mEnergyHatches = new ArrayList<>();
+ public final ArrayList<GT_MetaTileEntity_Hatch_Input> mInputHatches = new ArrayList<>();
+ public final ArrayList<GT_MetaTileEntity_Hatch_Output> mOutputHatches = new ArrayList<>();
+ public final ArrayList<GT_MetaTileEntity_Hatch_InputBus> mInputBusses = new ArrayList<>();
+ public final ArrayList<GT_MetaTileEntity_Hatch_OutputBus> mOutputBusses = new ArrayList<>();
+ public final ArrayList<GT_MetaTileEntity_Hatch_Muffler> mMufflerHatches = new ArrayList<>();
+ public final ArrayList<GT_MetaTileEntity_Hatch_Maintenance> mMaintenanceHatches = new ArrayList<>();
+
+ protected GTRecipe getGT_RECIPE() {
+ return GT_RECIPE;
+ }
+
+ protected abstract boolean checkStructure();
+ protected abstract String[] getDescription();
+
+ protected long getMaxInputVoltage() {
+ long voltage = 0L;
+ for(GT_MetaTileEntity_Hatch_Energy energyHatch : mEnergyHatches) {
+ voltage += energyHatch.getBaseMetaTileEntity().getInputVoltage();
+ }
+ return voltage;
+ }
+
+ private void updateDynamoHatches() {
+ if(GT_RECIPE.getEuPerTick() > 0) {
+ long remOutput = GT_RECIPE.getEuPerTick();
+ for(GT_MetaTileEntity_Hatch_Dynamo dynamoHatch : mDynamoHatches) {
+ final long deltaCapacity = dynamoHatch.getBaseMetaTileEntity().getEUCapacity()
+ - dynamoHatch.getBaseMetaTileEntity().getStoredEU();
+ final long toOutput = Math.min(deltaCapacity, GT_RECIPE.getEuPerTick());
+ dynamoHatch.getBaseMetaTileEntity().increaseStoredEnergyUnits(toOutput, false);
+ remOutput -= toOutput;
+ }
+ }
+ }
+
+ private void updateEnergyHatches() {
+ if(GT_RECIPE.getEuPerTick() < 0) {
+ long remConsumption = GT_RECIPE.getEuPerTick();
+ for(GT_MetaTileEntity_Hatch_Energy energyHatch : mEnergyHatches) {
+ if(remConsumption > 0) {
+ final long toConsume = Math.min(remConsumption, energyHatch.getBaseMetaTileEntity().getStoredEU());
+ energyHatch.getBaseMetaTileEntity().decreaseStoredEnergyUnits(toConsume, false);
+ remConsumption -= toConsume;
+ }
+ }
+ }
+ }
+
+ private void updateInputBusses() {
+ if(GT_RECIPE.getInputItems() != null) {
+ // Check for each input stack...
+ for(ItemStack inputStack : GT_RECIPE.getInputItems()) {
+ int remainingRequired = inputStack.stackSize;
+ // ...Each slot in each input bus...
+ for(GT_MetaTileEntity_Hatch_InputBus inputBus : mInputBusses) {
+ for(int slot = 0; slot <= inputBus.getBaseMetaTileEntity().getSizeInventory(); slot++) {
+
+ final ItemStack slotStack = inputBus.getBaseMetaTileEntity().getStackInSlot(slot);
+ if(GT_Utility.isStackValid(slotStack)) {
+ if(GT_Utility.areStacksEqual(inputStack, slotStack)) {
+ // Found correct slot
+ final int toConsume = Math.min(slotStack.stackSize, inputStack.stackSize);
+ final ItemStack retrievedStack = inputBus.getBaseMetaTileEntity().decrStackSize(slot, toConsume);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ private void updateInputHatches() {
+ if(GT_RECIPE.getInputFluids() != null) {
+ // Check for each input stack
+ for(FluidStack inputStack : GT_RECIPE.getInputFluids()) {
+ int remainingRequired = inputStack.amount;
+ // ...In each input hatch...
+ for(GT_MetaTileEntity_Hatch_Input inputHatch : mInputHatches) {
+
+ FluidStack slotStack = inputHatch.getFluid();
+ if(slotStack.amount > 0 && slotStack.isFluidEqual(inputStack)) {
+ // Found correct hatch
+ final int toConsume = Math.min(slotStack.amount, remainingRequired);
+ inputHatch.drain(toConsume, true);
+ remainingRequired -= toConsume;
+ }
+ }
+ }
+ }
+ }
+
+ private void updateOutputBusses() {
+ if(GT_RECIPE.getOutputItems() != null) {
+
+ }
+ }
+
+ private void updateOutputHatches() {
+ if(GT_RECIPE.getOutputFluids() != null) {
+ // Find for each output stack...
+ for(FluidStack outputStack : GT_RECIPE.getOutputFluids()) {
+ // ...an output hatch that can accept the stack
+ for(GT_MetaTileEntity_Hatch_Output outputHatch : mOutputHatches) {
+
+ }
+ }
+ }
+ }
+
+ protected boolean tryAddHatch(IGregTechTileEntity hatch, int aBaseCasingIndex) {
+ if (hatch == null) {
+ return false;
+ } else {
+ final IMetaTileEntity aMetaTileEntity = hatch.getMetaTileEntity();
+ if (aMetaTileEntity == null) {
+ return false;
+ } else {
+ if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch) {
+ ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex);
+ }
+
+ if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) {
+ return this.mInputHatches.add((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity);
+ } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_InputBus) {
+ return this.mInputBusses.add((GT_MetaTileEntity_Hatch_InputBus) aMetaTileEntity);
+ } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) {
+ return this.mOutputHatches.add((GT_MetaTileEntity_Hatch_Output) aMetaTileEntity);
+ } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_OutputBus) {
+ return this.mOutputBusses.add((GT_MetaTileEntity_Hatch_OutputBus) aMetaTileEntity);
+ } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Energy) {
+ return this.mEnergyHatches.add((GT_MetaTileEntity_Hatch_Energy) aMetaTileEntity);
+ } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Dynamo) {
+ return this.mDynamoHatches.add((GT_MetaTileEntity_Hatch_Dynamo) aMetaTileEntity);
+ } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Maintenance) {
+ return this.mMaintenanceHatches.add((GT_MetaTileEntity_Hatch_Maintenance) aMetaTileEntity);
+ } else {
+ return aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Muffler
+ ? this.mMufflerHatches.add((GT_MetaTileEntity_Hatch_Muffler) aMetaTileEntity)
+ : false;
+ }
+ }
+ }
+ }
+
+ protected boolean tryAddMaintenanceHatch(IGregTechTileEntity hatch, int aBaseCasingIndex) {
+ if (hatch == null) {
+ return false;
+ } else {
+ IMetaTileEntity aMetaTileEntity = hatch.getMetaTileEntity();
+ if (aMetaTileEntity == null) {
+ return false;
+ } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Maintenance) {
+ ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex);
+ return this.mMaintenanceHatches.add((GT_MetaTileEntity_Hatch_Maintenance) aMetaTileEntity);
+ } else {
+ return false;
+ }
+ }
+ }
+
+ protected boolean tryAddEnergyHatch(IGregTechTileEntity hatch, int aBaseCasingIndex) {
+ if (hatch == null) {
+ return false;
+ } else {
+ IMetaTileEntity aMetaTileEntity = hatch.getMetaTileEntity();
+ if (aMetaTileEntity == null) {
+ return false;
+ } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Energy) {
+ ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex);
+ return this.mEnergyHatches.add((GT_MetaTileEntity_Hatch_Energy) aMetaTileEntity);
+ } else {
+ return false;
+ }
+ }
+ }
+
+ protected boolean tryAddDynamoHatch(IGregTechTileEntity hatch, int aBaseCasingIndex) {
+ if (hatch == null) {
+ return false;
+ } else {
+ IMetaTileEntity aMetaTileEntity = hatch.getMetaTileEntity();
+ if (aMetaTileEntity == null) {
+ return false;
+ } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Dynamo) {
+ ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex);
+ return this.mDynamoHatches.add((GT_MetaTileEntity_Hatch_Dynamo) aMetaTileEntity);
+ } else {
+ return false;
+ }
+ }
+ }
+
+ protected boolean tryAddMufflerHatch(IGregTechTileEntity hatch, int aBaseCasingIndex) {
+ if (hatch == null) {
+ return false;
+ } else {
+ IMetaTileEntity aMetaTileEntity = hatch.getMetaTileEntity();
+ if (aMetaTileEntity == null) {
+ return false;
+ } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Muffler) {
+ ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex);
+ return this.mMufflerHatches.add((GT_MetaTileEntity_Hatch_Muffler) aMetaTileEntity);
+ } else {
+ return false;
+ }
+ }
+ }
+
+ protected boolean tryAddInputBus(IGregTechTileEntity hatch, int aBaseCasingIndex) {
+ if (hatch == null) {
+ return false;
+ } else {
+ IMetaTileEntity aMetaTileEntity = hatch.getMetaTileEntity();
+ if (aMetaTileEntity == null) {
+ return false;
+ } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_InputBus) {
+ ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex);
+ return this.mInputBusses.add((GT_MetaTileEntity_Hatch_InputBus) aMetaTileEntity);
+ } else {
+ return false;
+ }
+ }
+ }
+
+ protected boolean tryAddInputHatch(IGregTechTileEntity hatch, int aBaseCasingIndex) {
+ if (hatch == null) {
+ return false;
+ } else {
+ IMetaTileEntity aMetaTileEntity = hatch.getMetaTileEntity();
+ if (aMetaTileEntity == null) {
+ return false;
+ } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) {
+ ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex);
+ return this.mInputHatches.add((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity);
+ } else {
+ return false;
+ }
+ }
+ }
+
+ protected boolean tryAddOutputBus(IGregTechTileEntity hatch, int aBaseCasingIndex) {
+ if (hatch == null) {
+ return false;
+ } else {
+ IMetaTileEntity aMetaTileEntity = hatch.getMetaTileEntity();
+ if (aMetaTileEntity == null) {
+ return false;
+ } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_OutputBus) {
+ ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex);
+ return this.mOutputBusses.add((GT_MetaTileEntity_Hatch_OutputBus) aMetaTileEntity);
+ } else {
+ return false;
+ }
+ }
+ }
+
+ protected boolean tryAddOutputHatch(IGregTechTileEntity hatch, int aBaseCasingIndex) {
+ if (hatch == null) {
+ return false;
+ } else {
+ IMetaTileEntity aMetaTileEntity = hatch.getMetaTileEntity();
+ if (aMetaTileEntity == null) {
+ return false;
+ } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) {
+ ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex);
+ return this.mOutputHatches.add((GT_MetaTileEntity_Hatch_Output) aMetaTileEntity);
+ } else {
+ return false;
+ }
+ }
+ }
+}
diff --git a/src/main/java/kekztech/GTRecipe.java b/src/main/java/kekztech/GTRecipe.java
index 2add4d3c0e..1939afc8ff 100644
--- a/src/main/java/kekztech/GTRecipe.java
+++ b/src/main/java/kekztech/GTRecipe.java
@@ -1,104 +1,104 @@
-package kekztech;
-
-import java.util.ArrayList;
-
-import net.minecraft.item.ItemStack;
-import net.minecraftforge.fluids.FluidStack;
-import util.Util;
-
-public class GTRecipe {
-
- private int euPerTick = 0;
- private int duration = 0;
-
- private ArrayList<ItemStack> inputItems;
- private ArrayList<FluidStack> inputFluids;
- private ArrayList<ItemStack> outputItems;
- private ArrayList<FluidStack> outputFluids;
-
- public int getEuPerTick() {
- return euPerTick;
- }
- public int getDuration() {
- return duration;
- }
- public ItemStack[] getInputItems() {
- return Util.toItemStackArray(inputItems);
- }
- public FluidStack[] getInputFluids() {
- return Util.toFluidStackArray(inputFluids);
- }
- public ItemStack[] getOutputItems() {
- return Util.toItemStackArray(outputItems);
- }
- public FluidStack[] getOutputFluids() {
- return Util.toFluidStackArray(outputFluids);
- }
- public ItemStack getInputItem() {
- final ItemStack[] s = Util.toItemStackArray(inputItems);
- return s[0];
- }
- public FluidStack getInputFluid() {
- final FluidStack[] s = Util.toFluidStackArray(inputFluids);
- return s[0];
- }
- public ItemStack getOutputItem() {
- final ItemStack[] s = Util.toItemStackArray(outputItems);
- return s[0];
- }
- public FluidStack getOutputFluid() {
- final FluidStack[] s = Util.toFluidStackArray(outputFluids);
- return s[0];
- }
-
- public GTRecipe addInputItem(ItemStack inputItem) {
- if(inputItems == null) {
- inputItems = new ArrayList<ItemStack>();
- inputItems.add(inputItem);
- } else {
- inputItems.add(inputItem);
- }
- return this;
- }
-
- public GTRecipe addOutputItem(ItemStack outputItem) {
- if(outputItems == null) {
- outputItems = new ArrayList<ItemStack>();
- outputItems.add(outputItem);
- } else {
- outputItems.add(outputItem);
- }
- return this;
- }
-
- public GTRecipe addInputFluid(FluidStack inputFluid) {
- if(inputFluids == null) {
- inputFluids = new ArrayList<FluidStack>();
- inputFluids.add(inputFluid);
- } else {
- inputFluids.add(inputFluid);
- }
- return this;
- }
-
- public GTRecipe addOutputFluid(FluidStack outputFluid) {
- if(outputFluids == null) {
- outputFluids = new ArrayList<FluidStack>();
- outputFluids.add(outputFluid);
- } else {
- outputFluids.add(outputFluid);
- }
- return this;
- }
-
- public GTRecipe setEUPerTick(int euPerTick) {
- this.euPerTick = euPerTick;
- return this;
- }
-
- public GTRecipe setDuration(int duration) {
- this.duration = duration;
- return this;
- }
-
-}
+package kekztech;
+
+import java.util.ArrayList;
+
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.FluidStack;
+import util.Util;
+
+public class GTRecipe {
+
+ private int euPerTick = 0;
+ private int duration = 0;
+
+ private ArrayList<ItemStack> inputItems;
+ private ArrayList<FluidStack> inputFluids;
+ private ArrayList<ItemStack> outputItems;
+ private ArrayList<FluidStack> outputFluids;
+
+ public int getEuPerTick() {
+ return euPerTick;
+ }
+ public int getDuration() {
+ return duration;
+ }
+ public ItemStack[] getInputItems() {
+ return Util.toItemStackArray(inputItems);
+ }
+ public FluidStack[] getInputFluids() {
+ return Util.toFluidStackArray(inputFluids);
+ }
+ public ItemStack[] getOutputItems() {
+ return Util.toItemStackArray(outputItems);
+ }
+ public FluidStack[] getOutputFluids() {
+ return Util.toFluidStackArray(outputFluids);
+ }
+ public ItemStack getInputItem() {
+ final ItemStack[] s = Util.toItemStackArray(inputItems);
+ return s[0];
+ }
+ public FluidStack getInputFluid() {
+ final FluidStack[] s = Util.toFluidStackArray(inputFluids);
+ return s[0];
+ }
+ public ItemStack getOutputItem() {
+ final ItemStack[] s = Util.toItemStackArray(outputItems);
+ return s[0];
+ }
+ public FluidStack getOutputFluid() {
+ final FluidStack[] s = Util.toFluidStackArray(outputFluids);
+ return s[0];
+ }
+
+ public GTRecipe addInputItem(ItemStack inputItem) {
+ if(inputItems == null) {
+ inputItems = new ArrayList<ItemStack>();
+ inputItems.add(inputItem);
+ } else {
+ inputItems.add(inputItem);
+ }
+ return this;
+ }
+
+ public GTRecipe addOutputItem(ItemStack outputItem) {
+ if(outputItems == null) {
+ outputItems = new ArrayList<ItemStack>();
+ outputItems.add(outputItem);
+ } else {
+ outputItems.add(outputItem);
+ }
+ return this;
+ }
+
+ public GTRecipe addInputFluid(FluidStack inputFluid) {
+ if(inputFluids == null) {
+ inputFluids = new ArrayList<FluidStack>();
+ inputFluids.add(inputFluid);
+ } else {
+ inputFluids.add(inputFluid);
+ }
+ return this;
+ }
+
+ public GTRecipe addOutputFluid(FluidStack outputFluid) {
+ if(outputFluids == null) {
+ outputFluids = new ArrayList<FluidStack>();
+ outputFluids.add(outputFluid);
+ } else {
+ outputFluids.add(outputFluid);
+ }
+ return this;
+ }
+
+ public GTRecipe setEUPerTick(int euPerTick) {
+ this.euPerTick = euPerTick;
+ return this;
+ }
+
+ public GTRecipe setDuration(int duration) {
+ this.duration = duration;
+ return this;
+ }
+
+}
diff --git a/src/main/java/kekztech/Items.java b/src/main/java/kekztech/Items.java
index 47708971c7..52539222e7 100644
--- a/src/main/java/kekztech/Items.java
+++ b/src/main/java/kekztech/Items.java
@@ -1,48 +1,48 @@
-package kekztech;
-
-public enum Items {
- // Heat Vents
- T1HeatVent(0), T2HeatVent(1), T3HeatVent(2), T4HeatVent(3),
- T1ComponentHeatVent(4), T2ComponentHeatVent(5), T3ComponentHeatVent(6), T4ComponentHeatVent(7),
- T1OverclockedHeatVent(8), T2OverclockedHeatVent(9), T3OverclockedHeatVent(10), T4OverclockedHeatVent(11),
- // Heat Exchanger
- T1HeatExchanger(12), T2HeatExchanger(13), T3HeatExchanger(14), T4HeatExchanger(15),
- // Fuel Rods
- UraniumFuelRod(16), UraniumDualFuelRod(17), UraniumQuadFuelRod(18),
- ThoriumFuelRod(19), ThoriumDualFuelRod(20), ThoriumQuadFuelRod(21),
- MOXFuelRod(22), MOXDualFuelRod(23), MOXQuadFuelRod(24),
- NaquadahFuelRod(25), NaquadahDualFuelRod(26), NaquadahQuadFuelRod(27),
- Th_MOXFuelRod(28), Th_MOXDualFuelRod(29), Th_MOXQuadFuelRod(30),
- // Depleted Fuel Rods
- DepletedUraniumFuelRod(31), DepletedUraniumDualFuelRod(32), DepletedUraniumQuadFuelRod(33),
- DepletedThoriumFuelRod(34), DepletedThoriumDualFuelRod(35), DepletedThoriumQuadFuelRod(36),
- DepletedMOXFuelRod(37), DepletedMOXDualFuelRod(38), DepletedMOXQuadFuelRod(39),
- DepletedNaquadahFuelRod(40), DepletedNaquadahDualFuelRod(41), DepletedNaquadahQuadFuelRod(42),
- Th_DepletedMOXFuelRod(43), Th_DepletedMOXDualFuelRod(44), Th_DepletedMOXQuadFuelRod(45),
- // Neutron Reflectors
- T1NeutronReflector(46), T2NeutronReflector(47),
- // Coolant Cells
- HeliumCoolantCell360k(48), NaKCoolantCell360k(49),
-
- // Heat Pipes
- CopperHeatPipe(0), SilverHeatPipe(1), BoronArsenideHeatPipe(2), DiamondHeatPipe(3),
- BoronArsenideDust(4), IsotopicallyPureDiamondDust(5), AmineCarbamiteDust(6),
- BoronArsenideCrystal(7), IsotopicallyPureDiamondCrystal(8),
- // Ceramics
- YSZCeramicDust(9), GDCCeramicDust(10),
- YttriaDust(11), ZirconiaDust(12), CeriaDust(13),
- YSZCeramicPlate(14), GDCCeramicPlate(15),
- // Error Item
- Error(0);
-
- private final int metaID;
-
- private Items(int metaID) {
- this.metaID = metaID;
- }
-
- public int getMetaID() {
- return metaID;
- }
-
-}
+package kekztech;
+
+public enum Items {
+ // Heat Vents
+ T1HeatVent(0), T2HeatVent(1), T3HeatVent(2), T4HeatVent(3),
+ T1ComponentHeatVent(4), T2ComponentHeatVent(5), T3ComponentHeatVent(6), T4ComponentHeatVent(7),
+ T1OverclockedHeatVent(8), T2OverclockedHeatVent(9), T3OverclockedHeatVent(10), T4OverclockedHeatVent(11),
+ // Heat Exchanger
+ T1HeatExchanger(12), T2HeatExchanger(13), T3HeatExchanger(14), T4HeatExchanger(15),
+ // Fuel Rods
+ UraniumFuelRod(16), UraniumDualFuelRod(17), UraniumQuadFuelRod(18),
+ ThoriumFuelRod(19), ThoriumDualFuelRod(20), ThoriumQuadFuelRod(21),
+ MOXFuelRod(22), MOXDualFuelRod(23), MOXQuadFuelRod(24),
+ NaquadahFuelRod(25), NaquadahDualFuelRod(26), NaquadahQuadFuelRod(27),
+ Th_MOXFuelRod(28), Th_MOXDualFuelRod(29), Th_MOXQuadFuelRod(30),
+ // Depleted Fuel Rods
+ DepletedUraniumFuelRod(31), DepletedUraniumDualFuelRod(32), DepletedUraniumQuadFuelRod(33),
+ DepletedThoriumFuelRod(34), DepletedThoriumDualFuelRod(35), DepletedThoriumQuadFuelRod(36),
+ DepletedMOXFuelRod(37), DepletedMOXDualFuelRod(38), DepletedMOXQuadFuelRod(39),
+ DepletedNaquadahFuelRod(40), DepletedNaquadahDualFuelRod(41), DepletedNaquadahQuadFuelRod(42),
+ Th_DepletedMOXFuelRod(43), Th_DepletedMOXDualFuelRod(44), Th_DepletedMOXQuadFuelRod(45),
+ // Neutron Reflectors
+ T1NeutronReflector(46), T2NeutronReflector(47),
+ // Coolant Cells
+ HeliumCoolantCell360k(48), NaKCoolantCell360k(49),
+
+ // Heat Pipes
+ CopperHeatPipe(0), SilverHeatPipe(1), BoronArsenideHeatPipe(2), DiamondHeatPipe(3),
+ BoronArsenideDust(4), IsotopicallyPureDiamondDust(5), AmineCarbamiteDust(6),
+ BoronArsenideCrystal(7), IsotopicallyPureDiamondCrystal(8),
+ // Ceramics
+ YSZCeramicDust(9), GDCCeramicDust(10),
+ YttriaDust(11), ZirconiaDust(12), CeriaDust(13),
+ YSZCeramicPlate(14), GDCCeramicPlate(15),
+ // Error Item
+ Error(0);
+
+ private final int metaID;
+
+ private Items(int metaID) {
+ this.metaID = metaID;
+ }
+
+ public int getMetaID() {
+ return metaID;
+ }
+
+}
diff --git a/src/main/java/kekztech/KekzCore.java b/src/main/java/kekztech/KekzCore.java
index e84b428219..5eb2916e02 100644
--- a/src/main/java/kekztech/KekzCore.java
+++ b/src/main/java/kekztech/KekzCore.java
@@ -1,355 +1,333 @@
-package kekztech;
-
-import blocks.Block_GDCUnit;
-import blocks.Block_TFFTCasing;
-import blocks.Block_TFFTStorageFieldBlockT1;
-import blocks.Block_TFFTStorageFieldBlockT2;
-import blocks.Block_TFFTStorageFieldBlockT3;
-import blocks.Block_TFFTStorageFieldBlockT4;
-import blocks.Block_YSZUnit;
-import cpw.mods.fml.common.Mod;
-import cpw.mods.fml.common.event.FMLInitializationEvent;
-import cpw.mods.fml.common.event.FMLPostInitializationEvent;
-import cpw.mods.fml.common.event.FMLPreInitializationEvent;
-import gregtech.api.enums.GT_Values;
-import gregtech.api.enums.ItemList;
-import gregtech.api.enums.Materials;
-import gregtech.api.enums.OrePrefixes;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
-import items.ErrorItem;
-import items.MetaItem_CraftingComponent;
-import items.MetaItem_ReactorComponent;
-import net.minecraft.item.ItemStack;
-import net.minecraftforge.fluids.FluidRegistry;
-import tileentities.GTMTE_FluidMultiStorage;
-import tileentities.GTMTE_ModularNuclearReactor;
-import tileentities.GTMTE_SOFuelCellMK1;
-import tileentities.GTMTE_SOFuelCellMK2;
-import util.Util;
-
-@Mod(modid = KekzCore.MODID, name = KekzCore.NAME, version = KekzCore.VERSION,
- dependencies = "required-after:IC2; "
- + "required-after:gregtech"
- )
-public class KekzCore {
-
- public static final String NAME = "KekzTech";
- public static final String MODID = "kekztech";
- public static final String VERSION = "0.1a";
-
- private GTMTE_SOFuelCellMK1 sofc1;
- private GTMTE_SOFuelCellMK2 sofc2;
- private GTMTE_ModularNuclearReactor mdr;
- private GTMTE_FluidMultiStorage fms;
-
- @Mod.Instance("kekztech")
- public static KekzCore instance;
-
- @Mod.EventHandler
- public void preInit(FMLPreInitializationEvent event) {
- // Items
- ErrorItem.getInstance().registerItem();
- MetaItem_ReactorComponent.getInstance().registerItem();
- MetaItem_CraftingComponent.getInstance().registerItem();
- // Blocks
- Block_YSZUnit.getInstance().registerBlock();
- Block_GDCUnit.getInstance().registerBlock();
- Block_TFFTCasing.getInstance().registerBlock();
- Block_TFFTStorageFieldBlockT1.getInstance().registerBlock();
- Block_TFFTStorageFieldBlockT2.getInstance().registerBlock();
- Block_TFFTStorageFieldBlockT3.getInstance().registerBlock();
- Block_TFFTStorageFieldBlockT4.getInstance().registerBlock();
- }
-
- @Mod.EventHandler
- public void init(FMLInitializationEvent event ) {
- sofc1 = new GTMTE_SOFuelCellMK1(5000, "multimachine.fuelcellmk1", "Solid-Oxide Fuel Cell Mk I");
- sofc2 = new GTMTE_SOFuelCellMK2(5001, "multimachine.fuelcellmk2", "Solid-Oxide Fuel Cell Mk II");
- mdr = new GTMTE_ModularNuclearReactor(5002, "multimachine.nuclearreactor", "Nuclear Reactor");
- fms = new GTMTE_FluidMultiStorage(5003, "multimachine.tf_fluidtank", "T.F.F.T");
-
- }
-
- @Mod.EventHandler
- public void postInit(FMLPostInitializationEvent event) {
- System.out.println("Registering KekzTech recipes...");
-
- final MetaItem_CraftingComponent craftingItem = MetaItem_CraftingComponent.getInstance();
- final MetaItem_ReactorComponent reactorItem = MetaItem_ReactorComponent.getInstance();
-
- // Multiblock Controllers
- final Object[] mk1_recipe = {
- "CCC", "PHP", "FBL",
- 'C', OrePrefixes.circuit.get(Materials.Advanced),
- 'P', ItemList.Electric_Pump_HV.get(1L, (Object[]) null),
- 'H', ItemList.Hull_HV.get(1L, (Object[]) null),
- 'F', GT_OreDictUnificator.get(OrePrefixes.pipeSmall, Materials.StainlessSteel, 1),
- 'B', GT_OreDictUnificator.get(OrePrefixes.cableGt02, Materials.Gold, 1),
- 'L', GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.StainlessSteel, 1)
- };
- GT_ModHandler.addCraftingRecipe(sofc1.getStackForm(1), mk1_recipe);
- final Object[] mk2_recipe = {
- "CCC", "PHP", "FBL",
- 'C', OrePrefixes.circuit.get(Materials.Master),
- 'P', ItemList.Electric_Pump_IV.get(1L, (Object[]) null),
- 'H', ItemList.Hull_IV.get(1L, (Object[]) null),
- 'F', GT_OreDictUnificator.get(OrePrefixes.pipeSmall, Materials.Ultimate, 1),
- 'B', Util.getStackofAmountFromOreDict("wireGt04SuperconductorEV", 1),
- 'L', GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Ultimate, 1)
- };
- GT_ModHandler.addCraftingRecipe(sofc2.getStackForm(1), mk2_recipe);
- final Object[] tfft_recipe = {
- "HFH", "PVP", "CFC",
- 'H', OrePrefixes.pipeMedium.get(Materials.StainlessSteel),
- 'F', ItemList.Field_Generator_LV.get(1L, (Object[]) null),
- 'P', ItemList.Electric_Pump_HV.get(1L, (Object[]) null),
- 'V', OrePrefixes.rotor.get(Materials.VibrantAlloy),
- 'C', OrePrefixes.circuit.get(Materials.Advanced)
- };
- GT_ModHandler.addCraftingRecipe(fms.getStackForm(1), tfft_recipe);
-
- // Ceramic Electrolyte Units
- final ItemStack[] yszUnit = {
- GT_Utility.getIntegratedCircuit(6),
- craftingItem.getStackOfAmountFromDamage(Items.YSZCeramicPlate.getMetaID(), 4),
- GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Yttrium, 1),
- GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.StainlessSteel, 1),
- ItemList.Electric_Motor_HV.get(1L, (Object[]) null),
- };
- GT_Values.RA.addAssemblerRecipe(
- yszUnit,
- Materials.Hydrogen.getGas(4000),
- new ItemStack(Block_YSZUnit.getInstance(), 1),
- 1200, 480);
- final ItemStack[] gdcUnit = {
- GT_Utility.getIntegratedCircuit(6),
- craftingItem.getStackOfAmountFromDamage(Items.GDCCeramicPlate.getMetaID(), 8),
- GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Gadolinium, new ItemStack(ErrorItem.getInstance(), 1), 1),
- GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.Desh, new ItemStack(ErrorItem.getInstance(), 1), 1),
- ItemList.Electric_Motor_IV.get(1L, (Object[]) null),
- };
- GT_Values.RA.addAssemblerRecipe(
- gdcUnit,
- Materials.Hydrogen.getGas(16000),
- new ItemStack(Block_GDCUnit.getInstance(), 1),
- 2400, 1920);
-
- // T.F.F.T Structure blocks
- final ItemStack[] tfftcasing = {
- GT_Utility.getIntegratedCircuit(6),
- GT_OreDictUnificator.get(OrePrefixes.plate, Materials.DarkSteel, 3),
- GT_OreDictUnificator.get(OrePrefixes.plate, Materials.EnderPearl, 3),
- GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.StainlessSteel, 1),
- };
- GT_Values.RA.addAssemblerRecipe(
- tfftcasing,
- FluidRegistry.getFluidStack("molten.polytetrafluoroethylene", 144),
- new ItemStack(Block_TFFTCasing.getInstance(), 1),
- 200, 256);
- final ItemStack[] tfftstoragefield1 = {
- GT_Utility.getIntegratedCircuit(6),
- GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Basic, 4),
- GT_OreDictUnificator.get(OrePrefixes.plate, Materials.PulsatingIron, 1),
- GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Steel, 1),
- ItemList.Electric_Pump_LV.get(1L, (Object[]) null)
- };
- GT_Values.RA.addAssemblerRecipe(
- tfftstoragefield1,
- FluidRegistry.getFluidStack("molten.glass", 144),
- new ItemStack(Block_TFFTStorageFieldBlockT1.getInstance(), 1),
- 200, 256);
- final ItemStack[] tfftstoragefield2 = {
- GT_Utility.getIntegratedCircuit(6),
- GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Good, 4),
- GT_OreDictUnificator.get(OrePrefixes.plate, Materials.PulsatingIron, 4),
- GT_OreDictUnificator.get(OrePrefixes.pipeHuge, Materials.StainlessSteel, 1),
- ItemList.Electric_Pump_MV.get(1L, (Object[]) null)
- };
- GT_Values.RA.addAssemblerRecipe(
- tfftstoragefield2,
- FluidRegistry.getFluidStack("molten.plastic", 144),
- new ItemStack(Block_TFFTStorageFieldBlockT2.getInstance(), 1),
- 200, 480);
- final ItemStack[] tfftstoragefield3 = {
- GT_Utility.getIntegratedCircuit(6),
- GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Advanced, 4),
- GT_OreDictUnificator.get(OrePrefixes.plate, Materials.VibrantAlloy, 2),
- GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Titanium, 1),
- ItemList.Field_Generator_LV.get(1L, (Object[]) null),
- ItemList.Electric_Pump_HV.get(1L, (Object[]) null)
- };
- GT_Values.RA.addAssemblerRecipe(
- tfftstoragefield3,
- FluidRegistry.getFluidStack("molten.epoxid", 576),
- new ItemStack(Block_TFFTStorageFieldBlockT3.getInstance(), 1),
- 300, 1920);
- final ItemStack[] tfftstoragefield4 = {
- GT_Utility.getIntegratedCircuit(6),
- GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Elite, 4),
- GT_OreDictUnificator.get(OrePrefixes.plateTriple, Materials.NiobiumTitanium, 1),
- GT_OreDictUnificator.get(OrePrefixes.pipeHuge, Materials.TungstenSteel, 1),
- ItemList.Field_Generator_HV.get(1L, (Object[]) null),
- ItemList.Electric_Pump_EV.get(1L, (Object[]) null)
- };
- GT_Values.RA.addAssemblerRecipe(
- tfftstoragefield4,
- FluidRegistry.getFluidStack("molten.epoxid", 1152),
- new ItemStack(Block_TFFTStorageFieldBlockT4.getInstance(), 1),
- 400, 4098);
-
- // Ceramic plates
- GT_Values.RA.addAlloySmelterRecipe(
- craftingItem.getStackOfAmountFromDamage(Items.YSZCeramicDust.getMetaID(), 10),
- ItemList.Shape_Mold_Plate.get(1, (Object[]) null),
- craftingItem.getStackOfAmountFromDamage(Items.YSZCeramicPlate.getMetaID(), 1),
- 400, 480);
- GT_Values.RA.addFormingPressRecipe(
- craftingItem.getStackOfAmountFromDamage(Items.GDCCeramicDust.getMetaID(), 10),
- ItemList.Shape_Mold_Plate.get(1, (Object[]) null),
- craftingItem.getStackOfAmountFromDamage(Items.GDCCeramicPlate.getMetaID(), 1),
- 800, 480);
-
- // Dusts
- GT_Values.RA.addMixerRecipe(Materials.Boron.getDust(1), Materials.Arsenic.getDust(1), GT_Utility.getIntegratedCircuit(6), null,
- null, null, craftingItem.getStackOfAmountFromDamage(Items.BoronArsenideDust.getMetaID(), 2),
- 100, 1920);
- GT_Values.RA.addChemicalRecipe(
- Materials.Ammonia.getCells(2),
- Materials.CarbonDioxide.getCells(1),
- null,
- null,
- craftingItem.getStackOfAmountFromDamage(Items.AmineCarbamiteDust.getMetaID(), 1),
- Util.getStackofAmountFromOreDict("cellEmpty", 3),
- 400, 30);
- GT_Values.RA.addChemicalRecipe(
- craftingItem.getStackOfAmountFromDamage(Items.AmineCarbamiteDust.getMetaID(), 1),
- Materials.Diamond.getDust(16),
- Materials.CarbonDioxide.getGas(1000),
- null,
- craftingItem.getStackOfAmountFromDamage(Items.IsotopicallyPureDiamondDust.getMetaID(), 1),
- null, 1200, 480);
- GT_Values.RA.addChemicalRecipe(
- Materials.Yttrium.getDust(1), GT_Utility.getIntegratedCircuit(6), Materials.Oxygen.getGas(3000),
- null, craftingItem.getStackOfAmountFromDamage(Items.YttriaDust.getMetaID(), 1), null,
- 400, 30);
- GT_Values.RA.addChemicalRecipe(
- Util.getStackofAmountFromOreDict("dustZirconium", 1), GT_Utility.getIntegratedCircuit(6), Materials.Oxygen.getGas(2000),
- null, craftingItem.getStackOfAmountFromDamage(Items.ZirconiaDust.getMetaID(), 1), null,
- 400, 30);
- GT_Values.RA.addChemicalRecipe(
- Materials.Cerium.getDust(2), GT_Utility.getIntegratedCircuit(6), Materials.Oxygen.getGas(3000),
- null, craftingItem.getStackOfAmountFromDamage(Items.CeriaDust.getMetaID(), 2), null,
- 400, 30);
- GT_Values.RA.addMixerRecipe(
- craftingItem.getStackOfAmountFromDamage(Items.YttriaDust.getMetaID(), 1),
- craftingItem.getStackOfAmountFromDamage(Items.ZirconiaDust.getMetaID(), 5),
- GT_Utility.getIntegratedCircuit(6), null, null, null,
- craftingItem.getStackOfAmountFromDamage(Items.YSZCeramicDust.getMetaID(), 6),
- 400, 96);
- GT_Values.RA.addMixerRecipe(
- GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gadolinium, new ItemStack(ErrorItem.getInstance(), 1), 1),
- craftingItem.getStackOfAmountFromDamage(Items.CeriaDust.getMetaID(), 9),
- GT_Utility.getIntegratedCircuit(6), null, null, null,
- craftingItem.getStackOfAmountFromDamage(Items.GDCCeramicDust.getMetaID(), 10),
- 400, 1920);
-
- // Crystals
- GT_Values.RA.addAutoclaveRecipe(
- craftingItem.getStackOfAmountFromDamage(Items.IsotopicallyPureDiamondDust.getMetaID(), 4),
- Materials.CarbonDioxide.getGas(16000),
- craftingItem.getStackOfAmountFromDamage(Items.IsotopicallyPureDiamondCrystal.getMetaID(), 1), 10000, 2400, 7680);
- GT_Values.RA.addAutoclaveRecipe(
- craftingItem.getStackOfAmountFromDamage(Items.IsotopicallyPureDiamondDust.getMetaID(), 4),
- Materials.CarbonDioxide.getGas(16000),
- craftingItem.getStackOfAmountFromDamage(Items.IsotopicallyPureDiamondCrystal.getMetaID(), 1), 10000, 2400, 1920);
-
- // Heat Pipes
- GT_Values.RA.addLatheRecipe(
- GT_OreDictUnificator.get(OrePrefixes.stick, Materials.AnnealedCopper, 1),
- craftingItem.getStackFromDamage(Items.CopperHeatPipe.getMetaID()),
- null, 120, 120);
- GT_Values.RA.addLatheRecipe(
- GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Silver, 1),
- craftingItem.getStackFromDamage(Items.SilverHeatPipe.getMetaID()),
- null, 120, 480);
- GT_Values.RA.addLatheRecipe(
- craftingItem.getStackOfAmountFromDamage(Items.BoronArsenideCrystal.getMetaID(), 4),
- craftingItem.getStackFromDamage(Items.BoronArsenideHeatPipe.getMetaID()),
- null, 1200, 1920);
- GT_Values.RA.addLatheRecipe(
- craftingItem.getStackOfAmountFromDamage(Items.IsotopicallyPureDiamondCrystal.getMetaID(), 4),
- craftingItem.getStackFromDamage(Items.DiamondHeatPipe.getMetaID()),
- null, 1200, 7680);
-
- // Heat Vents
- final ItemStack[] t1HeatVent = {
- craftingItem.getStackOfAmountFromDamage(Items.CopperHeatPipe.getMetaID(), 2),
- ItemList.Electric_Motor_MV.get(1L, (Object[]) null),
- GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.Steel, new ItemStack(ErrorItem.getInstance(), 1), 1),
- GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Steel, new ItemStack(ErrorItem.getInstance(), 1), 2),
- GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Steel, new ItemStack(ErrorItem.getInstance(), 1), 8),
- GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Good, 1),
- GT_Utility.getIntegratedCircuit(6)
- };
- GT_Values.RA.addAssemblerRecipe(
- t1HeatVent,
- FluidRegistry.getFluidStack("molten.copper", 144),
- reactorItem.getStackFromDamage(Items.T1HeatVent.getMetaID()),
- 200, 120);
- final ItemStack[] t2HeatVent = {
- craftingItem.getStackOfAmountFromDamage(Items.SilverHeatPipe.getMetaID(), 2),
- ItemList.Electric_Motor_HV.get(1L, (Object[]) null),
- GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.Aluminium, new ItemStack(ErrorItem.getInstance(), 1), 1),
- GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Aluminium, new ItemStack(ErrorItem.getInstance(), 1), 2),
- GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Aluminium, new ItemStack(ErrorItem.getInstance(), 1), 8),
- GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Advanced, 1),
- GT_Utility.getIntegratedCircuit(6)
- };
- GT_Values.RA.addAssemblerRecipe(
- t2HeatVent,
- FluidRegistry.getFluidStack("molten.silver", 144),
- reactorItem.getStackFromDamage(Items.T2HeatVent.getMetaID()),
- 400, 480);
- final ItemStack[] t3HeatVent = {
- craftingItem.getStackOfAmountFromDamage(Items.BoronArsenideHeatPipe.getMetaID(), 2),
- ItemList.Electric_Motor_IV.get(1L, (Object[]) null),
- GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.TungstenSteel, new ItemStack(ErrorItem.getInstance(), 1), 1),
- GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.TungstenSteel, new ItemStack(ErrorItem.getInstance(), 1), 2),
- GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Tungsten, new ItemStack(ErrorItem.getInstance(), 1), 8),
- GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Data, 1),
- GT_Utility.getIntegratedCircuit(6)
- };
- GT_Values.RA.addAssemblerRecipe(
- t3HeatVent,
- FluidRegistry.getFluidStack("molten.gallium", 576),
- reactorItem.getStackFromDamage(Items.T3HeatVent.getMetaID()),
- 800, 7680);
-
- System.out.println("...done");
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-}
+package kekztech;
+
+import blocks.Block_GDCUnit;
+import blocks.Block_TFFTCasing;
+import blocks.Block_TFFTStorageFieldBlockT1;
+import blocks.Block_TFFTStorageFieldBlockT2;
+import blocks.Block_TFFTStorageFieldBlockT3;
+import blocks.Block_TFFTStorageFieldBlockT4;
+import blocks.Block_YSZUnit;
+import cpw.mods.fml.common.Mod;
+import cpw.mods.fml.common.event.FMLInitializationEvent;
+import cpw.mods.fml.common.event.FMLPostInitializationEvent;
+import cpw.mods.fml.common.event.FMLPreInitializationEvent;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import items.ErrorItem;
+import items.MetaItem_CraftingComponent;
+import items.MetaItem_ReactorComponent;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.FluidRegistry;
+import tileentities.GTMTE_FluidMultiStorage;
+import tileentities.GTMTE_ModularNuclearReactor;
+import tileentities.GTMTE_SOFuelCellMK1;
+import tileentities.GTMTE_SOFuelCellMK2;
+import util.Util;
+
+@Mod(modid = KekzCore.MODID, name = KekzCore.NAME, version = KekzCore.VERSION,
+ dependencies = "required-after:IC2; "
+ + "required-after:gregtech"
+ )
+public class KekzCore {
+
+ public static final String NAME = "KekzTech";
+ public static final String MODID = "kekztech";
+ public static final String VERSION = "0.1a";
+
+ @Mod.Instance("kekztech")
+ public static KekzCore instance;
+
+ private GTMTE_SOFuelCellMK1 sofc1;
+ private GTMTE_SOFuelCellMK2 sofc2;
+ private GTMTE_ModularNuclearReactor mdr;
+ private GTMTE_FluidMultiStorage fms;
+
+ @Mod.EventHandler
+ public void preInit(FMLPreInitializationEvent event) {
+ // Items
+ ErrorItem.getInstance().registerItem();
+ MetaItem_ReactorComponent.getInstance().registerItem();
+ MetaItem_CraftingComponent.getInstance().registerItem();
+ // Blocks
+ Block_YSZUnit.getInstance().registerBlock();
+ Block_GDCUnit.getInstance().registerBlock();
+ Block_TFFTCasing.getInstance().registerBlock();
+ Block_TFFTStorageFieldBlockT1.getInstance().registerBlock();
+ Block_TFFTStorageFieldBlockT2.getInstance().registerBlock();
+ Block_TFFTStorageFieldBlockT3.getInstance().registerBlock();
+ Block_TFFTStorageFieldBlockT4.getInstance().registerBlock();
+ }
+
+ @Mod.EventHandler
+ public void init(FMLInitializationEvent event ) {
+ // Multiblock controllers
+ sofc1 = new GTMTE_SOFuelCellMK1(5000, "multimachine.fuelcellmk1", "Solid-Oxide Fuel Cell Mk I");
+ sofc2 = new GTMTE_SOFuelCellMK2(5001, "multimachine.fuelcellmk2", "Solid-Oxide Fuel Cell Mk II");
+ mdr = new GTMTE_ModularNuclearReactor(5002, "multimachine.nuclearreactor", "Nuclear Reactor");
+ fms = new GTMTE_FluidMultiStorage(5003, "multimachine.tf_fluidtank", "T.F.F.T");
+ }
+
+ @Mod.EventHandler
+ public void postInit(FMLPostInitializationEvent event) {
+ System.out.println("Registering KekzTech recipes...");
+
+ final MetaItem_CraftingComponent craftingItem = MetaItem_CraftingComponent.getInstance();
+ final MetaItem_ReactorComponent reactorItem = MetaItem_ReactorComponent.getInstance();
+
+ // Multiblock Controllers
+ final Object[] mk1_recipe = {
+ "CCC", "PHP", "FBL",
+ 'C', OrePrefixes.circuit.get(Materials.Advanced),
+ 'P', ItemList.Electric_Pump_HV.get(1L, (Object[]) null),
+ 'H', ItemList.Hull_HV.get(1L, (Object[]) null),
+ 'F', GT_OreDictUnificator.get(OrePrefixes.pipeSmall, Materials.StainlessSteel, 1),
+ 'B', GT_OreDictUnificator.get(OrePrefixes.cableGt02, Materials.Gold, 1),
+ 'L', GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.StainlessSteel, 1)
+ };
+ GT_ModHandler.addCraftingRecipe(sofc1.getStackForm(1), mk1_recipe);
+ final Object[] mk2_recipe = {
+ "CCC", "PHP", "FBL",
+ 'C', OrePrefixes.circuit.get(Materials.Master),
+ 'P', ItemList.Electric_Pump_IV.get(1L, (Object[]) null),
+ 'H', ItemList.Hull_IV.get(1L, (Object[]) null),
+ 'F', GT_OreDictUnificator.get(OrePrefixes.pipeSmall, Materials.Ultimate, 1),
+ 'B', Util.getStackofAmountFromOreDict("wireGt04SuperconductorEV", 1),
+ 'L', GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Ultimate, 1)
+ };
+ GT_ModHandler.addCraftingRecipe(sofc2.getStackForm(1), mk2_recipe);
+ final Object[] tfft_recipe = {
+ "HFH", "PVP", "CFC",
+ 'H', OrePrefixes.pipeMedium.get(Materials.StainlessSteel),
+ 'F', ItemList.Field_Generator_LV.get(1L, (Object[]) null),
+ 'P', ItemList.Electric_Pump_HV.get(1L, (Object[]) null),
+ 'V', OrePrefixes.rotor.get(Materials.VibrantAlloy),
+ 'C', OrePrefixes.circuit.get(Materials.Advanced)
+ };
+ GT_ModHandler.addCraftingRecipe(fms.getStackForm(1), tfft_recipe);
+
+ // Ceramic Electrolyte Units
+ final ItemStack[] yszUnit = {
+ GT_Utility.getIntegratedCircuit(6),
+ craftingItem.getStackOfAmountFromDamage(Items.YSZCeramicPlate.getMetaID(), 4),
+ GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Yttrium, 1),
+ GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.StainlessSteel, 1),
+ ItemList.Electric_Motor_HV.get(1L, (Object[]) null),
+ };
+ GT_Values.RA.addAssemblerRecipe(
+ yszUnit,
+ Materials.Hydrogen.getGas(4000),
+ new ItemStack(Block_YSZUnit.getInstance(), 1),
+ 1200, 480);
+ final ItemStack[] gdcUnit = {
+ GT_Utility.getIntegratedCircuit(6),
+ craftingItem.getStackOfAmountFromDamage(Items.GDCCeramicPlate.getMetaID(), 8),
+ GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Gadolinium, new ItemStack(ErrorItem.getInstance(), 1), 1),
+ GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.Desh, new ItemStack(ErrorItem.getInstance(), 1), 1),
+ ItemList.Electric_Motor_IV.get(1L, (Object[]) null),
+ };
+ GT_Values.RA.addAssemblerRecipe(
+ gdcUnit,
+ Materials.Hydrogen.getGas(16000),
+ new ItemStack(Block_GDCUnit.getInstance(), 1),
+ 2400, 1920);
+
+ // T.F.F.T Structure blocks
+ final ItemStack[] tfftcasing = {
+ GT_Utility.getIntegratedCircuit(6),
+ GT_OreDictUnificator.get(OrePrefixes.plate, Materials.DarkSteel, 3),
+ GT_OreDictUnificator.get(OrePrefixes.plate, Materials.EnderPearl, 3),
+ GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.StainlessSteel, 1),
+ };
+ GT_Values.RA.addAssemblerRecipe(
+ tfftcasing,
+ FluidRegistry.getFluidStack("molten.polytetrafluoroethylene", 144),
+ new ItemStack(Block_TFFTCasing.getInstance(), 1),
+ 200, 256);
+ final ItemStack[] tfftstoragefield1 = {
+ GT_Utility.getIntegratedCircuit(6),
+ GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Basic, 4),
+ GT_OreDictUnificator.get(OrePrefixes.plate, Materials.PulsatingIron, 1),
+ GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Steel, 1),
+ ItemList.Electric_Pump_LV.get(1L, (Object[]) null)
+ };
+ GT_Values.RA.addAssemblerRecipe(
+ tfftstoragefield1,
+ FluidRegistry.getFluidStack("molten.glass", 144),
+ new ItemStack(Block_TFFTStorageFieldBlockT1.getInstance(), 1),
+ 200, 256);
+ final ItemStack[] tfftstoragefield2 = {
+ GT_Utility.getIntegratedCircuit(6),
+ GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Good, 4),
+ GT_OreDictUnificator.get(OrePrefixes.plate, Materials.PulsatingIron, 4),
+ GT_OreDictUnificator.get(OrePrefixes.pipeHuge, Materials.StainlessSteel, 1),
+ ItemList.Electric_Pump_MV.get(1L, (Object[]) null)
+ };
+ GT_Values.RA.addAssemblerRecipe(
+ tfftstoragefield2,
+ FluidRegistry.getFluidStack("molten.plastic", 144),
+ new ItemStack(Block_TFFTStorageFieldBlockT2.getInstance(), 1),
+ 200, 480);
+ final ItemStack[] tfftstoragefield3 = {
+ GT_Utility.getIntegratedCircuit(6),
+ GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Advanced, 4),
+ GT_OreDictUnificator.get(OrePrefixes.plate, Materials.VibrantAlloy, 2),
+ GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Titanium, 1),
+ ItemList.Field_Generator_LV.get(1L, (Object[]) null),
+ ItemList.Electric_Pump_HV.get(1L, (Object[]) null)
+ };
+ GT_Values.RA.addAssemblerRecipe(
+ tfftstoragefield3,
+ FluidRegistry.getFluidStack("molten.epoxid", 576),
+ new ItemStack(Block_TFFTStorageFieldBlockT3.getInstance(), 1),
+ 300, 1920);
+ final ItemStack[] tfftstoragefield4 = {
+ GT_Utility.getIntegratedCircuit(6),
+ GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Elite, 4),
+ GT_OreDictUnificator.get(OrePrefixes.plateTriple, Materials.NiobiumTitanium, 1),
+ GT_OreDictUnificator.get(OrePrefixes.pipeHuge, Materials.TungstenSteel, 1),
+ ItemList.Field_Generator_HV.get(1L, (Object[]) null),
+ ItemList.Electric_Pump_EV.get(1L, (Object[]) null)
+ };
+ GT_Values.RA.addAssemblerRecipe(
+ tfftstoragefield4,
+ FluidRegistry.getFluidStack("molten.epoxid", 1152),
+ new ItemStack(Block_TFFTStorageFieldBlockT4.getInstance(), 1),
+ 400, 4098);
+
+ // Ceramic plates
+ GT_Values.RA.addAlloySmelterRecipe(
+ craftingItem.getStackOfAmountFromDamage(Items.YSZCeramicDust.getMetaID(), 10),
+ ItemList.Shape_Mold_Plate.get(1, (Object[]) null),
+ craftingItem.getStackOfAmountFromDamage(Items.YSZCeramicPlate.getMetaID(), 1),
+ 400, 480);
+ GT_Values.RA.addFormingPressRecipe(
+ craftingItem.getStackOfAmountFromDamage(Items.GDCCeramicDust.getMetaID(), 10),
+ ItemList.Shape_Mold_Plate.get(1, (Object[]) null),
+ craftingItem.getStackOfAmountFromDamage(Items.GDCCeramicPlate.getMetaID(), 1),
+ 800, 480);
+
+ // Dusts
+ GT_Values.RA.addMixerRecipe(Materials.Boron.getDust(1), Materials.Arsenic.getDust(1), GT_Utility.getIntegratedCircuit(6), null,
+ null, null, craftingItem.getStackOfAmountFromDamage(Items.BoronArsenideDust.getMetaID(), 2),
+ 100, 1920);
+ GT_Values.RA.addChemicalRecipe(
+ Materials.Ammonia.getCells(2),
+ Materials.CarbonDioxide.getCells(1),
+ null,
+ null,
+ craftingItem.getStackOfAmountFromDamage(Items.AmineCarbamiteDust.getMetaID(), 1),
+ Util.getStackofAmountFromOreDict("cellEmpty", 3),
+ 400, 30);
+ GT_Values.RA.addChemicalRecipe(
+ craftingItem.getStackOfAmountFromDamage(Items.AmineCarbamiteDust.getMetaID(), 1),
+ Materials.Diamond.getDust(16),
+ Materials.CarbonDioxide.getGas(1000),
+ null,
+ craftingItem.getStackOfAmountFromDamage(Items.IsotopicallyPureDiamondDust.getMetaID(), 1),
+ null, 1200, 480);
+ GT_Values.RA.addChemicalRecipe(
+ Materials.Yttrium.getDust(1), GT_Utility.getIntegratedCircuit(6), Materials.Oxygen.getGas(3000),
+ null, craftingItem.getStackOfAmountFromDamage(Items.YttriaDust.getMetaID(), 1), null,
+ 400, 30);
+ GT_Values.RA.addChemicalRecipe(
+ Util.getStackofAmountFromOreDict("dustZirconium", 1), GT_Utility.getIntegratedCircuit(6), Materials.Oxygen.getGas(2000),
+ null, craftingItem.getStackOfAmountFromDamage(Items.ZirconiaDust.getMetaID(), 1), null,
+ 400, 30);
+ GT_Values.RA.addChemicalRecipe(
+ Materials.Cerium.getDust(2), GT_Utility.getIntegratedCircuit(6), Materials.Oxygen.getGas(3000),
+ null, craftingItem.getStackOfAmountFromDamage(Items.CeriaDust.getMetaID(), 2), null,
+ 400, 30);
+ GT_Values.RA.addMixerRecipe(
+ craftingItem.getStackOfAmountFromDamage(Items.YttriaDust.getMetaID(), 1),
+ craftingItem.getStackOfAmountFromDamage(Items.ZirconiaDust.getMetaID(), 5),
+ GT_Utility.getIntegratedCircuit(6), null, null, null,
+ craftingItem.getStackOfAmountFromDamage(Items.YSZCeramicDust.getMetaID(), 6),
+ 400, 96);
+ GT_Values.RA.addMixerRecipe(
+ GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gadolinium, new ItemStack(ErrorItem.getInstance(), 1), 1),
+ craftingItem.getStackOfAmountFromDamage(Items.CeriaDust.getMetaID(), 9),
+ GT_Utility.getIntegratedCircuit(6), null, null, null,
+ craftingItem.getStackOfAmountFromDamage(Items.GDCCeramicDust.getMetaID(), 10),
+ 400, 1920);
+
+ // Crystals
+ GT_Values.RA.addAutoclaveRecipe(
+ craftingItem.getStackOfAmountFromDamage(Items.IsotopicallyPureDiamondDust.getMetaID(), 4),
+ Materials.CarbonDioxide.getGas(16000),
+ craftingItem.getStackOfAmountFromDamage(Items.IsotopicallyPureDiamondCrystal.getMetaID(), 1), 10000, 2400, 7680);
+ GT_Values.RA.addAutoclaveRecipe(
+ craftingItem.getStackOfAmountFromDamage(Items.IsotopicallyPureDiamondDust.getMetaID(), 4),
+ Materials.CarbonDioxide.getGas(16000),
+ craftingItem.getStackOfAmountFromDamage(Items.IsotopicallyPureDiamondCrystal.getMetaID(), 1), 10000, 2400, 1920);
+
+ // Heat Pipes
+ GT_Values.RA.addLatheRecipe(
+ GT_OreDictUnificator.get(OrePrefixes.stick, Materials.AnnealedCopper, 1),
+ craftingItem.getStackFromDamage(Items.CopperHeatPipe.getMetaID()),
+ null, 120, 120);
+ GT_Values.RA.addLatheRecipe(
+ GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Silver, 1),
+ craftingItem.getStackFromDamage(Items.SilverHeatPipe.getMetaID()),
+ null, 120, 480);
+ GT_Values.RA.addLatheRecipe(
+ craftingItem.getStackOfAmountFromDamage(Items.BoronArsenideCrystal.getMetaID(), 4),
+ craftingItem.getStackFromDamage(Items.BoronArsenideHeatPipe.getMetaID()),
+ null, 1200, 1920);
+ GT_Values.RA.addLatheRecipe(
+ craftingItem.getStackOfAmountFromDamage(Items.IsotopicallyPureDiamondCrystal.getMetaID(), 4),
+ craftingItem.getStackFromDamage(Items.DiamondHeatPipe.getMetaID()),
+ null, 1200, 7680);
+
+ // Heat Vents
+ final ItemStack[] t1HeatVent = {
+ craftingItem.getStackOfAmountFromDamage(Items.CopperHeatPipe.getMetaID(), 2),
+ ItemList.Electric_Motor_MV.get(1L, (Object[]) null),
+ GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.Steel, new ItemStack(ErrorItem.getInstance(), 1), 1),
+ GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Steel, new ItemStack(ErrorItem.getInstance(), 1), 2),
+ GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Steel, new ItemStack(ErrorItem.getInstance(), 1), 8),
+ GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Good, 1),
+ GT_Utility.getIntegratedCircuit(6)
+ };
+ GT_Values.RA.addAssemblerRecipe(
+ t1HeatVent,
+ FluidRegistry.getFluidStack("molten.copper", 144),
+ reactorItem.getStackFromDamage(Items.T1HeatVent.getMetaID()),
+ 200, 120);
+ final ItemStack[] t2HeatVent = {
+ craftingItem.getStackOfAmountFromDamage(Items.SilverHeatPipe.getMetaID(), 2),
+ ItemList.Electric_Motor_HV.get(1L, (Object[]) null),
+ GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.Aluminium, new ItemStack(ErrorItem.getInstance(), 1), 1),
+ GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Aluminium, new ItemStack(ErrorItem.getInstance(), 1), 2),
+ GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Aluminium, new ItemStack(ErrorItem.getInstance(), 1), 8),
+ GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Advanced, 1),
+ GT_Utility.getIntegratedCircuit(6)
+ };
+ GT_Values.RA.addAssemblerRecipe(
+ t2HeatVent,
+ FluidRegistry.getFluidStack("molten.silver", 144),
+ reactorItem.getStackFromDamage(Items.T2HeatVent.getMetaID()),
+ 400, 480);
+ final ItemStack[] t3HeatVent = {
+ craftingItem.getStackOfAmountFromDamage(Items.BoronArsenideHeatPipe.getMetaID(), 2),
+ ItemList.Electric_Motor_IV.get(1L, (Object[]) null),
+ GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.TungstenSteel, new ItemStack(ErrorItem.getInstance(), 1), 1),
+ GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.TungstenSteel, new ItemStack(ErrorItem.getInstance(), 1), 2),
+ GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Tungsten, new ItemStack(ErrorItem.getInstance(), 1), 8),
+ GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Data, 1),
+ GT_Utility.getIntegratedCircuit(6)
+ };
+ GT_Values.RA.addAssemblerRecipe(
+ t3HeatVent,
+ FluidRegistry.getFluidStack("molten.gallium", 576),
+ reactorItem.getStackFromDamage(Items.T3HeatVent.getMetaID()),
+ 800, 7680);
+
+ System.out.println("...done");
+ }
+
+}
diff --git a/src/main/java/kekztech/MultiFluidHandler.java b/src/main/java/kekztech/MultiFluidHandler.java
new file mode 100644
index 0000000000..9b4d8b1bc4
--- /dev/null
+++ b/src/main/java/kekztech/MultiFluidHandler.java
@@ -0,0 +1,138 @@
+package kekztech;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraftforge.fluids.FluidStack;
+
+public class MultiFluidHandler {
+
+ private static final int MAX_DISTINCT_FLUIDS = 25;
+
+ private final List<FluidStack> fluids = new ArrayList<>();
+ private final int capacityPerFluid;
+
+ public MultiFluidHandler(int capacityPerFluid) {
+ this.capacityPerFluid = capacityPerFluid;
+ }
+
+ public MultiFluidHandler(int capacityPerFluid, List<FluidStack> fluids) {
+ this.capacityPerFluid = capacityPerFluid;
+ this.fluids.addAll(fluids);
+ }
+
+ public boolean contains(FluidStack fluid) {
+ return fluids.contains(fluid);
+ }
+
+ public int getCapacity() {
+ return capacityPerFluid;
+ }
+
+ public List<FluidStack> getFluids(){
+ return fluids;
+ }
+
+ public FluidStack getFluid(int slot) {
+ return fluids.get(slot);
+ }
+
+ public NBTTagCompound getAsNBTTag(NBTTagCompound nbt) {
+ nbt = (nbt == null) ? new NBTTagCompound() : nbt;
+ int c = 0;
+ for(FluidStack f : fluids) {
+ nbt.setTag("" + c, f.writeToNBT(new NBTTagCompound()));
+ }
+ return nbt;
+ }
+
+ public ArrayList<String> getInfoData() {
+ final ArrayList<String> lines = new ArrayList<>(fluids.size() + 1);
+ lines.add(EnumChatFormatting.YELLOW + "Stored Fluids:" + EnumChatFormatting.RESET);
+ for(int i = 0; i < fluids.size(); i++) {
+ lines.add(i + " - " + fluids.get(i).getLocalizedName() + ": "
+ + fluids.get(i).amount + "L ("
+ + (Math.round(100.0f * fluids.get(i).amount / getCapacity())) + "%)");
+ }
+ lines.add(EnumChatFormatting.YELLOW + "Operational Data:" + EnumChatFormatting.RESET);
+
+ return lines;
+ }
+
+ public int pushFluid(FluidStack push) {
+ if(fluids.size() == MAX_DISTINCT_FLUIDS && !contains(push)) {
+ return 0;
+ } else if (fluids.size() < MAX_DISTINCT_FLUIDS && !contains(push)) {
+ final int fit = Math.min(getCapacity(), push.amount);
+ fluids.add(new FluidStack(push.getFluid(), fit));
+ return fit;
+ } else {
+ final FluidStack fs = fluids.get(fluids.indexOf(push));
+ final int remcap = getCapacity() - fs.amount;
+ final int fit = Math.min(remcap, push.amount);
+ fs.amount += fit;
+ return fit;
+ }
+ }
+
+ public int pushFluid(FluidStack push, int slot) {
+ if(slot < 0 || slot >= MAX_DISTINCT_FLUIDS) {
+ return 0;
+ }
+ if(!fluids.get(slot).equals(push)) {
+ return 0;
+ } else {
+ final FluidStack fs = fluids.get(slot);
+ final int remcap = getCapacity() - fs.amount;
+ final int fit = Math.min(remcap, push.amount);
+ fs.amount += fit;
+ return fit;
+ }
+ }
+
+ public int pullFluid(FluidStack pull) {
+ if(!contains(pull)) {
+ return 0;
+ } else {
+ final FluidStack pulled = fluids.get(fluids.indexOf(pull));
+ final int rec = Math.min(pull.amount, pulled.amount);
+ if(pulled.amount <= rec) {
+ fluids.remove(pulled);
+ } else {
+ pulled.amount -= rec;
+ }
+ return rec;
+ }
+ }
+
+ public int pullFluid(FluidStack pull, int slot) {
+ if(slot < 0 || slot >= MAX_DISTINCT_FLUIDS) {
+ return 0;
+ }
+ if(!fluids.get(slot).equals(pull)) {
+ return 0;
+ } else {
+ final FluidStack pulled = fluids.get(slot);
+ final int rec = Math.min(pull.amount, pulled.amount);
+ if(pulled.amount <= rec) {
+ fluids.remove(pulled);
+ } else {
+ pulled.amount -= rec;
+ }
+ return rec;
+ }
+ }
+
+ public boolean couldPush(FluidStack push) {
+ if(fluids.size() == MAX_DISTINCT_FLUIDS && !contains(push)) {
+ return false;
+ } else if (fluids.size() < MAX_DISTINCT_FLUIDS && !contains(push)) {
+ return Math.min(getCapacity(), push.amount) > 0;
+ } else {
+ final int remcap = getCapacity() - fluids.get(fluids.indexOf(push)).amount;
+ return Math.min(remcap, push.amount) > 0;
+ }
+ }
+}
diff --git a/src/main/java/reactor/ButtonSlot.java b/src/main/java/reactor/ButtonSlot.java
index 6d777ca280..94c259d403 100644
--- a/src/main/java/reactor/ButtonSlot.java
+++ b/src/main/java/reactor/ButtonSlot.java
@@ -1,14 +1,14 @@
-package reactor;
-
-import net.minecraft.inventory.IInventory;
-import net.minecraft.inventory.Slot;
-
-public class ButtonSlot extends Slot {
-
- public ButtonSlot(IInventory playerIventory, int slotID, int posX, int posY) {
- super(playerIventory, slotID, posX, posY);
-
-
- }
-
-}
+package reactor;
+
+import net.minecraft.inventory.IInventory;
+import net.minecraft.inventory.Slot;
+
+public class ButtonSlot extends Slot {
+
+ public ButtonSlot(IInventory playerIventory, int slotID, int posX, int posY) {
+ super(playerIventory, slotID, posX, posY);
+
+
+ }
+
+}
diff --git a/src/main/java/reactor/items/CoolantCell.java b/src/main/java/reactor/items/CoolantCell.java
index 04122fef33..b166b3fc3d 100644
--- a/src/main/java/reactor/items/CoolantCell.java
+++ b/src/main/java/reactor/items/CoolantCell.java
@@ -1,26 +1,26 @@
-package reactor.items;
-
-import items.MetaItem_ReactorComponent;
-import kekztech.GTRecipe;
-import kekztech.Items;
-
-public class CoolantCell {
-
- public static String TYPE = "CoolantCell";
-
- public static String[] RESOURCE_NAME = {
- "HeliumCoolantCell360k", "NaKCoolantCell360k"
- };
-
- public static int[] HEAT_CAPACITY = {
- 360000, 360000
- };
-
- public static GTRecipe[] RECIPE = {
- new GTRecipe().setDuration(1200).setEUPerTick(480)
- .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.HeliumCoolantCell360k.getMetaID())),
- new GTRecipe().setDuration(1200).setEUPerTick(480)
- .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.NaKCoolantCell360k.getMetaID()))
- };
-
-}
+package reactor.items;
+
+import items.MetaItem_ReactorComponent;
+import kekztech.GTRecipe;
+import kekztech.Items;
+
+public class CoolantCell {
+
+ public static String TYPE = "CoolantCell";
+
+ public static String[] RESOURCE_NAME = {
+ "HeliumCoolantCell360k", "NaKCoolantCell360k"
+ };
+
+ public static int[] HEAT_CAPACITY = {
+ 360000, 360000
+ };
+
+ public static GTRecipe[] RECIPE = {
+ new GTRecipe().setDuration(1200).setEUPerTick(480)
+ .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.HeliumCoolantCell360k.getMetaID())),
+ new GTRecipe().setDuration(1200).setEUPerTick(480)
+ .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.NaKCoolantCell360k.getMetaID()))
+ };
+
+}
diff --git a/src/main/java/reactor/items/FuelRod.java b/src/main/java/reactor/items/FuelRod.java
index d0f9cb5e17..9cb697a373 100644
--- a/src/main/java/reactor/items/FuelRod.java
+++ b/src/main/java/reactor/items/FuelRod.java
@@ -1,114 +1,114 @@
-package reactor.items;
-
-import items.MetaItem_ReactorComponent;
-import kekztech.GTRecipe;
-import kekztech.Items;
-
-public class FuelRod {
-
- public static final int METAOFFSET = 17;
- public static final int METAOFFSET_DEPLETED = 29;
-
- public static final String TYPE = "FuelRod";
- public static final String TYPE_DEPLETED = "DepletedFuelRod";
- public static final String LIFETIME = "LIFETIME";
- public static final String PULSES = "PULSES";
- public static final String HEAT_PER_SECOND = "HEAT_PER_SECOND";
- public static final String HEAT_PER_PULSE = "HEAT_PER_PULSE";
- public static final String HEAT_BOOST_RATE = "HEAT_BOOST_RATE";
- public static final String EU_PER_TICK = "EU_PER_TICK";
- public static final String EU_PER_PULSE = "EU_PER_PULSE";
-
-
- public static final String[] RESOURCE_NAME = {
- "UraniumFuelRod", "UraniumDualFuelRod", "UraniumQuadFuelRod",
- "ThoriumFuelRod", "ThoriumDualFuelRod", "ThoriumQuadFuelRod",
- "MOXFuelRod", "MOXDualFuelRod", "MOXQuadFuelRod",
- "NaquadahFuelRod", "NaquadahDualFuelRod", "NaquadahQuadFuelRod",
- "Th_MOXFuelRod", "Th_MOXDualFuelRod", "Th_MOXQuadFuelRod"
- };
-
- public static final String[] RESOURCE_NAME_DEPLETED = {
- "DepletedUraniumFuelRod", "DepletedUraniumDualFuelRod", "DepletedUraniumQuadFuelRod",
- "DepletedThoriumFuelRod", "DepletedThoriumDualFuelRod", "DepletedThoriumQuadFuelRod",
- "DepletedMOXFuelRod", "DepletedMOXDualFuelRod", "DepletedMOXQuadFuelRod",
- "DepletedNaquadahFuelRod", "DepletedNaquadahDualFuelRod", "DepletedNaquadahQuadFuelRod",
- "Th_DepletedMOXFuelRod", "Th_DepletedMOXDualFuelRod", "Th_DepletedMOXQuadFuelRod"
- };
-
- public static final int[] VALUES_LIFETIME = {
- 20000, 20000, 20000, 100000, 100000, 100000,
- 10000, 10000, 10000, 100000, 100000, 100000,
- 50000, 50000, 50000
- };
-
- public static final int[] VALUES_PULSES = {
- 1, 2, 4, 1, 2, 4,
- 1, 2, 4, 1, 2, 4,
- 1, 2, 4
- };
-
- public static final int[] VALUES_HEAT_PER_SECOND = {
- 4, 24, 96, 1, 6, 24,
- 4, 24, 96, 80, 480, 1920,
- 1, 6, 24
- };
-
- public static final int[] VALUES_HEAT_PER_PULSE = {
- 4, 4, 4, 1, 1, 1,
- 4, 4, 4, 80, 80, 80,
- 1, 1, 1
-
- };
-
- public static final double[] VALUES_HEAT_BOOST_RATE = {
- 1, 1, 1, 1, 1, 1,
- 5, 5, 5, 1, 1, 1,
- 2, 2, 2
- };
-
- public static final int[] VALUES_EU_PER_TICK = {
- 50, 200, 600, 10, 40, 120,
- 50, 200, 600, 100, 400, 1200,
- 10, 40, 120
- };
-
- public static final int[] VALUES_EU_PER_PULSE = {
- 50, 50, 50, 10, 10, 10,
- 50, 50, 50, 100, 100, 100,
- 10, 10, 10
- };
-
- public static final GTRecipe[] RECIPE = {
- // Uranium Fuel Rod
- new GTRecipe().setDuration(600).setEUPerTick(480)
- .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.UraniumFuelRod.getMetaID())),
- new GTRecipe().setDuration(800).setEUPerTick(480)
- .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.UraniumDualFuelRod.getMetaID())),
- new GTRecipe().setDuration(1000).setEUPerTick(480)
- .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.UraniumQuadFuelRod.getMetaID())),
- // Thorium Fuel Rod
- new GTRecipe().setDuration(600).setEUPerTick(480)
- .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.ThoriumFuelRod.getMetaID())),
- new GTRecipe().setDuration(800).setEUPerTick(480)
- .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.ThoriumDualFuelRod.getMetaID())),
- new GTRecipe().setDuration(1000).setEUPerTick(480)
- .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.ThoriumQuadFuelRod.getMetaID())),
- // MOX Fuel Rod
- new GTRecipe().setDuration(600).setEUPerTick(1920)
- .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.MOXFuelRod.getMetaID())),
- new GTRecipe().setDuration(800).setEUPerTick(1920)
- .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.MOXDualFuelRod.getMetaID())),
- new GTRecipe().setDuration(1000).setEUPerTick(1920)
- .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.MOXQuadFuelRod.getMetaID())),
- // Naquadah Fuel Rod
- new GTRecipe().setDuration(600).setEUPerTick(7680)
- .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.NaquadahFuelRod.getMetaID())),
- new GTRecipe().setDuration(800).setEUPerTick(7680)
- .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.NaquadahDualFuelRod.getMetaID())),
- new GTRecipe().setDuration(1000).setEUPerTick(7680)
- .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.NaquadahQuadFuelRod.getMetaID())),
- // Thorium MOX Fuel Rod
- };
-
-}
+package reactor.items;
+
+import items.MetaItem_ReactorComponent;
+import kekztech.GTRecipe;
+import kekztech.Items;
+
+public class FuelRod {
+
+ public static final int METAOFFSET = 17;
+ public static final int METAOFFSET_DEPLETED = 29;
+
+ public static final String TYPE = "FuelRod";
+ public static final String TYPE_DEPLETED = "DepletedFuelRod";
+ public static final String LIFETIME = "LIFETIME";
+ public static final String PULSES = "PULSES";
+ public static final String HEAT_PER_SECOND = "HEAT_PER_SECOND";
+ public static final String HEAT_PER_PULSE = "HEAT_PER_PULSE";
+ public static final String HEAT_BOOST_RATE = "HEAT_BOOST_RATE";
+ public static final String EU_PER_TICK = "EU_PER_TICK";
+ public static final String EU_PER_PULSE = "EU_PER_PULSE";
+
+
+ public static final String[] RESOURCE_NAME = {
+ "UraniumFuelRod", "UraniumDualFuelRod", "UraniumQuadFuelRod",
+ "ThoriumFuelRod", "ThoriumDualFuelRod", "ThoriumQuadFuelRod",
+ "MOXFuelRod", "MOXDualFuelRod", "MOXQuadFuelRod",
+ "NaquadahFuelRod", "NaquadahDualFuelRod", "NaquadahQuadFuelRod",
+ "Th_MOXFuelRod", "Th_MOXDualFuelRod", "Th_MOXQuadFuelRod"
+ };
+
+ public static final String[] RESOURCE_NAME_DEPLETED = {
+ "DepletedUraniumFuelRod", "DepletedUraniumDualFuelRod", "DepletedUraniumQuadFuelRod",
+ "DepletedThoriumFuelRod", "DepletedThoriumDualFuelRod", "DepletedThoriumQuadFuelRod",
+ "DepletedMOXFuelRod", "DepletedMOXDualFuelRod", "DepletedMOXQuadFuelRod",
+ "DepletedNaquadahFuelRod", "DepletedNaquadahDualFuelRod", "DepletedNaquadahQuadFuelRod",
+ "Th_DepletedMOXFuelRod", "Th_DepletedMOXDualFuelRod", "Th_DepletedMOXQuadFuelRod"
+ };
+
+ public static final int[] VALUES_LIFETIME = {
+ 20000, 20000, 20000, 100000, 100000, 100000,
+ 10000, 10000, 10000, 100000, 100000, 100000,
+ 50000, 50000, 50000
+ };
+
+ public static final int[] VALUES_PULSES = {
+ 1, 2, 4, 1, 2, 4,
+ 1, 2, 4, 1, 2, 4,
+ 1, 2, 4
+ };
+
+ public static final int[] VALUES_HEAT_PER_SECOND = {
+ 4, 24, 96, 1, 6, 24,
+ 4, 24, 96, 80, 480, 1920,
+ 1, 6, 24
+ };
+
+ public static final int[] VALUES_HEAT_PER_PULSE = {
+ 4, 4, 4, 1, 1, 1,
+ 4, 4, 4, 80, 80, 80,
+ 1, 1, 1
+
+ };
+
+ public static final double[] VALUES_HEAT_BOOST_RATE = {
+ 1, 1, 1, 1, 1, 1,
+ 5, 5, 5, 1, 1, 1,
+ 2, 2, 2
+ };
+
+ public static final int[] VALUES_EU_PER_TICK = {
+ 50, 200, 600, 10, 40, 120,
+ 50, 200, 600, 100, 400, 1200,
+ 10, 40, 120
+ };
+
+ public static final int[] VALUES_EU_PER_PULSE = {
+ 50, 50, 50, 10, 10, 10,
+ 50, 50, 50, 100, 100, 100,
+ 10, 10, 10
+ };
+
+ public static final GTRecipe[] RECIPE = {
+ // Uranium Fuel Rod
+ new GTRecipe().setDuration(600).setEUPerTick(480)
+ .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.UraniumFuelRod.getMetaID())),
+ new GTRecipe().setDuration(800).setEUPerTick(480)
+ .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.UraniumDualFuelRod.getMetaID())),
+ new GTRecipe().setDuration(1000).setEUPerTick(480)
+ .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.UraniumQuadFuelRod.getMetaID())),
+ // Thorium Fuel Rod
+ new GTRecipe().setDuration(600).setEUPerTick(480)
+ .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.ThoriumFuelRod.getMetaID())),
+ new GTRecipe().setDuration(800).setEUPerTick(480)
+ .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.ThoriumDualFuelRod.getMetaID())),
+ new GTRecipe().setDuration(1000).setEUPerTick(480)
+ .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.ThoriumQuadFuelRod.getMetaID())),
+ // MOX Fuel Rod
+ new GTRecipe().setDuration(600).setEUPerTick(1920)
+ .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.MOXFuelRod.getMetaID())),
+ new GTRecipe().setDuration(800).setEUPerTick(1920)
+ .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.MOXDualFuelRod.getMetaID())),
+ new GTRecipe().setDuration(1000).setEUPerTick(1920)
+ .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.MOXQuadFuelRod.getMetaID())),
+ // Naquadah Fuel Rod
+ new GTRecipe().setDuration(600).setEUPerTick(7680)
+ .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.NaquadahFuelRod.getMetaID())),
+ new GTRecipe().setDuration(800).setEUPerTick(7680)
+ .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.NaquadahDualFuelRod.getMetaID())),
+ new GTRecipe().setDuration(1000).setEUPerTick(7680)
+ .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.NaquadahQuadFuelRod.getMetaID())),
+ // Thorium MOX Fuel Rod
+ };
+
+}
diff --git a/src/main/java/reactor/items/HeatExchanger.java b/src/main/java/reactor/items/HeatExchanger.java
index 48ca7d9fa5..7018f620ec 100644
--- a/src/main/java/reactor/items/HeatExchanger.java
+++ b/src/main/java/reactor/items/HeatExchanger.java
@@ -1,60 +1,60 @@
-package reactor.items;
-
-import items.MetaItem_CraftingComponent;
-import items.MetaItem_ReactorComponent;
-import kekztech.GTRecipe;
-import kekztech.Items;
-import net.minecraftforge.fluids.FluidRegistry;
-import util.Util;
-
-public class HeatExchanger {
-
- public static String TYPE = "HeatExchanger";
-
- public static String[] RESOURCE_NAME = {
- "T1HeatExchanger", "T2HeatExchanger", "T3HeatExchanger", "T4HeatExchanger"
- };
-
- public static int[] HEAT_CAPACITY = {
- 2000, 8000, 32000, 128000
- };
-
- public static int[] COMPONENT_EXCHANGE_RATE = {
- 12, 24, 96, 384
- };
-
- public static int[] HULL_EXCHANGE_RATE = {
- 4, 8, 32, 128
- };
-
- public static GTRecipe[] RECIPE = {
- new GTRecipe().setDuration(200).setEUPerTick(120)
- .addInputItem(MetaItem_CraftingComponent.getInstance().getStackOfAmountFromDamage(Items.CopperHeatPipe.getMetaID(), 4))
- .addInputItem(Util.getStackofAmountFromOreDict("plateDenseCopper", 1))
- .addInputFluid(FluidRegistry.getFluidStack("molten.copper", 576))
- .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.T1HeatExchanger.getMetaID())),
- new GTRecipe().setDuration(400).setEUPerTick(480)
- .addInputItem(MetaItem_CraftingComponent.getInstance().getStackOfAmountFromDamage(Items.SilverHeatPipe.getMetaID(), 4))
- .addInputItem(Util.getStackofAmountFromOreDict("plateDenseSilver", 1))
- .addInputFluid(FluidRegistry.getFluidStack("molten.silver", 576))
- .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.T2HeatExchanger.getMetaID())),
- new GTRecipe().setDuration(800).setEUPerTick(7680)
- .addInputItem(MetaItem_CraftingComponent.getInstance().getStackOfAmountFromDamage(Items.BoronArsenideHeatPipe.getMetaID(), 4))
- .addInputItem(Util.getStackofAmountFromOreDict("pipeTinyCopper", 4))
- .addInputItem(Util.getStackofAmountFromOreDict("wireFineSilver", 16))
- //.addInputItem(new ItemStack(ItemList.Pump_EV.getItem(), 1))
- .addInputFluid(FluidRegistry.getFluidStack("ic2coolant", 720))
- .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.T3HeatExchanger.getMetaID())),
- new GTRecipe().setDuration(1600).setEUPerTick(30720)
- .addInputItem(MetaItem_CraftingComponent.getInstance().getStackOfAmountFromDamage(Items.DiamondHeatPipe.getMetaID(), 4))
- .addInputItem(Util.getStackofAmountFromOreDict("frameGTHSSE", 1))
- .addInputItem(Util.getStackofAmountFromOreDict("plateHSSE", 6))
- .addInputItem(Util.getStackofAmountFromOreDict("screwOsmiridium", 24))
- .addInputItem(Util.getStackofAmountFromOreDict("pipeTinyEnderium", 4))
- //.addInputItem(new ItemStack(ItemList.Pump_LuV.getItem(), 1))
- .addInputFluid(FluidRegistry.getFluidStack("molten.gallium", 1152))
- .addInputFluid(FluidRegistry.getFluidStack("helium", 10000))
- .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.T4HeatExchanger.getMetaID()))
- };
-
-}
+package reactor.items;
+
+import items.MetaItem_CraftingComponent;
+import items.MetaItem_ReactorComponent;
+import kekztech.GTRecipe;
+import kekztech.Items;
+import net.minecraftforge.fluids.FluidRegistry;
+import util.Util;
+
+public class HeatExchanger {
+
+ public static String TYPE = "HeatExchanger";
+
+ public static String[] RESOURCE_NAME = {
+ "T1HeatExchanger", "T2HeatExchanger", "T3HeatExchanger", "T4HeatExchanger"
+ };
+
+ public static int[] HEAT_CAPACITY = {
+ 2000, 8000, 32000, 128000
+ };
+
+ public static int[] COMPONENT_EXCHANGE_RATE = {
+ 12, 24, 96, 384
+ };
+
+ public static int[] HULL_EXCHANGE_RATE = {
+ 4, 8, 32, 128
+ };
+
+ public static GTRecipe[] RECIPE = {
+ new GTRecipe().setDuration(200).setEUPerTick(120)
+ .addInputItem(MetaItem_CraftingComponent.getInstance().getStackOfAmountFromDamage(Items.CopperHeatPipe.getMetaID(), 4))
+ .addInputItem(Util.getStackofAmountFromOreDict("plateDenseCopper", 1))
+ .addInputFluid(FluidRegistry.getFluidStack("molten.copper", 576))
+ .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.T1HeatExchanger.getMetaID())),
+ new GTRecipe().setDuration(400).setEUPerTick(480)
+ .addInputItem(MetaItem_CraftingComponent.getInstance().getStackOfAmountFromDamage(Items.SilverHeatPipe.getMetaID(), 4))
+ .addInputItem(Util.getStackofAmountFromOreDict("plateDenseSilver", 1))
+ .addInputFluid(FluidRegistry.getFluidStack("molten.silver", 576))
+ .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.T2HeatExchanger.getMetaID())),
+ new GTRecipe().setDuration(800).setEUPerTick(7680)
+ .addInputItem(MetaItem_CraftingComponent.getInstance().getStackOfAmountFromDamage(Items.BoronArsenideHeatPipe.getMetaID(), 4))
+ .addInputItem(Util.getStackofAmountFromOreDict("pipeTinyCopper", 4))
+ .addInputItem(Util.getStackofAmountFromOreDict("wireFineSilver", 16))
+ //.addInputItem(new ItemStack(ItemList.Pump_EV.getItem(), 1))
+ .addInputFluid(FluidRegistry.getFluidStack("ic2coolant", 720))
+ .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.T3HeatExchanger.getMetaID())),
+ new GTRecipe().setDuration(1600).setEUPerTick(30720)
+ .addInputItem(MetaItem_CraftingComponent.getInstance().getStackOfAmountFromDamage(Items.DiamondHeatPipe.getMetaID(), 4))
+ .addInputItem(Util.getStackofAmountFromOreDict("frameGTHSSE", 1))
+ .addInputItem(Util.getStackofAmountFromOreDict("plateHSSE", 6))
+ .addInputItem(Util.getStackofAmountFromOreDict("screwOsmiridium", 24))
+ .addInputItem(Util.getStackofAmountFromOreDict("pipeTinyEnderium", 4))
+ //.addInputItem(new ItemStack(ItemList.Pump_LuV.getItem(), 1))
+ .addInputFluid(FluidRegistry.getFluidStack("molten.gallium", 1152))
+ .addInputFluid(FluidRegistry.getFluidStack("helium", 10000))
+ .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.T4HeatExchanger.getMetaID()))
+ };
+
+}
diff --git a/src/main/java/reactor/items/HeatVent.java b/src/main/java/reactor/items/HeatVent.java
index 8743876a78..b6c48120b4 100644
--- a/src/main/java/reactor/items/HeatVent.java
+++ b/src/main/java/reactor/items/HeatVent.java
@@ -1,50 +1,50 @@
-package reactor.items;
-
-import kekztech.GTRecipe;
-
-public class HeatVent {
-
- public static final String TYPE = "HeatVent";
- public static final String HEAT = "HEAT";
- public static final String RESOURCE_NAME = "RESOURCE_NAME";
- public static final String HEAT_CAPACITY = "HEAT_CAPACITY";
- public static final String COMPONENT_VENT_RATE = "COMPONENT_VENT_RATE";
- public static final String HULL_DRAW_RATE = "HULL_DRAW_RATE";
- public static final String SELF_COOL_RATE = "SELF_COOL_RATE";
-
-
- public static String[] RESOURCE_NAMES = {
- "T1HeatVent", "T2HeatVent", "T3HeatVent", "T4HeatVent",
- "T1ComponentHeatVent", "T2ComponentHeatVent", "T3ComponentHeatVent", "T4ComponentHeatVent",
- "T1OverclockedHeatVent", "T2OverclockedHeatVent", "T3OverclockedHeatVent", "T4OverclockedHeatVent"
- };
-
- public static int[] HEAT_CAPACITIES = {
- 1000, 4000, 8000, 32000,
- 1000, 4000, 8000, 32000,
- 1000, 4000, 8000, 32000
- };
-
- public static int[] COMPONENT_VENT_RATES = {
- 0, 0, 0, 0,
- 6, 12, 48, 96,
- 0, 0, 0, 0
- };
-
- public static int[] HULL_DRAW_RATES = {
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 18, 36, 144, 288
- };
-
- public static int[] SELF_COOL_RATES = {
- 6, 12, 48, 96,
- 0, 0, 0, 0,
- 10, 20, 80, 160
- };
-
- public static final GTRecipe[] RECIPE = {
-
- };
-
-}
+package reactor.items;
+
+import kekztech.GTRecipe;
+
+public class HeatVent {
+
+ public static final String TYPE = "HeatVent";
+ public static final String HEAT = "HEAT";
+ public static final String RESOURCE_NAME = "RESOURCE_NAME";
+ public static final String HEAT_CAPACITY = "HEAT_CAPACITY";
+ public static final String COMPONENT_VENT_RATE = "COMPONENT_VENT_RATE";
+ public static final String HULL_DRAW_RATE = "HULL_DRAW_RATE";
+ public static final String SELF_COOL_RATE = "SELF_COOL_RATE";
+
+
+ public static String[] RESOURCE_NAMES = {
+ "T1HeatVent", "T2HeatVent", "T3HeatVent", "T4HeatVent",
+ "T1ComponentHeatVent", "T2ComponentHeatVent", "T3ComponentHeatVent", "T4ComponentHeatVent",
+ "T1OverclockedHeatVent", "T2OverclockedHeatVent", "T3OverclockedHeatVent", "T4OverclockedHeatVent"
+ };
+
+ public static int[] HEAT_CAPACITIES = {
+ 1000, 4000, 8000, 32000,
+ 1000, 4000, 8000, 32000,
+ 1000, 4000, 8000, 32000
+ };
+
+ public static int[] COMPONENT_VENT_RATES = {
+ 0, 0, 0, 0,
+ 6, 12, 48, 96,
+ 0, 0, 0, 0
+ };
+
+ public static int[] HULL_DRAW_RATES = {
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 18, 36, 144, 288
+ };
+
+ public static int[] SELF_COOL_RATES = {
+ 6, 12, 48, 96,
+ 0, 0, 0, 0,
+ 10, 20, 80, 160
+ };
+
+ public static final GTRecipe[] RECIPE = {
+
+ };
+
+}
diff --git a/src/main/java/reactor/items/NeutronReflector.java b/src/main/java/reactor/items/NeutronReflector.java
index 5766cb41e9..9275b860ae 100644
--- a/src/main/java/reactor/items/NeutronReflector.java
+++ b/src/main/java/reactor/items/NeutronReflector.java
@@ -1,26 +1,26 @@
-package reactor.items;
-
-import items.MetaItem_ReactorComponent;
-import kekztech.GTRecipe;
-import kekztech.Items;
-
-public class NeutronReflector {
-
- public static String TYPE = "NeutronReflector";
-
- public static String[] RESOURCE_NAME = {
- "T1NeutronReflector", "T2NeutronReflector"
- };
-
- public static int[] DURABILITY = {
- 512000, 2147483647
- };
-
- public static GTRecipe[] RECIPE = {
- new GTRecipe().setDuration(1200).setEUPerTick(480)
- .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.T1NeutronReflector.getMetaID())),
- new GTRecipe().setDuration(4800).setEUPerTick(7680)
- .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.T2NeutronReflector.getMetaID()))
- };
-
-}
+package reactor.items;
+
+import items.MetaItem_ReactorComponent;
+import kekztech.GTRecipe;
+import kekztech.Items;
+
+public class NeutronReflector {
+
+ public static String TYPE = "NeutronReflector";
+
+ public static String[] RESOURCE_NAME = {
+ "T1NeutronReflector", "T2NeutronReflector"
+ };
+
+ public static int[] DURABILITY = {
+ 512000, 2147483647
+ };
+
+ public static GTRecipe[] RECIPE = {
+ new GTRecipe().setDuration(1200).setEUPerTick(480)
+ .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.T1NeutronReflector.getMetaID())),
+ new GTRecipe().setDuration(4800).setEUPerTick(7680)
+ .addOutputItem(MetaItem_ReactorComponent.getInstance().getStackFromDamage(Items.T2NeutronReflector.getMetaID()))
+ };
+
+}
diff --git a/src/main/java/tileentities/GTMTE_FluidMultiStorage.java b/src/main/java/tileentities/GTMTE_FluidMultiStorage.java
index a11dcdda8a..32d17d1cf5 100644
--- a/src/main/java/tileentities/GTMTE_FluidMultiStorage.java
+++ b/src/main/java/tileentities/GTMTE_FluidMultiStorage.java
@@ -1,518 +1,503 @@
-package tileentities;
-
-import java.util.ArrayList;
-import blocks.Block_TFFTCasing;
-import blocks.Block_TFFTStorageFieldBlockT1;
-import blocks.Block_TFFTStorageFieldBlockT2;
-import blocks.Block_TFFTStorageFieldBlockT3;
-import blocks.Block_TFFTStorageFieldBlockT4;
-import gregtech.api.enums.Textures.BlockIcons;
-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_Hatch_Input;
-import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output;
-import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase;
-import gregtech.api.objects.GT_RenderedTexture;
-import gregtech.api.util.GT_Utility;
-import net.minecraft.block.Block;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.entity.player.InventoryPlayer;
-import net.minecraft.item.ItemStack;
-import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.util.ChatComponentText;
-import net.minecraft.util.EnumChatFormatting;
-import net.minecraftforge.common.util.ForgeDirection;
-import net.minecraftforge.fluids.FluidStack;
-import util.Vector3i;
-import util.Vector3ic;
-
-public class GTMTE_FluidMultiStorage extends GT_MetaTileEntity_MultiBlockBase {
-
- private final String glassNameAE2 = "tile.appliedenergistics2.BlockQuartzGlass";
- private final String glassNameStained = "tile.stainedGlass";
- private final Block CASING = Block_TFFTCasing.getInstance();
- private final Block STORAGE_FIELD1 = Block_TFFTStorageFieldBlockT1.getInstance();
- private final Block STORAGE_FIELD2 = Block_TFFTStorageFieldBlockT2.getInstance();
- private final Block STORAGE_FIELD3 = Block_TFFTStorageFieldBlockT3.getInstance();
- private final Block STORAGE_FIELD4 = Block_TFFTStorageFieldBlockT4.getInstance();
- private final int CASING_TEXTURE_ID = 176;
-
- private final ArrayList<FluidStack> fluidList = new ArrayList<>();
- private int capacityPerFluid = 0;
- private int runningCost = 0;
- private boolean doVoidExcess = false;
-
- public GTMTE_FluidMultiStorage(int aID, String aName, String aNameRegional) {
- super(aID, aName, aNameRegional);
- }
-
- public GTMTE_FluidMultiStorage(String aName) {
- super(aName);
- }
-
- @Override
- public IMetaTileEntity newMetaEntity(IGregTechTileEntity var1) {
- return new GTMTE_FluidMultiStorage(super.mName);
- }
-
- @Override
- public String[] getDescription() {
- return new String[] {
- "High-Tech fluid tank that can hold up to 25 different fluids",
- "Has 1/25th of the total capacity as capacity for each fluid",
- "Rightclicking the controller with a screwdriver will turn on excess voiding",
- "Fluid storage amount and running cost depends on the storage field blocks used",
- "Tier I: 500,000L per block, 0.5EU/t",
- "Tier II: 4,000,000L per block, 1EU/t",
- "Tier III: 16,000,000L per block, 2EU/t",
- "Tier IV: 64,000,000L per block, 4EU/t",
- "------------------------------------------",
- "Note on hatch locking:",
- "Use an integrated circuit in the GUI slot to limit which fluid is outputted",
- "The number of a stored fluid can be obtained through the Tricorder.",
- "------------------------------------------",
- "Dimensions: 5x9x5 (WxHxL)",
- "Structure:",
- " Controller: Top center",
- " Energy Hatch: Any top or bottom casing",
- " Inner 3x7x3 tube are Storage Field Blocks",
- " Outer 5x7x5 glass shell is AE2 Quartz Glass or Vanilla Stained Glass",
- " Maintenance Hatch: Any top or bottom casing",
- " I/O Hatches: Instead of any casing or glass, have to touch storage field"
- };
- }
-
- @Override
- public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex,
- boolean aActive, boolean aRedstone) {
- return aSide == aFacing
- ? new ITexture[]{BlockIcons.casingTexturePages[1][48],
- new GT_RenderedTexture(aActive
- ? BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE
- : BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR)}
- : new ITexture[]{BlockIcons.casingTexturePages[1][48]};
- }
-
- public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
- return new GT_GUIContainer_MultiMachine(aPlayerInventory, aBaseMetaTileEntity, this.getLocalName(),
- "MultiblockDisplay.png");
- }
-
- @Override
- public boolean isCorrectMachinePart(ItemStack var1) {
- return true;
- }
-
- @Override
- public boolean checkRecipe(ItemStack guiSlotItem) {
-
- this.mEfficiency = 10000 - (this.getIdealStatus() - this.getRepairStatus()) * 1000;
- this.mEfficiencyIncrease = 10000;
- this.mEUt = runningCost;
- super.mMaxProgresstime = 10;
-
- // Suck in fluids
- final ArrayList<FluidStack> storedFluids = super.getStoredFluids();
- if(storedFluids.size() > 0) {
- for(FluidStack fluidStack : storedFluids) {
-
- // check if fluid is already in the tank
- boolean foundFluid = false;
- for(FluidStack fs : fluidList) {
- if(GT_Utility.areFluidsEqual(fluidStack, fs)) {
- // figure out how much can be input
- final int possibleInput = Math.min(capacityPerFluid - fs.amount, fluidStack.amount);
- fs.amount += possibleInput;
- final FluidStack tempStack = fluidStack.copy();
- tempStack.amount = possibleInput;
- super.depleteInput(tempStack);
- foundFluid = true;
- break;
- }
- }
- if(foundFluid) {
- continue;
- }
- // fluid wasn't already in the tank - allocate new
- if(fluidList.size() < 25) {
- System.out.println("added " + fluidStack.getUnlocalizedName() + " to new stack");
- final FluidStack drainStack = fluidStack.copy();
- drainStack.amount = fluidStack.amount;
- super.depleteInput(drainStack);
- fluidList.add(drainStack);
- }
- }
-
- // void excess if that is turned on
- if(doVoidExcess) {
- for(GT_MetaTileEntity_Hatch_Input inputHatch : super.mInputHatches) {
- inputHatch.setDrainableStack(null);
- }
- }
- }
-
- // Push out fluids
- if(guiSlotItem != null && guiSlotItem.getUnlocalizedName().equals("gt.integrated_circuit")) {
- final int config = guiSlotItem.getItemDamage();
- final FluidStack storedFluid = fluidList.get(config);
- if(storedFluid == null) {
- return true;
- }
- // figure out how much can be output
- int possibleOutput = 0;
- for(GT_MetaTileEntity_Hatch_Output outputHatch : super.mOutputHatches) {
- if(outputHatch.isFluidLocked() && outputHatch.getLockedFluidName().equals(storedFluid.getUnlocalizedName())) {
- possibleOutput += outputHatch.getCapacity() - outputHatch.getFluidAmount();
- }else if (outputHatch.getFluid() != null && outputHatch.getFluid().getUnlocalizedName().equals(storedFluid.getUnlocalizedName())) {
- possibleOutput += outputHatch.getCapacity() - outputHatch.getFluidAmount();
- } else if (outputHatch.getFluid() == null) {
- possibleOutput += outputHatch.getCapacity() - outputHatch.getFluidAmount();
- }
- }
-
- // output as much as possible
- possibleOutput = Math.min(possibleOutput, storedFluid.amount);
- final FluidStack tempStack = storedFluid.copy();
- tempStack.amount = possibleOutput;
-
- super.addOutput(tempStack);
- storedFluid.amount -= possibleOutput;
- // remove fluid from the tank if it has amount of zero
- if(storedFluid.amount < 1) {
- fluidList.remove(config);
- }
- } else {
- for(FluidStack storedFluid : fluidList) {
- // figure out how much can be output
- int possibleOutput = 0;
- for(GT_MetaTileEntity_Hatch_Output outputHatch : super.mOutputHatches) {
- if(outputHatch.isFluidLocked() && outputHatch.getLockedFluidName().equals(storedFluid.getUnlocalizedName())) {
- possibleOutput += outputHatch.getCapacity() - outputHatch.getFluidAmount();
- }else if (outputHatch.getFluid() != null && outputHatch.getFluid().getUnlocalizedName().equals(storedFluid.getUnlocalizedName())) {
- possibleOutput += outputHatch.getCapacity() - outputHatch.getFluidAmount();
- } else if (outputHatch.getFluid() == null) {
- possibleOutput += outputHatch.getCapacity() - outputHatch.getFluidAmount();
- }
- }
- // output as much as possible
- possibleOutput = Math.min(possibleOutput, storedFluid.amount);
- final FluidStack tempStack = storedFluid.copy();
- tempStack.amount = possibleOutput;
-
- super.addOutput(tempStack);
- storedFluid.amount -= possibleOutput;
- // remove fluid from the tank if it has amount of zero
- if(storedFluid.amount < 1) {
- fluidList.remove(storedFluid);
- }
- }
- }
-
- return true;
- }
-
- public Vector3ic rotateOffsetVector(Vector3ic forgeDirection, int x, int y, int z) {
- final Vector3i offset = new Vector3i();
-
- // either direction on z-axis
- if(forgeDirection.x() == 0 && forgeDirection.z() == -1) {
- offset.x = x;
- offset.y = y;
- offset.z = z;
- }
- if(forgeDirection.x() == 0 && forgeDirection.z() == 1) {
- offset.x = -x;
- offset.y = y;
- offset.z = -z;
- }
- // either direction on x-axis
- if(forgeDirection.x() == -1 && forgeDirection.z() == 0) {
- offset.x = z;
- offset.y = y;
- offset.z = -x;
- }
- if(forgeDirection.x() == 1 && forgeDirection.z() == 0) {
- offset.x = -z;
- offset.y = y;
- offset.z = x;
- }
- // either direction on y-axis
- if(forgeDirection.y() == -1) {
- offset.x = x;
- offset.y = z;
- offset.z = y;
- }
-
- return offset;
- }
-
- @Override
- public boolean checkMachine(IGregTechTileEntity thisController, ItemStack guiSlotItem) {
- // Figure out the vector for the direction the back face of the controller is facing
- final Vector3ic forgeDirection = new Vector3i(
- ForgeDirection.getOrientation(thisController.getBackFacing()).offsetX,
- ForgeDirection.getOrientation(thisController.getBackFacing()).offsetY,
- ForgeDirection.getOrientation(thisController.getBackFacing()).offsetZ
- );
- int minCasingAmount = 20;
- boolean formationChecklist = true; // if this is still true at the end, machine is good to go :)
- float runningCostAcc = 0;
- double fluidCapacityAcc = 0;
-
- // Front slice
- for(int X = -2; X <= 2; X++) {
- for(int Y = -2; Y <= 2; Y++) {
- if(X == 0 && Y == 0) {
- continue; // is controller
- }
-
- // Get next TE
- final Vector3ic offset = rotateOffsetVector(forgeDirection, X, Y, 0);
- IGregTechTileEntity currentTE =
- thisController.getIGregTechTileEntityOffset(offset.x(), offset.y(), offset.z());
-
- // Fluid hatches should touch the storage field.
- // Maintenance/Energy hatch can go anywhere
- if(X > -2 && X < 2 && Y > -2 && Y < 2) {
- if (!super.addMaintenanceToMachineList(currentTE, CASING_TEXTURE_ID)
- && !super.addInputToMachineList(currentTE, CASING_TEXTURE_ID)
- && !super.addOutputToMachineList(currentTE, CASING_TEXTURE_ID)
- && !super.addEnergyInputToMachineList(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(offset.x(), offset.y(), offset.z()) == CASING) {
- // Seems to be valid casing. Decrement counter.
- minCasingAmount--;
- } else {
- formationChecklist = false;
- }
- }
- } else {
- if (!super.addMaintenanceToMachineList(currentTE, CASING_TEXTURE_ID)
- && !super.addEnergyInputToMachineList(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(offset.x(), offset.y(), offset.z()) == CASING) {
- // Seems to be valid casing. Decrement counter.
- minCasingAmount--;
- } else {
- formationChecklist = false;
- }
- }
- }
- }
- }
-
- // Middle three slices
- for(int X = -2; X <= 2; X++) {
- for(int Y = -2; Y <= 2; Y++) {
- for(int Z = -1; Z >= -7; Z--) {
- final Vector3ic offset = rotateOffsetVector(forgeDirection, X, Y, Z);
- if(X > -2 && X < 2 && Y > -2 && Y < 2) {
- if(thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName()
- .equals(STORAGE_FIELD1.getUnlocalizedName())) {
- runningCostAcc += 0.5f;
- fluidCapacityAcc += 500000.0f;
- } else if(thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName()
- .equals(STORAGE_FIELD2.getUnlocalizedName())) {
- runningCostAcc += 1.0f;
- fluidCapacityAcc += 4000000.0f;
- } else if(thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName()
- .equals(STORAGE_FIELD3.getUnlocalizedName())) {
- runningCostAcc += 2.0f;
- fluidCapacityAcc += 16000000.0f;
- } else if(thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName()
- .equals(STORAGE_FIELD4.getUnlocalizedName())) {
- runningCostAcc += 4.0f;
- fluidCapacityAcc += 64000000.0f;
- } else {
- formationChecklist = false;
- }
- continue;
- }
-
- // Get next TE
- IGregTechTileEntity currentTE =
- thisController.getIGregTechTileEntityOffset(offset.x(), offset.y(), offset.z());// x, y ,z
-
- // Corner allows only glass or casings
- if(X == -2 && Y == -2 || X == 2 && Y == 2 || X == -2 && Y == 2 || X == 2 && Y == -2) {
- if(!(thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName().equals(glassNameAE2)
- || thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName().equals(glassNameStained)
- || thisController.getBlockOffset(offset.x(), offset.y(), offset.z()) == CASING)) {
- formationChecklist = false; // do nothing yet
- }
- } else {
- // 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.addInputToMachineList(currentTE, CASING_TEXTURE_ID)
- && !super.addOutputToMachineList(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(offset.x(), offset.y(), offset.z()) == CASING) {
- // Seems to be valid casing. Decrement counter.
- minCasingAmount--;
- } else if (thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName().equals(glassNameAE2)
- || thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName().equals(glassNameStained)) {
- // do nothing lol
- } else {
- formationChecklist = false;
- }
- }
- }
- }
- }
- }
-
- // Front slice
- for(int X = -2; X <= 2; X++) {
- for(int Y = -2; Y <= 2; Y++) {
- // Get next TE
- final Vector3ic offset = rotateOffsetVector(forgeDirection, X, Y, -8);
- IGregTechTileEntity currentTE =
- thisController.getIGregTechTileEntityOffset(offset.x(), offset.y(), offset.z());
-
- // Fluid hatches should touch the storage field.
- // Maintenance/Energy hatch can go anywhere
- if(X > -2 && X < 2 && Y > -2 && Y < 2) {
- if (!super.addMaintenanceToMachineList(currentTE, CASING_TEXTURE_ID)
- && !super.addInputToMachineList(currentTE, CASING_TEXTURE_ID)
- && !super.addOutputToMachineList(currentTE, CASING_TEXTURE_ID)
- && !super.addEnergyInputToMachineList(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(offset.x(), offset.y(), offset.z()) == CASING) {
- // Seems to be valid casing. Decrement counter.
- minCasingAmount--;
- } else {
- formationChecklist = false;
- }
- }
- } else {
- if (!super.addMaintenanceToMachineList(currentTE, CASING_TEXTURE_ID)
- && !super.addEnergyInputToMachineList(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(offset.x(), offset.y(), offset.z()) == CASING) {
- // Seems to be valid casing. Decrement counter.
- minCasingAmount--;
- } else {
- formationChecklist = false;
- }
- }
- }
- }
- }
-
- if(this.mEnergyHatches.size() < 1) {
- System.out.println("At least one energy hatch is required!");
- formationChecklist = false;
- }
-
- if(this.mMaintenanceHatches.size() < 1) {
- System.out.println("You need a maintenance hatch to do maintenance.");
- }
-
- if(minCasingAmount > 0) {
- formationChecklist = false;
- }
-
- if(formationChecklist) {
- runningCost = (int) Math.round(-runningCostAcc);
- capacityPerFluid = (int) Math.round(fluidCapacityAcc / 25.0f);
- }
-
- return formationChecklist;
- }
-
- @Override
- public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) {
- if(doVoidExcess) {
- doVoidExcess = false;
- aPlayer.addChatComponentMessage(new ChatComponentText("Auto-voiding turned off"));
- } else {
- doVoidExcess = true;
- aPlayer.addChatComponentMessage(new ChatComponentText("Auto-voiding turned on"));
- }
- }
-
- @Override
- public String[] getInfoData() {
- final String[] lines = new String[fluidList.size() + 7];
- lines[0] = EnumChatFormatting.YELLOW + "Stored Fluids:" + EnumChatFormatting.RESET;
- for(int i = 0; i < fluidList.size(); i++) {
- lines[i + 1] = i + " - " + fluidList.get(i).getLocalizedName() + ": "
- + fluidList.get(i).amount + "L ("
- + (Math.round(100.0f * fluidList.get(i).amount / capacityPerFluid)) + "%)";
- }
- lines[fluidList.size() + 1] = EnumChatFormatting.YELLOW + "Operational Data:" + EnumChatFormatting.RESET;
- lines[fluidList.size() + 2] = "Auto-voiding: " + doVoidExcess;
- lines[fluidList.size() + 3] = "Per-Fluid Capacity: " + capacityPerFluid + "L";
- lines[fluidList.size() + 4] = "Running Cost: " + (-super.mEUt) + "EU/t";
- lines[fluidList.size() + 5] = "Maintenance Status: " + ((super.getRepairStatus() == super.getIdealStatus())
- ? EnumChatFormatting.GREEN + "Working perfectly" + EnumChatFormatting.RESET
- : EnumChatFormatting.RED + "Has Problems" + EnumChatFormatting.RESET);
- lines[fluidList.size() + 6] = "---------------------------------------------";
- return lines;
- }
-
- @Override
- public void saveNBTData(NBTTagCompound nbt) {
- nbt = (nbt == null) ? new NBTTagCompound() : nbt;
-
- nbt.setInteger("capacityPerFluid", capacityPerFluid);
- nbt.setInteger("runningCost", runningCost);
- nbt.setBoolean("doVoidExcess", doVoidExcess);
- for(int i = 0; i < fluidList.size(); i++) {
- nbt.setTag("" + i, fluidList.get(i).writeToNBT(new NBTTagCompound()));
- }
-
- super.saveNBTData(nbt);
- }
-
- @Override
- public void loadNBTData(NBTTagCompound nbt) {
- nbt = (nbt == null) ? new NBTTagCompound() : nbt;
-
- capacityPerFluid = nbt.getInteger("capacityPerFluid");
- runningCost = nbt.getInteger("runningCost");
- doVoidExcess = nbt.getBoolean("doVoidExcess");
- fluidList.clear();
- for(int i = 0; i < 25; i++) {
- final NBTTagCompound fnbt = (NBTTagCompound) nbt.getTag("" + i);
- if(fnbt == null) {
- break;
- }
- fluidList.add(FluidStack.loadFluidStackFromNBT(fnbt));
- }
-
- super.loadNBTData(nbt);
- }
-
- @Override
- public boolean isGivingInformation() {
- return true;
- }
-
- @Override
- public int getMaxEfficiency(ItemStack var1) {
- return 10000;
- }
-
- @Override
- public int getPollutionPerTick(ItemStack var1) {
- return 0;
- }
-
- @Override
- public int getDamageToComponent(ItemStack var1) {
- return 0;
- }
-
- @Override
- public boolean explodesOnComponentBreak(ItemStack var1) {
- return false;
- }
-}
+package tileentities;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import blocks.Block_TFFTCasing;
+import blocks.Block_TFFTStorageFieldBlockT1;
+import blocks.Block_TFFTStorageFieldBlockT2;
+import blocks.Block_TFFTStorageFieldBlockT3;
+import blocks.Block_TFFTStorageFieldBlockT4;
+import gregtech.api.enums.Textures.BlockIcons;
+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_Hatch_Input;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase;
+import gregtech.api.objects.GT_RenderedTexture;
+import kekztech.MultiFluidHandler;
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.FluidStack;
+import util.Vector3i;
+import util.Vector3ic;
+
+public class GTMTE_FluidMultiStorage extends GT_MetaTileEntity_MultiBlockBase {
+
+ private final String glassNameAE2 = "tile.appliedenergistics2.BlockQuartzGlass";
+ private final String glassNameStained = "tile.stainedGlass";
+ private final Block CASING = Block_TFFTCasing.getInstance();
+ private final Block STORAGE_FIELD1 = Block_TFFTStorageFieldBlockT1.getInstance();
+ private final Block STORAGE_FIELD2 = Block_TFFTStorageFieldBlockT2.getInstance();
+ private final Block STORAGE_FIELD3 = Block_TFFTStorageFieldBlockT3.getInstance();
+ private final Block STORAGE_FIELD4 = Block_TFFTStorageFieldBlockT4.getInstance();
+ private final int CASING_TEXTURE_ID = 176;
+
+ private MultiFluidHandler mfh;
+
+ private int runningCost = 0;
+ private boolean doVoidExcess = false;
+
+ public GTMTE_FluidMultiStorage(int aID, String aName, String aNameRegional) {
+ super(aID, aName, aNameRegional);
+ }
+
+ public GTMTE_FluidMultiStorage(String aName) {
+ super(aName);
+ }
+
+ @Override
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity var1) {
+ return new GTMTE_FluidMultiStorage(super.mName);
+ }
+
+ @Override
+ public String[] getDescription() {
+ return new String[] {
+ "High-Tech fluid tank that can hold up to 25 different fluids",
+ "Has 1/25th of the total capacity as capacity for each fluid",
+ "Rightclicking the controller with a screwdriver will turn on excess voiding",
+ "Fluid storage amount and running cost depends on the storage field blocks used",
+ "Tier I: 500,000L per block, 0.5EU/t",
+ "Tier II: 4,000,000L per block, 1EU/t",
+ "Tier III: 16,000,000L per block, 2EU/t",
+ "Tier IV: 64,000,000L per block, 4EU/t",
+ "------------------------------------------",
+ "Note on hatch locking:",
+ "Use an integrated circuit in the GUI slot to limit which fluid is outputted",
+ "The number of a stored fluid can be obtained through the Tricorder.",
+ "------------------------------------------",
+ "Dimensions: 5x9x5 (WxHxL)",
+ "Structure:",
+ " Controller: Top center",
+ " Energy Hatch: Any top or bottom casing",
+ " Inner 3x7x3 tube are Storage Field Blocks",
+ " Outer 5x7x5 glass shell is AE2 Quartz Glass or Vanilla Stained Glass",
+ " Maintenance Hatch: Any top or bottom casing",
+ " I/O Hatches: Instead of any casing or glass, have to touch storage field"
+ };
+ }
+
+ @Override
+ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex,
+ boolean aActive, boolean aRedstone) {
+ return aSide == aFacing
+ ? new ITexture[]{BlockIcons.casingTexturePages[1][48],
+ new GT_RenderedTexture(aActive
+ ? BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE
+ : BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR)}
+ : new ITexture[]{BlockIcons.casingTexturePages[1][48]};
+ }
+
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return new GT_GUIContainer_MultiMachine(aPlayerInventory, aBaseMetaTileEntity, this.getLocalName(),
+ "MultiblockDisplay.png");
+ }
+
+ @Override
+ public boolean isCorrectMachinePart(ItemStack var1) {
+ return true;
+ }
+
+ @Override
+ public boolean checkRecipe(ItemStack guiSlotItem) {
+
+ this.mEfficiency = 10000 - (this.getIdealStatus() - this.getRepairStatus()) * 1000;
+ this.mEfficiencyIncrease = 10000;
+ this.mEUt = runningCost;
+ super.mMaxProgresstime = 10;
+
+ // TODO skip all of the currently existing code in here when there are only multi hatches
+
+ // Suck in fluids
+ final ArrayList<FluidStack> inputHatchFluids = super.getStoredFluids();
+ if(inputHatchFluids.size() > 0) {
+
+ for(FluidStack fluidStack : inputHatchFluids) {
+
+ final int pushed = mfh.pushFluid(fluidStack);
+ final FluidStack toDeplete = fluidStack.copy();
+ toDeplete.amount = pushed;
+ super.depleteInput(toDeplete);
+ }
+
+ // Void excess if that is turned on
+ if(doVoidExcess) {
+ for(GT_MetaTileEntity_Hatch_Input inputHatch : super.mInputHatches) {
+ inputHatch.setDrainableStack(null);
+ }
+ }
+ }
+
+ // TODO output seems to ignore circuit
+ // Push out fluids
+ if(guiSlotItem != null && guiSlotItem.getUnlocalizedName().equals("gt.integrated_circuit")) {
+ final int config = guiSlotItem.getItemDamage();
+ final FluidStack storedFluid = mfh.getFluid(config);
+ // Sum available output capacity
+ int possibleOutput = 0;
+ for(GT_MetaTileEntity_Hatch_Output outputHatch : super.mOutputHatches) {
+ if(outputHatch.isFluidLocked() && outputHatch.getLockedFluidName().equals(storedFluid.getUnlocalizedName())) {
+ possibleOutput += outputHatch.getCapacity() - outputHatch.getFluidAmount();
+ } else if (outputHatch.getFluid() != null && outputHatch.getFluid().getUnlocalizedName().equals(storedFluid.getUnlocalizedName())) {
+ possibleOutput += outputHatch.getCapacity() - outputHatch.getFluidAmount();
+ } else if (outputHatch.getFluid() == null) {
+ possibleOutput += outputHatch.getCapacity() - outputHatch.getFluidAmount();
+ }
+ }
+
+ // Output as much as possible
+ final FluidStack tempStack = storedFluid.copy();
+ tempStack.amount = possibleOutput;
+ possibleOutput = mfh.pullFluid(tempStack, config);
+ super.addOutput(tempStack);
+
+ } else {
+ final Iterator<FluidStack> storageIterator = mfh.getFluids().iterator();
+ while(storageIterator.hasNext()) {
+ FluidStack storedFluid = storageIterator.next();
+ // Sum available output capacity
+ int possibleOutput = 0;
+ for(GT_MetaTileEntity_Hatch_Output outputHatch : super.mOutputHatches) {
+ if(outputHatch.isFluidLocked() && outputHatch.getLockedFluidName().equals(storedFluid.getUnlocalizedName())) {
+ possibleOutput += outputHatch.getCapacity() - outputHatch.getFluidAmount();
+ } else if (outputHatch.getFluid() != null && outputHatch.getFluid().getUnlocalizedName().equals(storedFluid.getUnlocalizedName())) {
+ possibleOutput += outputHatch.getCapacity() - outputHatch.getFluidAmount();
+ } else if (outputHatch.getFluid() == null) {
+ possibleOutput += outputHatch.getCapacity() - outputHatch.getFluidAmount();
+ }
+ }
+ // output as much as possible
+ final FluidStack tempStack = storedFluid.copy();
+ tempStack.amount = possibleOutput;
+ // TODO possible concurrent modification exception as pullFluid calls remove() without an iterator
+ possibleOutput = mfh.pullFluid(tempStack);
+ super.addOutput(tempStack);
+ }
+ }
+
+ return true;
+ }
+
+ public Vector3ic rotateOffsetVector(Vector3ic forgeDirection, int x, int y, int z) {
+ final Vector3i offset = new Vector3i();
+
+ // either direction on z-axis
+ if(forgeDirection.x() == 0 && forgeDirection.z() == -1) {
+ offset.x = x;
+ offset.y = y;
+ offset.z = z;
+ }
+ if(forgeDirection.x() == 0 && forgeDirection.z() == 1) {
+ offset.x = -x;
+ offset.y = y;
+ offset.z = -z;
+ }
+ // either direction on x-axis
+ if(forgeDirection.x() == -1 && forgeDirection.z() == 0) {
+ offset.x = z;
+ offset.y = y;
+ offset.z = -x;
+ }
+ if(forgeDirection.x() == 1 && forgeDirection.z() == 0) {
+ offset.x = -z;
+ offset.y = y;
+ offset.z = x;
+ }
+ // either direction on y-axis
+ if(forgeDirection.y() == -1) {
+ offset.x = x;
+ offset.y = z;
+ offset.z = y;
+ }
+
+ return offset;
+ }
+
+ @Override
+ public boolean checkMachine(IGregTechTileEntity thisController, ItemStack guiSlotItem) {
+ try {
+ // Figure out the vector for the direction the back face of the controller is facing
+ final Vector3ic forgeDirection = new Vector3i(
+ ForgeDirection.getOrientation(thisController.getBackFacing()).offsetX,
+ ForgeDirection.getOrientation(thisController.getBackFacing()).offsetY,
+ ForgeDirection.getOrientation(thisController.getBackFacing()).offsetZ
+ );
+ int minCasingAmount = 20;
+ boolean formationChecklist = true; // if this is still true at the end, machine is good to go :)
+ float runningCostAcc = 0;
+ double fluidCapacityAcc = 0;
+
+ // Front slice
+ for(int X = -2; X <= 2; X++) {
+ for(int Y = -2; Y <= 2; Y++) {
+ if(X == 0 && Y == 0) {
+ continue; // is controller
+ }
+
+ // Get next TE
+ final Vector3ic offset = rotateOffsetVector(forgeDirection, X, Y, 0);
+ IGregTechTileEntity currentTE =
+ thisController.getIGregTechTileEntityOffset(offset.x(), offset.y(), offset.z());
+
+ // Fluid hatches should touch the storage field.
+ // Maintenance/Energy hatch can go anywhere
+ if(X > -2 && X < 2 && Y > -2 && Y < 2) {
+ if (!super.addMaintenanceToMachineList(currentTE, CASING_TEXTURE_ID)
+ && !super.addInputToMachineList(currentTE, CASING_TEXTURE_ID)
+ && !super.addOutputToMachineList(currentTE, CASING_TEXTURE_ID)
+ && !super.addEnergyInputToMachineList(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(offset.x(), offset.y(), offset.z()) == CASING) {
+ // Seems to be valid casing. Decrement counter.
+ minCasingAmount--;
+ } else {
+ formationChecklist = false;
+ }
+ }
+ } else {
+ if (!super.addMaintenanceToMachineList(currentTE, CASING_TEXTURE_ID)
+ && !super.addEnergyInputToMachineList(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(offset.x(), offset.y(), offset.z()) == CASING) {
+ // Seems to be valid casing. Decrement counter.
+ minCasingAmount--;
+ } else {
+ formationChecklist = false;
+ }
+ }
+ }
+ }
+ }
+
+ // Middle three slices
+ for(int X = -2; X <= 2; X++) {
+ for(int Y = -2; Y <= 2; Y++) {
+ for(int Z = -1; Z >= -7; Z--) {
+ final Vector3ic offset = rotateOffsetVector(forgeDirection, X, Y, Z);
+ if(X > -2 && X < 2 && Y > -2 && Y < 2) {
+ if(thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName()
+ .equals(STORAGE_FIELD1.getUnlocalizedName())) {
+ runningCostAcc += 0.5f;
+ fluidCapacityAcc += 500000.0f;
+ } else if(thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName()
+ .equals(STORAGE_FIELD2.getUnlocalizedName())) {
+ runningCostAcc += 1.0f;
+ fluidCapacityAcc += 4000000.0f;
+ } else if(thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName()
+ .equals(STORAGE_FIELD3.getUnlocalizedName())) {
+ runningCostAcc += 2.0f;
+ fluidCapacityAcc += 16000000.0f;
+ } else if(thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName()
+ .equals(STORAGE_FIELD4.getUnlocalizedName())) {
+ runningCostAcc += 4.0f;
+ fluidCapacityAcc += 64000000.0f;
+ } else {
+ formationChecklist = false;
+ }
+ continue;
+ }
+
+ // Get next TE
+ IGregTechTileEntity currentTE =
+ thisController.getIGregTechTileEntityOffset(offset.x(), offset.y(), offset.z());// x, y ,z
+
+ // Corner allows only glass or casings
+ if(X == -2 && Y == -2 || X == 2 && Y == 2 || X == -2 && Y == 2 || X == 2 && Y == -2) {
+ if(!(thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName().equals(glassNameAE2)
+ || thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName().equals(glassNameStained)
+ || thisController.getBlockOffset(offset.x(), offset.y(), offset.z()) == CASING)) {
+ formationChecklist = false; // do nothing yet
+ }
+ } else {
+ // 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.addInputToMachineList(currentTE, CASING_TEXTURE_ID)
+ && !super.addOutputToMachineList(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(offset.x(), offset.y(), offset.z()) == CASING) {
+ // Seems to be valid casing. Decrement counter.
+ minCasingAmount--;
+ } else if (thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName().equals(glassNameAE2)
+ || thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName().equals(glassNameStained)) {
+ // do nothing lol
+ } else {
+ formationChecklist = false;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // Front slice
+ for(int X = -2; X <= 2; X++) {
+ for(int Y = -2; Y <= 2; Y++) {
+ // Get next TE
+ final Vector3ic offset = rotateOffsetVector(forgeDirection, X, Y, -8);
+ IGregTechTileEntity currentTE =
+ thisController.getIGregTechTileEntityOffset(offset.x(), offset.y(), offset.z());
+
+ // Fluid hatches should touch the storage field.
+ // Maintenance/Energy hatch can go anywhere
+ if(X > -2 && X < 2 && Y > -2 && Y < 2) {
+ if (!super.addMaintenanceToMachineList(currentTE, CASING_TEXTURE_ID)
+ && !super.addInputToMachineList(currentTE, CASING_TEXTURE_ID)
+ && !super.addOutputToMachineList(currentTE, CASING_TEXTURE_ID)
+ && !super.addEnergyInputToMachineList(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(offset.x(), offset.y(), offset.z()) == CASING) {
+ // Seems to be valid casing. Decrement counter.
+ minCasingAmount--;
+ } else {
+ formationChecklist = false;
+ }
+ }
+ } else {
+ if (!super.addMaintenanceToMachineList(currentTE, CASING_TEXTURE_ID)
+ && !super.addEnergyInputToMachineList(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(offset.x(), offset.y(), offset.z()) == CASING) {
+ // Seems to be valid casing. Decrement counter.
+ minCasingAmount--;
+ } else {
+ formationChecklist = false;
+ }
+ }
+ }
+ }
+ }
+
+ if(this.mEnergyHatches.size() < 1) {
+ System.out.println("At least one energy hatch is required!");
+ formationChecklist = false;
+ }
+
+ if(this.mMaintenanceHatches.size() < 1) {
+ System.out.println("You need a maintenance hatch to do maintenance.");
+ formationChecklist = false;
+ }
+
+ if(minCasingAmount > 0) {
+ formationChecklist = false;
+ }
+
+ if(formationChecklist) {
+ runningCost = (int) Math.round(-runningCostAcc);
+ // Update MultiFluidHandler in case storage cells have been changed
+ // TODO update multihatch refs
+ final int capacityPerFluid = (int) Math.round(fluidCapacityAcc / 25.0f);
+ if(mfh == null) {
+ mfh = new MultiFluidHandler(capacityPerFluid);
+ } else {
+ if(mfh.getCapacity() != capacityPerFluid) {
+ mfh = new MultiFluidHandler(capacityPerFluid, mfh.getFluids());
+ }
+ }
+ }
+
+ return formationChecklist;
+ } catch (Exception ex) {
+ System.err.println("CAUGHT CHECKMACHINE EXCEPTION");
+ }
+ return false;
+ }
+
+ @Override
+ public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) {
+ if(doVoidExcess) {
+ doVoidExcess = false;
+ aPlayer.addChatComponentMessage(new ChatComponentText("Auto-voiding turned off"));
+ } else {
+ doVoidExcess = true;
+ aPlayer.addChatComponentMessage(new ChatComponentText("Auto-voiding turned on"));
+ }
+ }
+
+ @Override
+ public String[] getInfoData() {
+ final ArrayList<String> ll = mfh.getInfoData();
+
+ ll.add("Auto-voiding: " + doVoidExcess);
+ ll.add("Per-Fluid Capacity: " + mfh.getCapacity() + "L");
+ ll.add("Running Cost: " + (-super.mEUt) + "EU/t");
+ ll.add("Maintenance Status: " + ((super.getRepairStatus() == super.getIdealStatus())
+ ? EnumChatFormatting.GREEN + "Working perfectly" + EnumChatFormatting.RESET
+ : EnumChatFormatting.RED + "Has Problems" + EnumChatFormatting.RESET));
+ ll.add("---------------------------------------------");
+
+ final String[] a = new String[ll.size()];
+ return ll.toArray(a);
+ }
+
+ @Override
+ public void saveNBTData(NBTTagCompound nbt) {
+ nbt = (nbt == null) ? new NBTTagCompound() : nbt;
+
+ nbt.setInteger("capacityPerFluid", mfh.getCapacity());
+ nbt.setInteger("runningCost", runningCost);
+ nbt.setBoolean("doVoidExcess", doVoidExcess);
+ mfh.getAsNBTTag(nbt);
+
+ super.saveNBTData(nbt);
+ }
+
+ @Override
+ public void loadNBTData(NBTTagCompound nbt) {
+ nbt = (nbt == null) ? new NBTTagCompound() : nbt;
+
+ runningCost = nbt.getInteger("runningCost");
+ doVoidExcess = nbt.getBoolean("doVoidExcess");
+
+ final ArrayList<FluidStack> fluidList = new ArrayList<>();
+ for(int i = 0; i < 25; i++) {
+ final NBTTagCompound fnbt = (NBTTagCompound) nbt.getTag("" + i);
+ if(fnbt == null) {
+ break;
+ }
+ fluidList.add(FluidStack.loadFluidStackFromNBT(fnbt));
+ }
+
+ mfh = new MultiFluidHandler(nbt.getInteger("capacityPerFluid"), fluidList);
+
+ super.loadNBTData(nbt);
+ }
+
+ @Override
+ public boolean isGivingInformation() {
+ return true;
+ }
+
+ @Override
+ public int getMaxEfficiency(ItemStack var1) {
+ return 10000;
+ }
+
+ @Override
+ public int getPollutionPerTick(ItemStack var1) {
+ return 0;
+ }
+
+ @Override
+ public int getDamageToComponent(ItemStack var1) {
+ return 0;
+ }
+
+ @Override
+ public boolean explodesOnComponentBreak(ItemStack var1) {
+ return false;
+ }
+}
diff --git a/src/main/java/tileentities/GTMTE_ModularNuclearReactor.java b/src/main/java/tileentities/GTMTE_ModularNuclearReactor.java
index 8ed2b7d67a..f0d529ee54 100644
--- a/src/main/java/tileentities/GTMTE_ModularNuclearReactor.java
+++ b/src/main/java/tileentities/GTMTE_ModularNuclearReactor.java
@@ -1,190 +1,190 @@
-package tileentities;
-
-import container.GUIContainer_ModularNuclearReactor;
-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[] {
- "DO NOT CHEAT IN THIS MACHINE",
- "I'm not quite finished yet",
- "------------------------------------------",
- "Dimensions: 5x5x5 (WxHxL)",
- "Structure:",
- " Controller: Front center",
- " 80x Radiation Proof Machine Casing (at least)",
- " Dynamo Hatch: ONLY in EU-mode, at least one",
- " Input Bus, Output Bus: Optional but required for automation",
- " 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]};
- }
-
- // TODO: Opening UI crashes server. Controller isn't craftable right now.
- 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;
- }
- }
-
- if(this.mMaintenanceHatches.size() < 1) {
- System.out.println("You need a maintenance hatch to do maintenance.");
- }
-
- 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;
- }
-
-}
+package tileentities;
+
+import container.GUIContainer_ModularNuclearReactor;
+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[] {
+ "DO NOT CHEAT IN THIS MACHINE",
+ "I'm not quite finished yet",
+ "------------------------------------------",
+ "Dimensions: 5x5x5 (WxHxL)",
+ "Structure:",
+ " Controller: Front center",
+ " 80x Radiation Proof Machine Casing (at least)",
+ " Dynamo Hatch: ONLY in EU-mode, at least one",
+ " Input Bus, Output Bus: Optional but required for automation",
+ " 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]};
+ }
+
+ // TODO: Opening UI crashes server. Controller isn't craftable right now.
+ 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;
+ }
+ }
+
+ if(this.mMaintenanceHatches.size() < 1) {
+ System.out.println("You need a maintenance hatch to do maintenance.");
+ }
+
+ 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;
+ }
+
+}
diff --git a/src/main/java/tileentities/GTMTE_SOFuelCellMK1.java b/src/main/java/tileentities/GTMTE_SOFuelCellMK1.java
index 45a86c992a..461046a2c3 100644
--- a/src/main/java/tileentities/GTMTE_SOFuelCellMK1.java
+++ b/src/main/java/tileentities/GTMTE_SOFuelCellMK1.java
@@ -1,328 +1,328 @@
-package tileentities;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-
-import blocks.Block_YSZUnit;
-import gregtech.api.GregTech_API;
-import gregtech.api.enums.Materials;
-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 gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_Recipe;
-import gregtech.api.util.GT_Utility;
-import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
-import net.minecraft.block.Block;
-import net.minecraft.entity.player.InventoryPlayer;
-import net.minecraft.item.ItemStack;
-import net.minecraftforge.common.util.ForgeDirection;
-import net.minecraftforge.fluids.FluidStack;
-import util.Vector3i;
-import util.Vector3ic;
-
-public class GTMTE_SOFuelCellMK1 extends GT_MetaTileEntity_MultiBlockBase {
-
- private final Block CASING = GregTech_API.sBlockCasings4;
- private final int CASING_META = 1;
- private final int CASING_TEXTURE_ID = 49;
-
- private final int OXYGEN_PER_TICK = 20;
- private final int EU_PER_TICK = 1024;
- private final int STEAM_PER_TICK = 900;
-
- public GTMTE_SOFuelCellMK1(int aID, String aName, String aNameRegional) {
- super(aID, aName, aNameRegional);
-
- }
-
- public GTMTE_SOFuelCellMK1(String aName) {
- super(aName);
-
- }
-
- @Override
- public IMetaTileEntity newMetaEntity(IGregTechTileEntity var1) {
- return new GTMTE_SOFuelCellMK1(super.mName);
- }
-
- @Override
- public String[] getDescription() {
- return new String[] {
- "Oxidizes gas fuels to generate electricity without polluting the environment",
- "Consumes 29,480EU worth of fuel with up to 97% efficiency each second",
- "Steam production requires the SOFC to heat up completely first",
- "Outputs " + EU_PER_TICK + "EU/t and " + STEAM_PER_TICK + "L/t Steam",
- "Additionally requires " + OXYGEN_PER_TICK + "L/t Oxygen gas",
- "------------------------------------------",
- "Dimensions: 3x3x5 (WxHxL)",
- "Structure:",
- " Controller: Front center",
- " Dynamo Hatch: Back center",
- " 3x YSZ Ceramic Electrolyte Unit: Center 1x1x3",
- " 12x Clean Stainless Steel Machine Casing (at least)",
- " 6x Reinforced Glass: Touching the Electrolyte Units on the horizontal sides",
- " Maintenance Hatch, I/O Hatches: Instead of any casing"
- };
- }
-
- @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 GT_GUIContainer_MultiMachine(aPlayerInventory, aBaseMetaTileEntity, this.getLocalName(),
- "MultiblockDisplay.png");
- }
-
- @Override
- public boolean isCorrectMachinePart(ItemStack stack) {
- return true;
- }
-
- @Override
- public boolean checkRecipe(ItemStack stack) {
- final ArrayList<FluidStack> storedFluids = super.getStoredFluids();
- Collection<GT_Recipe> recipeList = GT_Recipe_Map.sTurbineFuels.mRecipeList;
-
- if((storedFluids.size() > 0 && recipeList != null)) {
-
- final Iterator<FluidStack> fluidsIterator = storedFluids.iterator();
- while(fluidsIterator.hasNext()) {
-
- final FluidStack hatchFluid = fluidsIterator.next();
- final Iterator<GT_Recipe> recipeIterator = recipeList.iterator();
- while(recipeIterator.hasNext()) {
-
- final GT_Recipe aFuel = recipeIterator.next();
- FluidStack liquid;
- if((liquid = GT_Utility.getFluidForFilledItem(aFuel.getRepresentativeInput(0), true)) != null
- && hatchFluid.isFluidEqual(liquid)) {
-
- liquid.amount = EU_PER_TICK / aFuel.mSpecialValue;
-
- if(super.depleteInput(liquid)) {
-
- if(!super.depleteInput(Materials.Oxygen.getGas(OXYGEN_PER_TICK))) {
- super.mEUt = 0;
- super.mEfficiency = 0;
- return false;
- }
-
- super.mEUt = EU_PER_TICK;
- super.mProgresstime = 1;
- super.mMaxProgresstime = 1;
- super.mEfficiencyIncrease = 5;
- if(super.mEfficiency == getMaxEfficiency(null)) {
- super.addOutput(GT_ModHandler.getSteam(STEAM_PER_TICK));
- }
- return true;
- }
- }
- }
- }
- }
-
- super.mEUt = 0;
- super.mEfficiency = 0;
- return false;
- }
-
- public Vector3ic rotateOffsetVector(Vector3ic forgeDirection, int x, int y, int z) {
- final Vector3i offset = new Vector3i();
-
- // either direction on z-axis
- if(forgeDirection.x() == 0 && forgeDirection.z() == -1) {
- offset.x = x;
- offset.y = y;
- offset.z = z;
- }
- if(forgeDirection.x() == 0 && forgeDirection.z() == 1) {
- offset.x = -x;
- offset.y = y;
- offset.z = -z;
- }
- // either direction on x-axis
- if(forgeDirection.x() == -1 && forgeDirection.z() == 0) {
- offset.x = z;
- offset.y = y;
- offset.z = -x;
- }
- if(forgeDirection.x() == 1 && forgeDirection.z() == 0) {
- offset.x = -z;
- offset.y = y;
- offset.z = x;
- }
- // either direction on y-axis
- if(forgeDirection.y() == -1) {
- offset.x = x;
- offset.y = z;
- offset.z = y;
- }
-
- return offset;
- }
-
- @Override
- public boolean checkMachine(IGregTechTileEntity thisController, ItemStack guiSlotItem) {
- // Figure out the vector for the direction the back face of the controller is facing
- final Vector3ic forgeDirection = new Vector3i(
- ForgeDirection.getOrientation(thisController.getBackFacing()).offsetX,
- ForgeDirection.getOrientation(thisController.getBackFacing()).offsetY,
- ForgeDirection.getOrientation(thisController.getBackFacing()).offsetZ
- );
- int minCasingAmount = 12;
- boolean formationChecklist = true; // if this is still true at the end, machine is good to go :)
-
- // Front slice
- for(int X = -1; X <= 1; X++) {
- for(int Y = -1; Y <= 1; Y++) {
- if(X == 0 && Y == 0) {
- continue; // is controller
- }
-
- // Get next TE
- final Vector3ic offset = rotateOffsetVector(forgeDirection, X, Y, 0);
- IGregTechTileEntity currentTE =
- thisController.getIGregTechTileEntityOffset(offset.x(), offset.y(), offset.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)) {
-
- // If it's not a hatch, is it the right casing for this machine? Check block and block meta.
- if ((thisController.getBlockOffset(offset.x(), offset.y(), offset.z()) == CASING)
- && (thisController.getMetaIDOffset(offset.x(), offset.y(), offset.z()) == CASING_META)) {
- // Seems to be valid casing. Decrement counter.
- minCasingAmount--;
- } else {
- formationChecklist = false;
- }
- }
- }
- }
-
- // Middle three slices
- for(int X = -1; X <= 1; X++) {
- for(int Y = -1; Y <= 1; Y++) {
- for(int Z = -1; Z >= -3; Z--) {
- final Vector3ic offset = rotateOffsetVector(forgeDirection, X, Y, Z);
- if(X == 0 && Y == 0) {
- if(!thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName()
- .equals(Block_YSZUnit.getInstance().getUnlocalizedName())) {
- formationChecklist = false;
- }
- continue;
- }
- if(Y == 0 && (X == -1 || X == 1)) {
- if(!thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName()
- .equals("blockAlloyGlass")) {
- formationChecklist = false;
- }
- continue;
- }
- // Get next TE
- IGregTechTileEntity currentTE =
- thisController.getIGregTechTileEntityOffset(offset.x(), offset.y(), offset.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)) {
-
- // If it's not a hatch, is it the right casing for this machine? Check block and block meta.
- if ((thisController.getBlockOffset(offset.x(), offset.y(), offset.z()) == CASING)
- && (thisController.getMetaIDOffset(offset.x(), offset.y(), offset.z()) == CASING_META)) {
- // Seems to be valid casing. Decrement counter.
- minCasingAmount--;
- } else {
- formationChecklist = false;
- }
- }
- }
- }
- }
-
- // Back slice
- for(int X = -1; X <= 1; X++) {
- for(int Y = -1; Y <= 1; Y++) {
- // Get next TE
- final Vector3ic offset = rotateOffsetVector(forgeDirection, X, Y, -4);
- IGregTechTileEntity currentTE =
- thisController.getIGregTechTileEntityOffset(offset.x(), offset.y(), offset.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(offset.x(), offset.y(), offset.z()) == CASING)
- && (thisController.getMetaIDOffset(offset.x(), offset.y(), offset.z()) == CASING_META)) {
- // Seems to be valid casing. Decrement counter.
- minCasingAmount--;
- } else {
- formationChecklist = false;
- }
- }
- }
- }
-
- if(minCasingAmount > 0) {
- formationChecklist = false;
- }
-
- if(this.mDynamoHatches.size() != 1) {
- System.out.println("Exactly one dynamo hatch is required!");
- formationChecklist = false;
- }
- if(this.mInputHatches.size() < 2) {
- System.out.println("At least two input hatches are required!");
- formationChecklist = false;
- }
-
- if(this.mMaintenanceHatches.size() < 1) {
- System.out.println("You need a maintenance hatch to do maintenance.");
- }
-
- return formationChecklist;
- }
-
- @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;
- }
-
-}
+package tileentities;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import blocks.Block_YSZUnit;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+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 gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.FluidStack;
+import util.Vector3i;
+import util.Vector3ic;
+
+public class GTMTE_SOFuelCellMK1 extends GT_MetaTileEntity_MultiBlockBase {
+
+ private final Block CASING = GregTech_API.sBlockCasings4;
+ private final int CASING_META = 1;
+ private final int CASING_TEXTURE_ID = 49;
+
+ private final int OXYGEN_PER_TICK = 20;
+ private final int EU_PER_TICK = 1024;
+ private final int STEAM_PER_TICK = 900;
+
+ public GTMTE_SOFuelCellMK1(int aID, String aName, String aNameRegional) {
+ super(aID, aName, aNameRegional);
+
+ }
+
+ public GTMTE_SOFuelCellMK1(String aName) {
+ super(aName);
+
+ }
+
+ @Override
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity var1) {
+ return new GTMTE_SOFuelCellMK1(super.mName);
+ }
+
+ @Override
+ public String[] getDescription() {
+ return new String[] {
+ "Oxidizes gas fuels to generate electricity without polluting the environment",
+ "Consumes 29,480EU worth of fuel with up to 97% efficiency each second",
+ "Steam production requires the SOFC to heat up completely first",
+ "Outputs " + EU_PER_TICK + "EU/t and " + STEAM_PER_TICK + "L/t Steam",
+ "Additionally requires " + OXYGEN_PER_TICK + "L/t Oxygen gas",
+ "------------------------------------------",
+ "Dimensions: 3x3x5 (WxHxL)",
+ "Structure:",
+ " Controller: Front center",
+ " Dynamo Hatch: Back center",
+ " 3x YSZ Ceramic Electrolyte Unit: Center 1x1x3",
+ " 12x Clean Stainless Steel Machine Casing (at least)",
+ " 6x Reinforced Glass: Touching the Electrolyte Units on the horizontal sides",
+ " Maintenance Hatch, I/O Hatches: Instead of any casing"
+ };
+ }
+
+ @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 GT_GUIContainer_MultiMachine(aPlayerInventory, aBaseMetaTileEntity, this.getLocalName(),
+ "MultiblockDisplay.png");
+ }
+
+ @Override
+ public boolean isCorrectMachinePart(ItemStack stack) {
+ return true;
+ }
+
+ @Override
+ public boolean checkRecipe(ItemStack stack) {
+ final ArrayList<FluidStack> storedFluids = super.getStoredFluids();
+ Collection<GT_Recipe> recipeList = GT_Recipe_Map.sTurbineFuels.mRecipeList;
+
+ if((storedFluids.size() > 0 && recipeList != null)) {
+
+ final Iterator<FluidStack> fluidsIterator = storedFluids.iterator();
+ while(fluidsIterator.hasNext()) {
+
+ final FluidStack hatchFluid = fluidsIterator.next();
+ final Iterator<GT_Recipe> recipeIterator = recipeList.iterator();
+ while(recipeIterator.hasNext()) {
+
+ final GT_Recipe aFuel = recipeIterator.next();
+ FluidStack liquid;
+ if((liquid = GT_Utility.getFluidForFilledItem(aFuel.getRepresentativeInput(0), true)) != null
+ && hatchFluid.isFluidEqual(liquid)) {
+
+ liquid.amount = EU_PER_TICK / aFuel.mSpecialValue;
+
+ if(super.depleteInput(liquid)) {
+
+ if(!super.depleteInput(Materials.Oxygen.getGas(OXYGEN_PER_TICK))) {
+ super.mEUt = 0;
+ super.mEfficiency = 0;
+ return false;
+ }
+
+ super.mEUt = EU_PER_TICK;
+ super.mProgresstime = 1;
+ super.mMaxProgresstime = 1;
+ super.mEfficiencyIncrease = 5;
+ if(super.mEfficiency == getMaxEfficiency(null)) {
+ super.addOutput(GT_ModHandler.getSteam(STEAM_PER_TICK));
+ }
+ return true;
+ }
+ }
+ }
+ }
+ }
+
+ super.mEUt = 0;
+ super.mEfficiency = 0;
+ return false;
+ }
+
+ public Vector3ic rotateOffsetVector(Vector3ic forgeDirection, int x, int y, int z) {
+ final Vector3i offset = new Vector3i();
+
+ // either direction on z-axis
+ if(forgeDirection.x() == 0 && forgeDirection.z() == -1) {
+ offset.x = x;
+ offset.y = y;
+ offset.z = z;
+ }
+ if(forgeDirection.x() == 0 && forgeDirection.z() == 1) {
+ offset.x = -x;
+ offset.y = y;
+ offset.z = -z;
+ }
+ // either direction on x-axis
+ if(forgeDirection.x() == -1 && forgeDirection.z() == 0) {
+ offset.x = z;
+ offset.y = y;
+ offset.z = -x;
+ }
+ if(forgeDirection.x() == 1 && forgeDirection.z() == 0) {
+ offset.x = -z;
+ offset.y = y;
+ offset.z = x;
+ }
+ // either direction on y-axis
+ if(forgeDirection.y() == -1) {
+ offset.x = x;
+ offset.y = z;
+ offset.z = y;
+ }
+
+ return offset;
+ }
+
+ @Override
+ public boolean checkMachine(IGregTechTileEntity thisController, ItemStack guiSlotItem) {
+ // Figure out the vector for the direction the back face of the controller is facing
+ final Vector3ic forgeDirection = new Vector3i(
+ ForgeDirection.getOrientation(thisController.getBackFacing()).offsetX,
+ ForgeDirection.getOrientation(thisController.getBackFacing()).offsetY,
+ ForgeDirection.getOrientation(thisController.getBackFacing()).offsetZ
+ );
+ int minCasingAmount = 12;
+ boolean formationChecklist = true; // if this is still true at the end, machine is good to go :)
+
+ // Front slice
+ for(int X = -1; X <= 1; X++) {
+ for(int Y = -1; Y <= 1; Y++) {
+ if(X == 0 && Y == 0) {
+ continue; // is controller
+ }
+
+ // Get next TE
+ final Vector3ic offset = rotateOffsetVector(forgeDirection, X, Y, 0);
+ IGregTechTileEntity currentTE =
+ thisController.getIGregTechTileEntityOffset(offset.x(), offset.y(), offset.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)) {
+
+ // If it's not a hatch, is it the right casing for this machine? Check block and block meta.
+ if ((thisController.getBlockOffset(offset.x(), offset.y(), offset.z()) == CASING)
+ && (thisController.getMetaIDOffset(offset.x(), offset.y(), offset.z()) == CASING_META)) {
+ // Seems to be valid casing. Decrement counter.
+ minCasingAmount--;
+ } else {
+ formationChecklist = false;
+ }
+ }
+ }
+ }
+
+ // Middle three slices
+ for(int X = -1; X <= 1; X++) {
+ for(int Y = -1; Y <= 1; Y++) {
+ for(int Z = -1; Z >= -3; Z--) {
+ final Vector3ic offset = rotateOffsetVector(forgeDirection, X, Y, Z);
+ if(X == 0 && Y == 0) {
+ if(!thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName()
+ .equals(Block_YSZUnit.getInstance().getUnlocalizedName())) {
+ formationChecklist = false;
+ }
+ continue;
+ }
+ if(Y == 0 && (X == -1 || X == 1)) {
+ if(!thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName()
+ .equals("blockAlloyGlass")) {
+ formationChecklist = false;
+ }
+ continue;
+ }
+ // Get next TE
+ IGregTechTileEntity currentTE =
+ thisController.getIGregTechTileEntityOffset(offset.x(), offset.y(), offset.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)) {
+
+ // If it's not a hatch, is it the right casing for this machine? Check block and block meta.
+ if ((thisController.getBlockOffset(offset.x(), offset.y(), offset.z()) == CASING)
+ && (thisController.getMetaIDOffset(offset.x(), offset.y(), offset.z()) == CASING_META)) {
+ // Seems to be valid casing. Decrement counter.
+ minCasingAmount--;
+ } else {
+ formationChecklist = false;
+ }
+ }
+ }
+ }
+ }
+
+ // Back slice
+ for(int X = -1; X <= 1; X++) {
+ for(int Y = -1; Y <= 1; Y++) {
+ // Get next TE
+ final Vector3ic offset = rotateOffsetVector(forgeDirection, X, Y, -4);
+ IGregTechTileEntity currentTE =
+ thisController.getIGregTechTileEntityOffset(offset.x(), offset.y(), offset.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(offset.x(), offset.y(), offset.z()) == CASING)
+ && (thisController.getMetaIDOffset(offset.x(), offset.y(), offset.z()) == CASING_META)) {
+ // Seems to be valid casing. Decrement counter.
+ minCasingAmount--;
+ } else {
+ formationChecklist = false;
+ }
+ }
+ }
+ }
+
+ if(minCasingAmount > 0) {
+ formationChecklist = false;
+ }
+
+ if(this.mDynamoHatches.size() != 1) {
+ System.out.println("Exactly one dynamo hatch is required!");
+ formationChecklist = false;
+ }
+ if(this.mInputHatches.size() < 2) {
+ System.out.println("At least two input hatches are required!");
+ formationChecklist = false;
+ }
+
+ if(this.mMaintenanceHatches.size() < 1) {
+ System.out.println("You need a maintenance hatch to do maintenance.");
+ }
+
+ return formationChecklist;
+ }
+
+ @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;
+ }
+
+}
diff --git a/src/main/java/tileentities/GTMTE_SOFuelCellMK2.java b/src/main/java/tileentities/GTMTE_SOFuelCellMK2.java
index 9b8c9ca7b3..3708ef8cc4 100644
--- a/src/main/java/tileentities/GTMTE_SOFuelCellMK2.java
+++ b/src/main/java/tileentities/GTMTE_SOFuelCellMK2.java
@@ -1,328 +1,328 @@
-package tileentities;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-
-import blocks.Block_GDCUnit;
-import gregtech.api.GregTech_API;
-import gregtech.api.enums.Materials;
-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 gregtech.api.util.GT_Recipe;
-import gregtech.api.util.GT_Utility;
-import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
-import net.minecraft.block.Block;
-import net.minecraft.entity.player.InventoryPlayer;
-import net.minecraft.item.ItemStack;
-import net.minecraftforge.common.util.ForgeDirection;
-import net.minecraftforge.fluids.FluidRegistry;
-import net.minecraftforge.fluids.FluidStack;
-import util.Vector3i;
-import util.Vector3ic;
-
-public class GTMTE_SOFuelCellMK2 extends GT_MetaTileEntity_MultiBlockBase {
-
- final Block CASING = GregTech_API.sBlockCasings4;
- final int CASING_META = 0;
- final int CASING_TEXTURE_ID = 48;
-
- private final int OXYGEN_PER_TICK = 100;
- private final int EU_PER_TICK = 24576; // 100% Efficiency, 3A IV
- private final int STEAM_PER_TICK = 4800; // SH Steam (10,800EU/t @ 150% Efficiency)
-
- public GTMTE_SOFuelCellMK2(int aID, String aName, String aNameRegional) {
- super(aID, aName, aNameRegional);
-
- }
-
- public GTMTE_SOFuelCellMK2(String aName) {
- super(aName);
-
- }
-
- @Override
- public IMetaTileEntity newMetaEntity(IGregTechTileEntity var1) {
- return new GTMTE_SOFuelCellMK2(super.mName);
- }
-
- @Override
- public String[] getDescription() {
- return new String[] {
- "Oxidizes gas fuels to generate electricity without polluting the environment",
- "Consumes 442,200EU worth of fuel with up to 160% efficiency each second",
- "Steam production requires the SOFC to heat up completely first",
- "Outputs " + EU_PER_TICK + "EU/t and " + STEAM_PER_TICK + "L/t Superheated Steam",
- "Additionally requires " + OXYGEN_PER_TICK + "L/t Oxygen gas",
- "------------------------------------------",
- "Dimensions: 3x3x5 (WxHxL)",
- "Structure:",
- " Controller front center",
- " Dynamo Hatch back center",
- " 3x GDC Ceramic Electrolyte Unit (center 1x1x3)",
- " 12x Robust Tungstensteel Machine Casing (at least)",
- " 6x Reinforced Glass: Touching the Electrolyte Units on the horizontal sides",
- " Maintenance Hatch, I/O Hatches: Instead of any casing"
- };
- }
-
- @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 GT_GUIContainer_MultiMachine(aPlayerInventory, aBaseMetaTileEntity, this.getLocalName(),
- "MultiblockDisplay.png");
- }
-
- @Override
- public boolean isCorrectMachinePart(ItemStack stack) {
- return true;
- }
-
- @Override
- public boolean checkRecipe(ItemStack stack) {
- final ArrayList<FluidStack> storedFluids = super.getStoredFluids();
- Collection<GT_Recipe> recipeList = GT_Recipe_Map.sTurbineFuels.mRecipeList;
-
- if((storedFluids.size() > 0 && recipeList != null)) {
-
- final Iterator<FluidStack> fluidsIterator = storedFluids.iterator();
- while(fluidsIterator.hasNext()) {
-
- final FluidStack hatchFluid = fluidsIterator.next();
- final Iterator<GT_Recipe> recipeIterator = recipeList.iterator();
- while(recipeIterator.hasNext()) {
-
- final GT_Recipe aFuel = recipeIterator.next();
- FluidStack liquid;
- if((liquid = GT_Utility.getFluidForFilledItem(aFuel.getRepresentativeInput(0), true)) != null
- && hatchFluid.isFluidEqual(liquid)) {
-
- liquid.amount = EU_PER_TICK / aFuel.mSpecialValue;
-
- if(super.depleteInput(liquid)) {
-
- if(!super.depleteInput(Materials.Oxygen.getGas(OXYGEN_PER_TICK))) {
- super.mEUt = 0;
- super.mEfficiency = 0;
- return false;
- }
-
- super.mEUt = EU_PER_TICK;
- super.mProgresstime = 1;
- super.mMaxProgresstime = 1;
- super.mEfficiencyIncrease = 20;
- if(super.mEfficiency == getMaxEfficiency(null)) {
- super.addOutput(FluidRegistry.getFluidStack("ic2superheatedsteam", STEAM_PER_TICK));
- }
- return true;
- }
- }
- }
- }
- }
-
- super.mEUt = 0;
- super.mEfficiency = 0;
- return false;
- }
-
- public Vector3ic rotateOffsetVector(Vector3ic forgeDirection, int x, int y, int z) {
- final Vector3i offset = new Vector3i();
-
- // either direction on z-axis
- if(forgeDirection.x() == 0 && forgeDirection.z() == -1) {
- offset.x = x;
- offset.y = y;
- offset.z = z;
- }
- if(forgeDirection.x() == 0 && forgeDirection.z() == 1) {
- offset.x = -x;
- offset.y = y;
- offset.z = -z;
- }
- // either direction on x-axis
- if(forgeDirection.x() == -1 && forgeDirection.z() == 0) {
- offset.x = z;
- offset.y = y;
- offset.z = -x;
- }
- if(forgeDirection.x() == 1 && forgeDirection.z() == 0) {
- offset.x = -z;
- offset.y = y;
- offset.z = x;
- }
- // either direction on y-axis
- if(forgeDirection.y() == -1) {
- offset.x = x;
- offset.y = z;
- offset.z = y;
- }
-
- return offset;
- }
-
- @Override
- public boolean checkMachine(IGregTechTileEntity thisController, ItemStack guiSlotItem) {
- // Figure out the vector for the direction the back face of the controller is facing
- final Vector3ic forgeDirection = new Vector3i(
- ForgeDirection.getOrientation(thisController.getBackFacing()).offsetX,
- ForgeDirection.getOrientation(thisController.getBackFacing()).offsetY,
- ForgeDirection.getOrientation(thisController.getBackFacing()).offsetZ
- );
- int minCasingAmount = 12;
- boolean formationChecklist = true; // if this is still true at the end, machine is good to go :)
-
- // Front slice
- for(int X = -1; X <= 1; X++) {
- for(int Y = -1; Y <= 1; Y++) {
- if(X == 0 && Y == 0) {
- continue; // is controller
- }
-
- // Get next TE
- final Vector3ic offset = rotateOffsetVector(forgeDirection, X, Y, 0);
- IGregTechTileEntity currentTE =
- thisController.getIGregTechTileEntityOffset(offset.x(), offset.y(), offset.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)) {
-
- // If it's not a hatch, is it the right casing for this machine? Check block and block meta.
- if ((thisController.getBlockOffset(offset.x(), offset.y(), offset.z()) == CASING)
- && (thisController.getMetaIDOffset(offset.x(), offset.y(), offset.z()) == CASING_META)) {
- // Seems to be valid casing. Decrement counter.
- minCasingAmount--;
- } else {
- formationChecklist = false;
- }
- }
- }
- }
-
- // Middle three slices
- for(int X = -1; X <= 1; X++) {
- for(int Y = -1; Y <= 1; Y++) {
- for(int Z = -1; Z >= -3; Z--) {
- final Vector3ic offset = rotateOffsetVector(forgeDirection, X, Y, Z);
- if(X == 0 && Y == 0) {
- if(!thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName()
- .equals(Block_GDCUnit.getInstance().getUnlocalizedName())) {
- formationChecklist = false;
- }
- continue;
- }
- if(Y == 0 && (X == -1 || X == 1)) {
- if(!thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName()
- .equals("blockAlloyGlass")) {
- formationChecklist = false;
- }
- continue;
- }
- // Get next TE
- IGregTechTileEntity currentTE =
- thisController.getIGregTechTileEntityOffset(offset.x(), offset.y(), offset.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)) {
-
- // If it's not a hatch, is it the right casing for this machine? Check block and block meta.
- if ((thisController.getBlockOffset(offset.x(), offset.y(), offset.z()) == CASING)
- && (thisController.getMetaIDOffset(offset.x(), offset.y(), offset.z()) == CASING_META)) {
- // Seems to be valid casing. Decrement counter.
- minCasingAmount--;
- } else {
- formationChecklist = false;
- }
- }
- }
- }
- }
-
- // Back slice
- for(int X = -1; X <= 1; X++) {
- for(int Y = -1; Y <= 1; Y++) {
- // Get next TE
- final Vector3ic offset = rotateOffsetVector(forgeDirection, X, Y, -4);
- IGregTechTileEntity currentTE =
- thisController.getIGregTechTileEntityOffset(offset.x(), offset.y(), offset.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(offset.x(), offset.y(), offset.z()) == CASING)
- && (thisController.getMetaIDOffset(offset.x(), offset.y(), offset.z()) == CASING_META)) {
- // Seems to be valid casing. Decrement counter.
- minCasingAmount--;
- } else {
- formationChecklist = false;
- }
- }
- }
- }
-
- if(minCasingAmount > 0) {
- formationChecklist = false;
- }
-
- if(this.mDynamoHatches.size() != 1) {
- System.out.println("Exactly one dynamo hatch is required!");
- formationChecklist = false;
- }
- if(this.mInputHatches.size() < 2) {
- System.out.println("At least two input hatches are required!");
- formationChecklist = false;
- }
-
- if(this.mMaintenanceHatches.size() < 1) {
- System.out.println("You need a maintenance hatch to do maintenance.");
- }
-
- return formationChecklist;
- }
-
- @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;
- }
-
-}
+package tileentities;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import blocks.Block_GDCUnit;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
+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 gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.FluidRegistry;
+import net.minecraftforge.fluids.FluidStack;
+import util.Vector3i;
+import util.Vector3ic;
+
+public class GTMTE_SOFuelCellMK2 extends GT_MetaTileEntity_MultiBlockBase {
+
+ final Block CASING = GregTech_API.sBlockCasings4;
+ final int CASING_META = 0;
+ final int CASING_TEXTURE_ID = 48;
+
+ private final int OXYGEN_PER_TICK = 100;
+ private final int EU_PER_TICK = 24576; // 100% Efficiency, 3A IV
+ private final int STEAM_PER_TICK = 4800; // SH Steam (10,800EU/t @ 150% Efficiency)
+
+ public GTMTE_SOFuelCellMK2(int aID, String aName, String aNameRegional) {
+ super(aID, aName, aNameRegional);
+
+ }
+
+ public GTMTE_SOFuelCellMK2(String aName) {
+ super(aName);
+
+ }
+
+ @Override
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity var1) {
+ return new GTMTE_SOFuelCellMK2(super.mName);
+ }
+
+ @Override
+ public String[] getDescription() {
+ return new String[] {
+ "Oxidizes gas fuels to generate electricity without polluting the environment",
+ "Consumes 442,200EU worth of fuel with up to 160% efficiency each second",
+ "Steam production requires the SOFC to heat up completely first",
+ "Outputs " + EU_PER_TICK + "EU/t and " + STEAM_PER_TICK + "L/t Superheated Steam",
+ "Additionally requires " + OXYGEN_PER_TICK + "L/t Oxygen gas",
+ "------------------------------------------",
+ "Dimensions: 3x3x5 (WxHxL)",
+ "Structure:",
+ " Controller front center",
+ " Dynamo Hatch back center",
+ " 3x GDC Ceramic Electrolyte Unit (center 1x1x3)",
+ " 12x Robust Tungstensteel Machine Casing (at least)",
+ " 6x Reinforced Glass: Touching the Electrolyte Units on the horizontal sides",
+ " Maintenance Hatch, I/O Hatches: Instead of any casing"
+ };
+ }
+
+ @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 GT_GUIContainer_MultiMachine(aPlayerInventory, aBaseMetaTileEntity, this.getLocalName(),
+ "MultiblockDisplay.png");
+ }
+
+ @Override
+ public boolean isCorrectMachinePart(ItemStack stack) {
+ return true;
+ }
+
+ @Override
+ public boolean checkRecipe(ItemStack stack) {
+ final ArrayList<FluidStack> storedFluids = super.getStoredFluids();
+ Collection<GT_Recipe> recipeList = GT_Recipe_Map.sTurbineFuels.mRecipeList;
+
+ if((storedFluids.size() > 0 && recipeList != null)) {
+
+ final Iterator<FluidStack> fluidsIterator = storedFluids.iterator();
+ while(fluidsIterator.hasNext()) {
+
+ final FluidStack hatchFluid = fluidsIterator.next();
+ final Iterator<GT_Recipe> recipeIterator = recipeList.iterator();
+ while(recipeIterator.hasNext()) {
+
+ final GT_Recipe aFuel = recipeIterator.next();
+ FluidStack liquid;
+ if((liquid = GT_Utility.getFluidForFilledItem(aFuel.getRepresentativeInput(0), true)) != null
+ && hatchFluid.isFluidEqual(liquid)) {
+
+ liquid.amount = EU_PER_TICK / aFuel.mSpecialValue;
+
+ if(super.depleteInput(liquid)) {
+
+ if(!super.depleteInput(Materials.Oxygen.getGas(OXYGEN_PER_TICK))) {
+ super.mEUt = 0;
+ super.mEfficiency = 0;
+ return false;
+ }
+
+ super.mEUt = EU_PER_TICK;
+ super.mProgresstime = 1;
+ super.mMaxProgresstime = 1;
+ super.mEfficiencyIncrease = 20;
+ if(super.mEfficiency == getMaxEfficiency(null)) {
+ super.addOutput(FluidRegistry.getFluidStack("ic2superheatedsteam", STEAM_PER_TICK));
+ }
+ return true;
+ }
+ }
+ }
+ }
+ }
+
+ super.mEUt = 0;
+ super.mEfficiency = 0;
+ return false;
+ }
+
+ public Vector3ic rotateOffsetVector(Vector3ic forgeDirection, int x, int y, int z) {
+ final Vector3i offset = new Vector3i();
+
+ // either direction on z-axis
+ if(forgeDirection.x() == 0 && forgeDirection.z() == -1) {
+ offset.x = x;
+ offset.y = y;
+ offset.z = z;
+ }
+ if(forgeDirection.x() == 0 && forgeDirection.z() == 1) {
+ offset.x = -x;
+ offset.y = y;
+ offset.z = -z;
+ }
+ // either direction on x-axis
+ if(forgeDirection.x() == -1 && forgeDirection.z() == 0) {
+ offset.x = z;
+ offset.y = y;
+ offset.z = -x;
+ }
+ if(forgeDirection.x() == 1 && forgeDirection.z() == 0) {
+ offset.x = -z;
+ offset.y = y;
+ offset.z = x;
+ }
+ // either direction on y-axis
+ if(forgeDirection.y() == -1) {
+ offset.x = x;
+ offset.y = z;
+ offset.z = y;
+ }
+
+ return offset;
+ }
+
+ @Override
+ public boolean checkMachine(IGregTechTileEntity thisController, ItemStack guiSlotItem) {
+ // Figure out the vector for the direction the back face of the controller is facing
+ final Vector3ic forgeDirection = new Vector3i(
+ ForgeDirection.getOrientation(thisController.getBackFacing()).offsetX,
+ ForgeDirection.getOrientation(thisController.getBackFacing()).offsetY,
+ ForgeDirection.getOrientation(thisController.getBackFacing()).offsetZ
+ );
+ int minCasingAmount = 12;
+ boolean formationChecklist = true; // if this is still true at the end, machine is good to go :)
+
+ // Front slice
+ for(int X = -1; X <= 1; X++) {
+ for(int Y = -1; Y <= 1; Y++) {
+ if(X == 0 && Y == 0) {
+ continue; // is controller
+ }
+
+ // Get next TE
+ final Vector3ic offset = rotateOffsetVector(forgeDirection, X, Y, 0);
+ IGregTechTileEntity currentTE =
+ thisController.getIGregTechTileEntityOffset(offset.x(), offset.y(), offset.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)) {
+
+ // If it's not a hatch, is it the right casing for this machine? Check block and block meta.
+ if ((thisController.getBlockOffset(offset.x(), offset.y(), offset.z()) == CASING)
+ && (thisController.getMetaIDOffset(offset.x(), offset.y(), offset.z()) == CASING_META)) {
+ // Seems to be valid casing. Decrement counter.
+ minCasingAmount--;
+ } else {
+ formationChecklist = false;
+ }
+ }
+ }
+ }
+
+ // Middle three slices
+ for(int X = -1; X <= 1; X++) {
+ for(int Y = -1; Y <= 1; Y++) {
+ for(int Z = -1; Z >= -3; Z--) {
+ final Vector3ic offset = rotateOffsetVector(forgeDirection, X, Y, Z);
+ if(X == 0 && Y == 0) {
+ if(!thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName()
+ .equals(Block_GDCUnit.getInstance().getUnlocalizedName())) {
+ formationChecklist = false;
+ }
+ continue;
+ }
+ if(Y == 0 && (X == -1 || X == 1)) {
+ if(!thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName()
+ .equals("blockAlloyGlass")) {
+ formationChecklist = false;
+ }
+ continue;
+ }
+ // Get next TE
+ IGregTechTileEntity currentTE =
+ thisController.getIGregTechTileEntityOffset(offset.x(), offset.y(), offset.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)) {
+
+ // If it's not a hatch, is it the right casing for this machine? Check block and block meta.
+ if ((thisController.getBlockOffset(offset.x(), offset.y(), offset.z()) == CASING)
+ && (thisController.getMetaIDOffset(offset.x(), offset.y(), offset.z()) == CASING_META)) {
+ // Seems to be valid casing. Decrement counter.
+ minCasingAmount--;
+ } else {
+ formationChecklist = false;
+ }
+ }
+ }
+ }
+ }
+
+ // Back slice
+ for(int X = -1; X <= 1; X++) {
+ for(int Y = -1; Y <= 1; Y++) {
+ // Get next TE
+ final Vector3ic offset = rotateOffsetVector(forgeDirection, X, Y, -4);
+ IGregTechTileEntity currentTE =
+ thisController.getIGregTechTileEntityOffset(offset.x(), offset.y(), offset.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(offset.x(), offset.y(), offset.z()) == CASING)
+ && (thisController.getMetaIDOffset(offset.x(), offset.y(), offset.z()) == CASING_META)) {
+ // Seems to be valid casing. Decrement counter.
+ minCasingAmount--;
+ } else {
+ formationChecklist = false;
+ }
+ }
+ }
+ }
+
+ if(minCasingAmount > 0) {
+ formationChecklist = false;
+ }
+
+ if(this.mDynamoHatches.size() != 1) {
+ System.out.println("Exactly one dynamo hatch is required!");
+ formationChecklist = false;
+ }
+ if(this.mInputHatches.size() < 2) {
+ System.out.println("At least two input hatches are required!");
+ formationChecklist = false;
+ }
+
+ if(this.mMaintenanceHatches.size() < 1) {
+ System.out.println("You need a maintenance hatch to do maintenance.");
+ }
+
+ return formationChecklist;
+ }
+
+ @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;
+ }
+
+}
diff --git a/src/main/java/tileentities/TFFTMultiHatch.java b/src/main/java/tileentities/TFFTMultiHatch.java
new file mode 100644
index 0000000000..2ce6f6985f
--- /dev/null
+++ b/src/main/java/tileentities/TFFTMultiHatch.java
@@ -0,0 +1,138 @@
+package tileentities;
+
+import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch;
+import gregtech.api.objects.GT_RenderedTexture;
+import kekztech.MultiFluidHandler;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.FluidStack;
+
+public class TFFTMultiHatch extends GT_MetaTileEntity_Hatch {
+
+ private MultiFluidHandler multiFluidHandler;
+
+ public TFFTMultiHatch(int aID, String aName, String aNameRegional, int aTier) {
+ super(aID, aName, aNameRegional, aTier, 3,
+ new String[]{"Exclusive fluid I/O for the T.F.F.T", "Capacity: " + 8000 * (aTier + 1) + "L"}, new ITexture[0]);
+ }
+
+ public TFFTMultiHatch(String aName, int aTier, String aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, 3, aDescription, aTextures);
+ }
+
+ public TFFTMultiHatch(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, 3, aDescription, aTextures);
+ }
+
+ public ITexture[] getTexturesActive(ITexture aBaseTexture) {
+ return new ITexture[]{aBaseTexture, new GT_RenderedTexture(BlockIcons.OVERLAY_PIPE_IN)};
+ }
+
+ public ITexture[] getTexturesInactive(ITexture aBaseTexture) {
+ return new ITexture[]{aBaseTexture, new GT_RenderedTexture(BlockIcons.OVERLAY_PIPE_IN)};
+ }
+
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new TFFTMultiHatch(this.mName, this.mTier, this.mDescriptionArray, this.mTextures);
+ }
+
+ public boolean isSimpleMachine() {
+ return true;
+ }
+
+ public boolean isFacingValid(byte aFacing) {
+ return true;
+ }
+
+ public boolean isAccessAllowed(EntityPlayer aPlayer) {
+ return true;
+ }
+
+ public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
+ if (aBaseMetaTileEntity.isClientSide()) {
+ return true;
+ } else {
+ return true;
+ }
+ }
+
+ public boolean doesFillContainers() {
+ return false;
+ }
+
+ public boolean doesEmptyContainers() {
+ return false;
+ }
+
+ public boolean canTankBeFilled() {
+ return true;
+ }
+
+ public boolean canTankBeEmptied() {
+ return true;
+ }
+
+ public boolean displaysItemStack() {
+ return false;
+ }
+
+ public boolean displaysStackSize() {
+ return false;
+ }
+
+ public boolean isFluidInputAllowed(FluidStack aFluid) {
+ return (multiFluidHandler != null) ? multiFluidHandler.couldPush(aFluid) : false;
+ }
+
+ public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return false;
+ }
+
+ public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
+ return false;
+ }
+
+ public int getCapacity() {
+ return (multiFluidHandler != null) ? multiFluidHandler.getCapacity() : 0;
+ }
+
+ public int getTankPressure() {
+ return -100;
+ }
+
+ public void setMultiFluidHandler(MultiFluidHandler multiFluidHandler) {
+ this.multiFluidHandler = multiFluidHandler;
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
diff --git a/src/main/java/util/Util.java b/src/main/java/util/Util.java
index 76232d6e47..aa362d67d7 100644
--- a/src/main/java/util/Util.java
+++ b/src/main/java/util/Util.java
@@ -1,51 +1,51 @@
-package util;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import items.ErrorItem;
-import net.minecraft.item.ItemStack;
-import net.minecraftforge.fluids.FluidStack;
-import net.minecraftforge.oredict.OreDictionary;
-
-public class Util {
-
- public static ItemStack getStackofAmountFromOreDict(String oredictName, final int amount){
- final ArrayList<ItemStack> list = OreDictionary.getOres(oredictName);
- if(!list.isEmpty()) {
- final ItemStack ret = list.get(0).copy();
- ret.stackSize = amount;
- return ret;
- }
- System.err.println("Failed to find " + oredictName + " in OreDict");
- return new ItemStack(ErrorItem.getInstance(), amount);
- }
-
- public static ItemStack[] toItemStackArray(List<ItemStack> stacksList) {
- if(stacksList.size() == 0) {
- return null;
- }
-
- ItemStack[] ret = new ItemStack[stacksList.size()];
- Iterator<ItemStack> iterator = stacksList.iterator();
- for(int i = 0; i < ret.length; i++ ) {
- ret[i] = iterator.next();
- }
- return ret;
- }
-
- public static FluidStack[] toFluidStackArray(List<FluidStack> stacksList) {
- if(stacksList.size() == 0) {
- return null;
- }
-
- FluidStack[] ret = new FluidStack[stacksList.size()];
- Iterator<FluidStack> iterator = stacksList.iterator();
- for(int i = 0; i < ret.length; i++ ) {
- ret[i] = iterator.next();
- }
- return ret;
- }
-
-}
+package util;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import items.ErrorItem;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.oredict.OreDictionary;
+
+public class Util {
+
+ public static ItemStack getStackofAmountFromOreDict(String oredictName, final int amount){
+ final ArrayList<ItemStack> list = OreDictionary.getOres(oredictName);
+ if(!list.isEmpty()) {
+ final ItemStack ret = list.get(0).copy();
+ ret.stackSize = amount;
+ return ret;
+ }
+ System.err.println("Failed to find " + oredictName + " in OreDict");
+ return new ItemStack(ErrorItem.getInstance(), amount);
+ }
+
+ public static ItemStack[] toItemStackArray(List<ItemStack> stacksList) {
+ if(stacksList.size() == 0) {
+ return null;
+ }
+
+ ItemStack[] ret = new ItemStack[stacksList.size()];
+ Iterator<ItemStack> iterator = stacksList.iterator();
+ for(int i = 0; i < ret.length; i++ ) {
+ ret[i] = iterator.next();
+ }
+ return ret;
+ }
+
+ public static FluidStack[] toFluidStackArray(List<FluidStack> stacksList) {
+ if(stacksList.size() == 0) {
+ return null;
+ }
+
+ FluidStack[] ret = new FluidStack[stacksList.size()];
+ Iterator<FluidStack> iterator = stacksList.iterator();
+ for(int i = 0; i < ret.length; i++ ) {
+ ret[i] = iterator.next();
+ }
+ return ret;
+ }
+
+}
diff --git a/src/main/java/util/Vector3i.java b/src/main/java/util/Vector3i.java
index ff2b017551..5281c2dacc 100644
--- a/src/main/java/util/Vector3i.java
+++ b/src/main/java/util/Vector3i.java
@@ -1,32 +1,32 @@
-package util;
-
-public class Vector3i implements Vector3ic {
-
- public int x, y, z;
-
- public Vector3i() {
- x = 1;
- y = 1;
- z = 1;
- }
-
- public Vector3i(int x, int y, int z) {
- this.x = x;
- this.y = y;
- this.z = z;
- }
-
- public int x() {
- return x;
- }
-
- public int y() {
- return y;
- }
-
- public int z() {
- return z;
- }
-
-
-}
+package util;
+
+public class Vector3i implements Vector3ic {
+
+ public int x, y, z;
+
+ public Vector3i() {
+ x = 1;
+ y = 1;
+ z = 1;
+ }
+
+ public Vector3i(int x, int y, int z) {
+ this.x = x;
+ this.y = y;
+ this.z = z;
+ }
+
+ public int x() {
+ return x;
+ }
+
+ public int y() {
+ return y;
+ }
+
+ public int z() {
+ return z;
+ }
+
+
+}
diff --git a/src/main/java/util/Vector3ic.java b/src/main/java/util/Vector3ic.java
index 102418bc98..8c73c858a3 100644
--- a/src/main/java/util/Vector3ic.java
+++ b/src/main/java/util/Vector3ic.java
@@ -1,8 +1,8 @@
-package util;
-
-public interface Vector3ic {
-
- public int x();
- public int y();
- public int z();
-}
+package util;
+
+public interface Vector3ic {
+
+ public int x();
+ public int y();
+ public int z();
+}
diff --git a/src/main/resources/assets/kekztech/lang/en_US.lang b/src/main/resources/assets/kekztech/lang/en_US.lang
index b3b4343b9a..8decb4eefd 100644
--- a/src/main/resources/assets/kekztech/lang/en_US.lang
+++ b/src/main/resources/assets/kekztech/lang/en_US.lang
@@ -1,83 +1,83 @@
-item.kekztech_error_item.name=KekzTech Error Coin
-
-item.kekztech_reactor_item.0.name=Weak Heat Vent
-item.kekztech_reactor_item.1.name=Basic Heat Vent
-item.kekztech_reactor_item.2.name=Advanced Heat Vent
-item.kekztech_reactor_item.3.name=High-Tech Heat Vent
-item.kekztech_reactor_item.4.name=Weak Component Heat Vent
-item.kekztech_reactor_item.5.name=Basic Component Heat Vent
-item.kekztech_reactor_item.6.name=Advanced Component Heat Vent
-item.kekztech_reactor_item.7.name=High-Tech Component Heat Vent
-item.kekztech_reactor_item.8.name=Weak Overclocked Heat Vent
-item.kekztech_reactor_item.9.name=Basic Overclocked Heat Vent
-item.kekztech_reactor_item.10.name=Advanced Overclocked Heat Vent
-item.kekztech_reactor_item.11.name=High-Tech Overclocked Heat Vent
-
-item.kekztech_reactor_item.12.name=Weak Heat Exchanger
-item.kekztech_reactor_item.13.name=Basic Heat Exchanger
-item.kekztech_reactor_item.14.name=Advanced Heat Exchanger
-item.kekztech_reactor_item.15.name=High-Tech Heat Exchanger
-
-item.kekztech_reactor_item.16.name=Fuel Rod (Enriched Uranium)
-item.kekztech_reactor_item.17.name=Dual Fuel Rod (Enriched Uranium)
-item.kekztech_reactor_item.18.name=Quad Fuel Rod (Enriched Uranium)
-item.kekztech_reactor_item.19.name=Fuel Rod (Thorium)
-item.kekztech_reactor_item.20.name=Dual Fuel Rod (Thorium)
-item.kekztech_reactor_item.21.name=Quad Fuel Rod (Thorium)
-item.kekztech_reactor_item.22.name=Fuel Rod (Plutonium MOX)
-item.kekztech_reactor_item.23.name=Dual Fuel Rod (Plutonium MOX)
-item.kekztech_reactor_item.24.name=Quad Fuel Rod (Plutonium MOX)
-item.kekztech_reactor_item.25.name=Fuel Rod (Enriched Naquadah)
-item.kekztech_reactor_item.26.name=Dual Fuel Rod (Enriched Naquadah)
-item.kekztech_reactor_item.27.name=Quad Fuel Rod (Enriched Naquadah)
-item.kekztech_reactor_item.28.name=Fuel Rod (Thorium MOX)
-item.kekztech_reactor_item.29.name=Dual Fuel Rod (Thorium MOX)
-item.kekztech_reactor_item.30.name=Quad Fuel Rod (Thorium MOX)
-
-item.kekztech_reactor_item.31.name=Depleted Fuel Rod (Enriched Uranium)
-item.kekztech_reactor_item.32.name=Depleted Dual Fuel Rod (Enriched Uranium)
-item.kekztech_reactor_item.33.name=Depleted Quad Fuel Rod (Enriched Uranium)
-item.kekztech_reactor_item.34.name=Depleted Fuel Rod (Thorium)
-item.kekztech_reactor_item.35.name=Depleted Dual Fuel Rod (Thorium)
-item.kekztech_reactor_item.36.name=Depleted Quad Fuel Rod (Thorium)
-item.kekztech_reactor_item.37.name=Depleted Fuel Rod (Plutonium MOX)
-item.kekztech_reactor_item.38.name=Depleted Dual Fuel Rod (Plutonium MOX)
-item.kekztech_reactor_item.39.name=Depleted Quad Fuel Rod (Plutonium MOX)
-item.kekztech_reactor_item.40.name=Depleted Fuel Rod (Enriched Naquadah)
-item.kekztech_reactor_item.41.name=Depleted Dual Fuel Rod (Enriched Naquadah)
-item.kekztech_reactor_item.42.name=Depleted Quad Fuel Rod (Enriched Naquadah)
-item.kekztech_reactor_item.43.name=Depleted Fuel Rod (Thorium MOX)
-item.kekztech_reactor_item.44.name=Depleted Fuel Rod (Thorium MOX)
-item.kekztech_reactor_item.45.name=Depleted Fuel Rod (Thorium MOX)
-
-item.kekztech_reactor_item.46.name=Neutron Reflector
-item.kekztech_reactor_item.47.name=Neutron Supermirror (Unbreakable)
-
-item.kekztech_reactor_item.48.name=Helium Coolant Cell
-item.kekztech_reactor_item.49.name=NaK Coolant Cell
-
-item.kekztech_crafting_item.0.name=Copper Heat Pipe
-item.kekztech_crafting_item.1.name=Silver Heat Pipe
-item.kekztech_crafting_item.2.name=Boron Arsenide Heat Pipe
-item.kekztech_crafting_item.3.name=Diamond Heat Pipe
-item.kekztech_crafting_item.4.name=Boron Arsenide Dust
-item.kekztech_crafting_item.5.name=Isotopically Pure Diamond Dust
-item.kekztech_crafting_item.6.name=Amine Carbamate Dust
-item.kekztech_crafting_item.7.name=Boron Arsenide Crystal
-item.kekztech_crafting_item.8.name=Isotopically Pure Diamond Crystal
-item.kekztech_crafting_item.9.name=YSZ Ceramic Dust
-item.kekztech_crafting_item.10.name=GDC Ceramic Dust
-item.kekztech_crafting_item.11.name=Yttria Dust
-item.kekztech_crafting_item.12.name=Zirconia Dust
-item.kekztech_crafting_item.13.name=Ceria Dust
-item.kekztech_crafting_item.14.name=YSZ Ceramic Plate
-item.kekztech_crafting_item.15.name=GDC Ceramic Plate
-
-tile.kekztech_gdcceramicelectrolyteunit_block.name=GDC Ceramic Electrolyte Unit
-tile.kekztech_yszceramicelectrolyteunit_block.name=YSZ Ceramic Electrolyte Unit
-
-tile.kekztech_tfftcasingblock_block.name=T.F.F.T Casing
-tile.kekztech_tfftstoragefieldblock1_block.name=T.F.F.T Storage Field Block (Tier I)
-tile.kekztech_tfftstoragefieldblock2_block.name=T.F.F.T Storage Field Block (Tier II)
-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)
+item.kekztech_error_item.name=KekzTech Error Coin
+
+item.kekztech_reactor_item.0.name=Weak Heat Vent
+item.kekztech_reactor_item.1.name=Basic Heat Vent
+item.kekztech_reactor_item.2.name=Advanced Heat Vent
+item.kekztech_reactor_item.3.name=High-Tech Heat Vent
+item.kekztech_reactor_item.4.name=Weak Component Heat Vent
+item.kekztech_reactor_item.5.name=Basic Component Heat Vent
+item.kekztech_reactor_item.6.name=Advanced Component Heat Vent
+item.kekztech_reactor_item.7.name=High-Tech Component Heat Vent
+item.kekztech_reactor_item.8.name=Weak Overclocked Heat Vent
+item.kekztech_reactor_item.9.name=Basic Overclocked Heat Vent
+item.kekztech_reactor_item.10.name=Advanced Overclocked Heat Vent
+item.kekztech_reactor_item.11.name=High-Tech Overclocked Heat Vent
+
+item.kekztech_reactor_item.12.name=Weak Heat Exchanger
+item.kekztech_reactor_item.13.name=Basic Heat Exchanger
+item.kekztech_reactor_item.14.name=Advanced Heat Exchanger
+item.kekztech_reactor_item.15.name=High-Tech Heat Exchanger
+
+item.kekztech_reactor_item.16.name=Fuel Rod (Enriched Uranium)
+item.kekztech_reactor_item.17.name=Dual Fuel Rod (Enriched Uranium)
+item.kekztech_reactor_item.18.name=Quad Fuel Rod (Enriched Uranium)
+item.kekztech_reactor_item.19.name=Fuel Rod (Thorium)
+item.kekztech_reactor_item.20.name=Dual Fuel Rod (Thorium)
+item.kekztech_reactor_item.21.name=Quad Fuel Rod (Thorium)
+item.kekztech_reactor_item.22.name=Fuel Rod (Plutonium MOX)
+item.kekztech_reactor_item.23.name=Dual Fuel Rod (Plutonium MOX)
+item.kekztech_reactor_item.24.name=Quad Fuel Rod (Plutonium MOX)
+item.kekztech_reactor_item.25.name=Fuel Rod (Enriched Naquadah)
+item.kekztech_reactor_item.26.name=Dual Fuel Rod (Enriched Naquadah)
+item.kekztech_reactor_item.27.name=Quad Fuel Rod (Enriched Naquadah)
+item.kekztech_reactor_item.28.name=Fuel Rod (Thorium MOX)
+item.kekztech_reactor_item.29.name=Dual Fuel Rod (Thorium MOX)
+item.kekztech_reactor_item.30.name=Quad Fuel Rod (Thorium MOX)
+
+item.kekztech_reactor_item.31.name=Depleted Fuel Rod (Enriched Uranium)
+item.kekztech_reactor_item.32.name=Depleted Dual Fuel Rod (Enriched Uranium)
+item.kekztech_reactor_item.33.name=Depleted Quad Fuel Rod (Enriched Uranium)
+item.kekztech_reactor_item.34.name=Depleted Fuel Rod (Thorium)
+item.kekztech_reactor_item.35.name=Depleted Dual Fuel Rod (Thorium)
+item.kekztech_reactor_item.36.name=Depleted Quad Fuel Rod (Thorium)
+item.kekztech_reactor_item.37.name=Depleted Fuel Rod (Plutonium MOX)
+item.kekztech_reactor_item.38.name=Depleted Dual Fuel Rod (Plutonium MOX)
+item.kekztech_reactor_item.39.name=Depleted Quad Fuel Rod (Plutonium MOX)
+item.kekztech_reactor_item.40.name=Depleted Fuel Rod (Enriched Naquadah)
+item.kekztech_reactor_item.41.name=Depleted Dual Fuel Rod (Enriched Naquadah)
+item.kekztech_reactor_item.42.name=Depleted Quad Fuel Rod (Enriched Naquadah)
+item.kekztech_reactor_item.43.name=Depleted Fuel Rod (Thorium MOX)
+item.kekztech_reactor_item.44.name=Depleted Fuel Rod (Thorium MOX)
+item.kekztech_reactor_item.45.name=Depleted Fuel Rod (Thorium MOX)
+
+item.kekztech_reactor_item.46.name=Neutron Reflector
+item.kekztech_reactor_item.47.name=Neutron Supermirror (Unbreakable)
+
+item.kekztech_reactor_item.48.name=Helium Coolant Cell
+item.kekztech_reactor_item.49.name=NaK Coolant Cell
+
+item.kekztech_crafting_item.0.name=Copper Heat Pipe
+item.kekztech_crafting_item.1.name=Silver Heat Pipe
+item.kekztech_crafting_item.2.name=Boron Arsenide Heat Pipe
+item.kekztech_crafting_item.3.name=Diamond Heat Pipe
+item.kekztech_crafting_item.4.name=Boron Arsenide Dust
+item.kekztech_crafting_item.5.name=Isotopically Pure Diamond Dust
+item.kekztech_crafting_item.6.name=Amine Carbamate Dust
+item.kekztech_crafting_item.7.name=Boron Arsenide Crystal
+item.kekztech_crafting_item.8.name=Isotopically Pure Diamond Crystal
+item.kekztech_crafting_item.9.name=YSZ Ceramic Dust
+item.kekztech_crafting_item.10.name=GDC Ceramic Dust
+item.kekztech_crafting_item.11.name=Yttria Dust
+item.kekztech_crafting_item.12.name=Zirconia Dust
+item.kekztech_crafting_item.13.name=Ceria Dust
+item.kekztech_crafting_item.14.name=YSZ Ceramic Plate
+item.kekztech_crafting_item.15.name=GDC Ceramic Plate
+
+tile.kekztech_gdcceramicelectrolyteunit_block.name=GDC Ceramic Electrolyte Unit
+tile.kekztech_yszceramicelectrolyteunit_block.name=YSZ Ceramic Electrolyte Unit
+
+tile.kekztech_tfftcasingblock_block.name=T.F.F.T Casing
+tile.kekztech_tfftstoragefieldblock1_block.name=T.F.F.T Storage Field Block (Tier I)
+tile.kekztech_tfftstoragefieldblock2_block.name=T.F.F.T Storage Field Block (Tier II)
+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)
diff --git a/src/main/resources/assets/kekztech/textures/blocks/TFFTStorageFieldBlock1.png b/src/main/resources/assets/kekztech/textures/blocks/TFFTStorageFieldBlock1.png
index f1abeacd4b..70004c208f 100644
--- a/src/main/resources/assets/kekztech/textures/blocks/TFFTStorageFieldBlock1.png
+++ b/src/main/resources/assets/kekztech/textures/blocks/TFFTStorageFieldBlock1.png
Binary files differ
diff --git a/src/main/resources/assets/kekztech/textures/blocks/TFFTStorageFieldBlock2.png b/src/main/resources/assets/kekztech/textures/blocks/TFFTStorageFieldBlock2.png
index cb5b27bc1d..5cac6da447 100644
--- a/src/main/resources/assets/kekztech/textures/blocks/TFFTStorageFieldBlock2.png
+++ b/src/main/resources/assets/kekztech/textures/blocks/TFFTStorageFieldBlock2.png
Binary files differ
diff --git a/src/main/resources/assets/kekztech/textures/blocks/TFFTStorageFieldBlock3.png b/src/main/resources/assets/kekztech/textures/blocks/TFFTStorageFieldBlock3.png
index 30185da496..5f4fe29422 100644
--- a/src/main/resources/assets/kekztech/textures/blocks/TFFTStorageFieldBlock3.png
+++ b/src/main/resources/assets/kekztech/textures/blocks/TFFTStorageFieldBlock3.png
Binary files differ
diff --git a/src/main/resources/assets/kekztech/textures/blocks/TFFTStorageFieldBlock4.png b/src/main/resources/assets/kekztech/textures/blocks/TFFTStorageFieldBlock4.png
index 638223af9b..681f0bf80f 100644
--- a/src/main/resources/assets/kekztech/textures/blocks/TFFTStorageFieldBlock4.png
+++ b/src/main/resources/assets/kekztech/textures/blocks/TFFTStorageFieldBlock4.png
Binary files differ
diff --git a/src/main/resources/assets/kekztech/textures/items/DemonCore.png b/src/main/resources/assets/kekztech/textures/items/DemonCore.png
new file mode 100644
index 0000000000..026b8fdeed
--- /dev/null
+++ b/src/main/resources/assets/kekztech/textures/items/DemonCore.png
Binary files differ
diff --git a/src/main/resources/assets/kekztech/textures/items/PlutoniumGalliumDust.png b/src/main/resources/assets/kekztech/textures/items/PlutoniumGalliumDust.png
new file mode 100644
index 0000000000..fc978ad329
--- /dev/null
+++ b/src/main/resources/assets/kekztech/textures/items/PlutoniumGalliumDust.png
Binary files differ
diff --git a/src/main/resources/assets/kekztech/textures/items/RawDemonCore.png b/src/main/resources/assets/kekztech/textures/items/RawDemonCore.png
new file mode 100644
index 0000000000..94105601d1
--- /dev/null
+++ b/src/main/resources/assets/kekztech/textures/items/RawDemonCore.png
Binary files differ
diff --git a/src/main/resources/assets/kekztech/textures/items/uraniumFuelRod.png b/src/main/resources/assets/kekztech/textures/items/uraniumFuelRod.png
deleted file mode 100644
index 96e1fb32bf..0000000000
--- a/src/main/resources/assets/kekztech/textures/items/uraniumFuelRod.png
+++ /dev/null
Binary files differ
diff --git a/usernamecache.json b/usernamecache.json
index cea4b33c3f..7828fecdf9 100644
--- a/usernamecache.json
+++ b/usernamecache.json
@@ -1,4 +1,5 @@
{
"fd8b4f31-35bd-474b-8add-e80df8a4a95f": "kekzdealer",
- "ddc68fe4-0789-360b-a837-3dcbb936da65": "kekzdealer@gmail.com"
+ "ddc68fe4-0789-360b-a837-3dcbb936da65": "kekzdealer@gmail.com",
+ "68bd6caf-3ecf-3386-a136-fe6ada410f62": "kekzdealer"
} \ No newline at end of file