From 0bd5ec684f6974109d7c520471bd196f482d92ca Mon Sep 17 00:00:00 2001 From: Bass Date: Wed, 4 Dec 2019 18:25:44 +0000 Subject: tiny tesla fix --- .../metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java index 13b9e72070..9fb7193dd8 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java @@ -442,19 +442,12 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock @Override public void onRemoval() { + super.onRemoval(); for (GT_MetaTileEntity_Hatch_Capacitor cap : eCapacitorHatches) { - try { + if (GT_MetaTileEntity_MultiBlockBase.isValidMetaTileEntity(cap)) { cap.getBaseMetaTileEntity().setActive(false); - } catch (Exception e) { - if (DEBUG_MODE) { - e.printStackTrace(); - } } } - super.onRemoval(); - for (GT_MetaTileEntity_Hatch_Capacitor cap : eCapacitorHatches) { - cap.getBaseMetaTileEntity().setActive(false); - } } @Override -- cgit From d479ee8638745144df9772cbbc7386870e7c194e Mon Sep 17 00:00:00 2001 From: Bass Date: Fri, 6 Dec 2019 23:23:53 +0000 Subject: Add BuildCraft as a library --- build.gradle | 1 + build.properties | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 9040ae0d8a..0ba24930c6 100644 --- a/build.gradle +++ b/build.gradle @@ -116,6 +116,7 @@ dependencies { compile "micdoodle8.mods:GalacticraftCore:${config.galacticraft.version}:Dev" compile "micdoodle8.mods:Galacticraft-Planets:${config.galacticraft.version}:Dev" compile "micdoodle8.mods:Galacticraft:${config.galacticraft.version}:API" + compile "com.mod-buildcraft:buildcraft:${config.buildcraft.version}:dev" //Ivy compile name: 'CoFHCore', version: config.cofhcore.version, ext: 'jar' } diff --git a/build.properties b/build.properties index 2575144e52..75d9f30324 100644 --- a/build.properties +++ b/build.properties @@ -18,4 +18,5 @@ computercraft.version=1.75 forestry.version=4.2.16.64 enderio.version=2.3.0.429_beta endercore.version=0.2.0.39_beta -waila.version=1.5.10 \ No newline at end of file +waila.version=1.5.10 +buildcraft.version=7.1.23 \ No newline at end of file -- cgit From cbb64b70caf4f234ddb40a825c4f74d23bb5a6d8 Mon Sep 17 00:00:00 2001 From: Dream-Master Date: Tue, 10 Dec 2019 21:00:28 +0100 Subject: Ultimate battery( and really ultimate) recipes aren't consistent with previous batterys recipes. #5162 https://github.com/GTNewHorizons/NewHorizons/issues/5162 (cherry picked from commit 32b65532b12ad3418e7ac29c5c3c6da254dd1f4e) --- .../compatibility/dreamcraft/DreamCraftRecipeLoader.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java index 362c86ab08..30b2b0e7ff 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java +++ b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java @@ -1133,7 +1133,10 @@ public class DreamCraftRecipeLoader implements Runnable { //Batteries TT_recipeAdder.addResearchableAssemblylineRecipe(ItemList.Energy_Cluster.get(1L), 12000, 16, 100000, 3, new Object[]{ GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Tritanium, 64L), - new Object[]{OrePrefixes.circuit.get(Materials.Infinite), 4L}, + new Object[]{OrePrefixes.circuit.get(Materials.Infinite), 1L}, + new Object[]{OrePrefixes.circuit.get(Materials.Infinite), 1L}, + new Object[]{OrePrefixes.circuit.get(Materials.Infinite), 1L}, + new Object[]{OrePrefixes.circuit.get(Materials.Infinite), 1L}, ItemList.Energy_Cluster.get(8L), ItemList.Field_Generator_UV.get(2), ItemList.Circuit_Wafer_HPIC.get(64), @@ -1148,7 +1151,10 @@ public class DreamCraftRecipeLoader implements Runnable { TT_recipeAdder.addResearchableAssemblylineRecipe(ItemList.ZPM2.get(1L), 24000, 64, 200000, 6, new Object[]{ GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Neutronium, 32L), GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Neutronium, 32L), - new Object[]{OrePrefixes.circuit.get(Materials.Bio), 4L}, + new Object[]{OrePrefixes.circuit.get(Materials.Bio), 1L}, + new Object[]{OrePrefixes.circuit.get(Materials.Bio), 1L}, + new Object[]{OrePrefixes.circuit.get(Materials.Bio), 1L}, + new Object[]{OrePrefixes.circuit.get(Materials.Bio), 1L}, ItemList.ZPM2.get(8), ItemList.Field_Generator_UHV.get(4), ItemList.Circuit_Wafer_UHPIC.get(64), -- cgit From 256139bb744ea12c639c01a7c5373a6652ad68ed Mon Sep 17 00:00:00 2001 From: bartimaeusnek <33183715+bartimaeusnek@users.noreply.github.com> Date: Fri, 27 Dec 2019 17:19:08 +0100 Subject: added deobfs jar (#22) --- build.gradle | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 0ba24930c6..7c1298fc49 100644 --- a/build.gradle +++ b/build.gradle @@ -173,6 +173,15 @@ processResources } } +task devJar(type: Jar) { + from sourceSets.main.output + classifier = 'dev' +} + +artifacts { + archives devJar +} + task signJar(dependsOn: 'reobf') { doLast { ant.signjar( @@ -186,4 +195,4 @@ task signJar(dependsOn: 'reobf') { verbose: true ) } -} \ No newline at end of file +} -- cgit From 8c6d405d803109ad02e79e9cb5f4d1f3ec742907 Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 27 Dec 2019 17:22:10 +0100 Subject: Update build.properties --- build.properties | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build.properties b/build.properties index 75d9f30324..941c22cd92 100644 --- a/build.properties +++ b/build.properties @@ -6,8 +6,8 @@ ic2.version=2.2.790-experimental codechickenlib.version=1.1.3.140 codechickencore.version=1.0.7.47 nei.version=1.0.5.120 -gregtech.jenkinsbuild=358 -gregtech.version=5.09.33.23 +gregtech.jenkinsbuild=370 +gregtech.version=5.09.33.25 cofhcore.version=[1.7.10]3.1.4-329-dev yamcore.version=0.5.79 baubles.version=1.0.1.10 @@ -19,4 +19,4 @@ forestry.version=4.2.16.64 enderio.version=2.3.0.429_beta endercore.version=0.2.0.39_beta waila.version=1.5.10 -buildcraft.version=7.1.23 \ No newline at end of file +buildcraft.version=7.1.23 -- cgit From 14445c59cc66af7b071c57a439f0c9575d129788 Mon Sep 17 00:00:00 2001 From: Kiwi <42833050+Kiwi233@users.noreply.github.com> Date: Sat, 28 Dec 2019 16:04:22 +0800 Subject: Update zh_CN.lang (#23) --- src/main/resources/assets/tectech/lang/zh_CN.lang | 871 +++++++++++++++++++++- 1 file changed, 861 insertions(+), 10 deletions(-) diff --git a/src/main/resources/assets/tectech/lang/zh_CN.lang b/src/main/resources/assets/tectech/lang/zh_CN.lang index 5359f04e9b..16d32829f7 100644 --- a/src/main/resources/assets/tectech/lang/zh_CN.lang +++ b/src/main/resources/assets/tectech/lang/zh_CN.lang @@ -1,13 +1,864 @@ -itemGroup.TecTech=泛次元钛克科技黑洞研究所 -tile.quantumGlass.name=量子玻璃 +#Creative Tab Name +itemGroup.TecTech=泛银河泰克科技有限公司 + +#Blocks tile.quantumStuff.name=量子物质 -item.em.debugContainer.name=调试用 EM容器 -item.em.definitionContainer.name=EM配方指引 -item.em.debugBuilder.name=多方块机器蓝图 -item.em.parametrizerMemoryCard.name=参量机记忆卡 -death.attack.microwaving=%1$s 被辐射脱水 -death.attack.microwaving.player=%1$s 在与 %2$s 战斗中被辐射脱水 +tile.quantumGlass.name=量子玻璃 +tile.quantumGlass.desc.0=致密但透明 +tile.quantumGlass.desc.1=玻璃&优雅(Glassy & Classy) + +tile.reactorSim.name=反应堆模拟器 +tile.reactorSim.desc.0=裂变反应不确定度解析器9001 +tile.reactorSim.desc.1=爆炸,但没有那么多... + +#Items +item.em.programmer.name=AVR编程器 +item.em.programmer.desc.0=当前PC +item.em.programmer.desc.1=唤醒 +item.em.programmer.desc.2=激活 +item.em.programmer.desc.3=Debug +item.em.programmer.desc.4=延迟 + +item.em.debugContainer.name=调试元物质容器 +item.em.debugContainer.desc.0=包含 +item.em.debugContainer.desc.1=元物质的容器 +item.em.debugContainer.desc.2=右键元物质仓室 +item.em.debugContainer.desc.3=---意外终止--- + +item.em.definitionContainer.name=元物质配方提示 +item.em.definitionContainer.desc.0=需要包含 +item.em.definitionContainer.desc.1=配方提示 +item.em.definitionContainer.desc.2=---意外终止--- + +item.em.definitionScanStorage.name=元物质容器扫描 +item.em.definitionScanStorage.desc.0=包含扫描结果 +item.em.definitionScanStorage.desc.1=用于阅读 +item.em.definitionScanStorage.desc.2=存储元物质扫描数据 +item.em.definitionScanStorage.desc.3=---意外终止--- + +item.em.constructable.name=多方块机器蓝图 +item.em.constructable.desc.0=触发可构造界面 +item.em.constructable.desc.1=显示多方块结构细节, +item.em.constructable.desc.2=只可在多方块控制器上使用. +item.em.constructable.desc.3=(在创造模式下潜行右键可直接构造) +item.em.constructable.desc.4=数量影响等级/模式/类型 + +item.em.EuMeterGT.name=GT EU电表 +item.em.EuMeterGT.desc.0=测量EU相关的基本内容 +item.em.EuMeterGT.desc.1=只需右键方块. + +item.em.frontRotate.name=正面旋转扳手 +item.em.frontRotate.desc.0=触发正面旋转界面 +item.em.frontRotate.desc.1=仅旋转前面板, +item.em.frontRotate.desc.2=允许结构旋转. + +item.em.parametrizerMemoryCard.name=数据化储存卡 +item.em.parametrizerMemoryCard.desc.0=存储参数 +item.em.parametrizerMemoryCard.desc.1=在参数仪/控制器上使用以对其进行配置 +item.em.parametrizerMemoryCard.desc.2=在参数仪上使用以存储参数 +item.em.parametrizerMemoryCard.desc.3=潜行右键以锁定/解锁 + +item.tm.teslaCoilCapacitor.0.name=LV特斯拉电容 +item.tm.teslaCoilCapacitor.1.name=MV特斯拉电容 +item.tm.teslaCoilCapacitor.2.name=HV特斯拉电容 +item.tm.teslaCoilCapacitor.3.name=EV特斯拉电容 +item.tm.teslaCoilCapacitor.4.name=IV特斯拉电容 +item.tm.teslaCoilCapacitor.desc.0=存储量: +item.tm.teslaCoilCapacitor.desc.1=EU;充能速度: +item.tm.teslaCoilCapacitor.desc.2=把这个破碎的东西浸入某种辛辣的水中! +item.tm.teslaCoilCapacitor.desc.3=插入特斯拉电塔的电容仓中 +item.tm.teslaCoilCapacitor.desc.4=电容器就像电池一样,对吗? + +item.tm.itemTeslaComponent.0.name=琥珀金特斯拉绕组 +item.tm.itemTeslaComponent.1.name=超导特斯拉绕组 +item.tm.itemTeslaComponent.desc=特斯拉需要这些! + +item.tm.teslaCover.0.name=特斯拉线圈帽 +item.tm.teslaCover.1.name=加强特斯拉线圈帽 +item.tm.teslaCover.desc.0=特斯拉使能机器! +item.tm.teslaCover.desc.1=特斯拉使能机器! (但非常吵!!) +item.tm.teslaCover.desc.2=把这个破碎的东西浸入某种辛辣的水中! +item.tm.teslaCover.desc.3=对机器顶部右键使用,启用机器的特斯拉供电功能 +item.tm.teslaCover.desc.4=到底谁在用电缆? + +item.tm.teslaStaff.name=特斯拉权杖 +item.tm.teslaStaff.desc=狂妄之人窃取了众神的权柄! + +#Death Messages +death.attack.microwaving=%1$s被辐射脱水。 +death.attack.microwaving.player=%1$s在与%2$s的战斗中被辐射脱水。 +death.attack.elementalPollution=%1$s在错误的空洞中被汽化。 +death.attack.elementalPollution.player=%1$s在与%2$s的战斗中被错误的空洞汽化。 +death.attack.subspace=%1$s受到了降维打击。 +death.attack.subspace.player=%1$s在与%2$s的战斗中受到了降维打击。 + +#Machine hulls +gt.blockmachines.hull.tier.10.name=UEV机器外壳 +gt.blockmachines.hull.tier.11.name=UIV机器外壳 +gt.blockmachines.hull.tier.12.name=UMV机器外壳 +gt.blockmachines.hull.tier.13.name=UXV机器外壳 +gt.blockmachines.hull.tier.14.name=OPV机器外壳 +gt.blockmachines.hull.tier.15.name=MAX机器外壳 + +#Transformers +gt.blockmachines.wetransformer.tier.00.name=ULV高能变压器 +gt.blockmachines.wetransformer.tier.00.desc=LV -> ULV (用软锤右击以反转) +gt.blockmachines.wetransformer.tier.01.name=LV高能变压器 +gt.blockmachines.wetransformer.tier.01.desc=MV -> LV (用软锤右击以反转) +gt.blockmachines.wetransformer.tier.02.name=MV高能变压器 +gt.blockmachines.wetransformer.tier.02.desc=HV -> MV (用软锤右击以反转) +gt.blockmachines.wetransformer.tier.03.name=HV高能变压器 +gt.blockmachines.wetransformer.tier.03.desc=EV -> HV (用软锤右击以反转) +gt.blockmachines.wetransformer.tier.04.name=EV高能变压器 +gt.blockmachines.wetransformer.tier.04.desc=IV -> EV (用软锤右击以反转) +gt.blockmachines.wetransformer.tier.05.name=IV高能变压器 +gt.blockmachines.wetransformer.tier.05.desc=LuV -> IV (用软锤右击以反转) +gt.blockmachines.wetransformer.tier.06.name=LuV高能变压器 +gt.blockmachines.wetransformer.tier.06.desc=ZPM -> LuV (用软锤右击以反转) +gt.blockmachines.wetransformer.tier.07.name=ZPM高能变压器 +gt.blockmachines.wetransformer.tier.07.desc=UV -> ZPM (用软锤右击以反转) +gt.blockmachines.wetransformer.tier.08.name=UV高能变压器 +gt.blockmachines.wetransformer.tier.08.desc=UHV -> UV (用软锤右击以反转) +gt.blockmachines.wetransformer.tier.09.name=UHV高能变压器 +gt.blockmachines.wetransformer.tier.09.desc=UEV -> UHV (用软锤右击以反转) +gt.blockmachines.wetransformer.tier.10.name=UEV高能变压器 +gt.blockmachines.wetransformer.tier.10.desc=UIV -> UEV (用软锤右击以反转) +gt.blockmachines.wetransformer.tier.11.name=UIV高能变压器 +gt.blockmachines.wetransformer.tier.11.desc=UMV -> UIV (用软锤右击以反转) +gt.blockmachines.wetransformer.tier.12.name=UMV高能变压器 +gt.blockmachines.wetransformer.tier.12.desc=UXV -> UMV (用软锤右击以反转) +gt.blockmachines.wetransformer.tier.13.name=UXV高能变压器 +gt.blockmachines.wetransformer.tier.13.desc=OPV -> UXV (用软锤右击以反转) +gt.blockmachines.wetransformer.tier.14.name=OpV高能变压器 +gt.blockmachines.wetransformer.tier.14.desc=MAX -> OPV (用软锤右击以反转) + +gt.blockmachines.tt.transformer.tier.09.name=UHV变压器 +gt.blockmachines.tt.transformer.tier.09.desc=UEV -> UHV (用软锤右击以反转) +gt.blockmachines.tt.transformer.tier.10.name=UEV变压器 +gt.blockmachines.tt.transformer.tier.10.desc=UIV -> UEV (用软锤右击以反转) +gt.blockmachines.tt.transformer.tier.11.name=UIV变压器 +gt.blockmachines.tt.transformer.tier.11.desc=UMV -> UIV (用软锤右击以反转) +gt.blockmachines.tt.transformer.tier.12.name=UMV变压器 +gt.blockmachines.tt.transformer.tier.12.desc=UXV -> UMV (用软锤右击以反转) +gt.blockmachines.tt.transformer.tier.13.name=UXV变压器 +gt.blockmachines.tt.transformer.tier.13.desc=OPV -> UXV (用软锤右击以反转) +gt.blockmachines.tt.transformer.tier.14.name=OpV变压器 +gt.blockmachines.tt.transformer.tier.14.desc=MAX -> OPV (用软锤右击以反转) + +gt.blockmachines.transformer.ha.tier.09.name=UHV高电流变压器 +gt.blockmachines.transformer.ha.tier.09.desc=UEV -> UHV (用软锤右击以反转 +gt.blockmachines.transformer.ha.tier.10.name=UEV高电流变压器 +gt.blockmachines.transformer.ha.tier.10.desc=UIV -> UEV (用软锤右击以反转) +gt.blockmachines.transformer.ha.tier.11.name=UIV高电流变压器 +gt.blockmachines.transformer.ha.tier.11.desc=UMV -> UIV (用软锤右击以反转) +gt.blockmachines.transformer.ha.tier.12.name=UMV高电流变压器 +gt.blockmachines.transformer.ha.tier.12.desc=UXV -> UMV (用软锤右击以反转) +gt.blockmachines.transformer.ha.tier.13.name=UXV高电流变压器 +gt.blockmachines.transformer.ha.tier.13.desc=OPV -> UXV (用软锤右击以反转) +gt.blockmachines.transformer.ha.tier.14.name=OpV高电流变压器 +gt.blockmachines.transformer.ha.tier.14.desc=MAX -> OPV (用软锤右击以反转) + +#Hatches +tt.base.emhatch.desc.0=最大元物质组数: +tt.base.emhatch.desc.1=最大容量: +tt.base.emhatch.desc.2=在这个仓室不处于多方块结构 +tt.base.emhatch.desc.3=中时,在后侧、上侧或下侧放 +tt.base.emhatch.desc.4=置溢流仓以提供过载保护。 +tt.base.emhatch.desc.5=使用量子隧道时,传输距离 +tt.base.emhatch.desc.6=可以沿直线拓展至最多15格 +tt.base.emhatch.desc.7=启用前必须涂色 + +gt.blockmachines.hatch.emmuffler.tier.08.name=UV溢流仓 +gt.blockmachines.hatch.emmuffler.tier.09.name=UHV溢流仓 +gt.blockmachines.hatch.emmuffler.tier.10.name=UEV溢流仓 +gt.blockmachines.hatch.emmuffler.tier.11.name=UIV溢流仓 +gt.blockmachines.hatch.emmuffler.tier.12.name=UMV溢流仓 +gt.blockmachines.hatch.emmuffler.tier.13.name=UXV溢流仓 +gt.blockmachines.hatch.emmuffler.desc.0=清理过剩的元物质 +gt.blockmachines.hatch.emmuffler.desc.1=物质缓存 +gt.blockmachines.hatch.emmuffler.desc.2=清理速度 +gt.blockmachines.hatch.emmuffler.desc.3=请勿阻塞输出! + +gt.blockmachines.hatch.energymulti04.tier.05.name=4安IV能源仓 +gt.blockmachines.hatch.energymulti16.tier.05.name=16安IV能源仓 +gt.blockmachines.hatch.energymulti64.tier.05.name=64安IV能源仓 +gt.blockmachines.hatch.energymulti04.tier.06.name=4安LuV能源仓 +gt.blockmachines.hatch.energymulti16.tier.06.name=16安LuV能源仓 +gt.blockmachines.hatch.energymulti64.tier.06.name=64安LuV能源仓 +gt.blockmachines.hatch.energymulti04.tier.07.name=4安ZPM能源仓 +gt.blockmachines.hatch.energymulti16.tier.07.name=16安ZPM能源仓 +gt.blockmachines.hatch.energymulti64.tier.07.name=64安ZPM能源仓 +gt.blockmachines.hatch.energymulti04.tier.08.name=4安UV能源仓 +gt.blockmachines.hatch.energymulti16.tier.08.name=16安UV能源仓 +gt.blockmachines.hatch.energymulti64.tier.08.name=64安UV能源仓 +gt.blockmachines.hatch.energymulti04.tier.09.name=4安UHV能源仓 +gt.blockmachines.hatch.energymulti16.tier.09.name=16安UHV能源仓 +gt.blockmachines.hatch.energymulti64.tier.09.name=64安UHV能源仓 +gt.blockmachines.hatch.energymulti04.tier.10.name=4安UEV能源仓 +gt.blockmachines.hatch.energymulti16.tier.10.name=16安UEV能源仓 +gt.blockmachines.hatch.energymulti64.tier.10.name=64安UEV能源仓 +gt.blockmachines.hatch.energymulti04.tier.11.name=4安UIV能源仓 +gt.blockmachines.hatch.energymulti16.tier.11.name=16安UIV能源仓 +gt.blockmachines.hatch.energymulti64.tier.11.name=64安UIV能源仓 +gt.blockmachines.hatch.energymulti04.tier.12.name=4安UMV能源仓 +gt.blockmachines.hatch.energymulti16.tier.12.name=16安UMV能源仓 +gt.blockmachines.hatch.energymulti64.tier.12.name=64安UMV能源仓 +gt.blockmachines.hatch.energymulti04.tier.13.name=4安UXV能源仓 +gt.blockmachines.hatch.energymulti16.tier.13.name=16安UXV能源仓 +gt.blockmachines.hatch.energymulti64.tier.13.name=64安UXV能源仓 +gt.blockmachines.hatch.energymulti.desc.0=为多方块机器以高电流输入能源 +gt.blockmachines.hatch.energymulti.desc.1=输入电流 + +gt.blockmachines.hatch.energytunnel1.tier.05.name=IV 256/t 激光靶仓 +gt.blockmachines.hatch.energytunnel2.tier.05.name=IV 1024/t 激光靶仓 +gt.blockmachines.hatch.energytunnel3.tier.05.name=IV 4096/t 激光靶仓 +gt.blockmachines.hatch.energytunnel4.tier.05.name=IV 16384/t 激光靶仓 +gt.blockmachines.hatch.energytunnel5.tier.05.name=IV 65536/t 激光靶仓 +gt.blockmachines.hatch.energytunnel6.tier.05.name=IV 262144/t 激光靶仓 +gt.blockmachines.hatch.energytunnel7.tier.05.name=IV 1048576/t 激光靶仓 +gt.blockmachines.hatch.energytunnel1.tier.06.name=LuV 256/t 激光靶仓 +gt.blockmachines.hatch.energytunnel2.tier.06.name=LuV 1024/t 激光靶仓 +gt.blockmachines.hatch.energytunnel3.tier.06.name=LuV 4096/t 激光靶仓 +gt.blockmachines.hatch.energytunnel4.tier.06.name=LuV 16384/t 激光靶仓 +gt.blockmachines.hatch.energytunnel5.tier.06.name=LuV 65536/t 激光靶仓 +gt.blockmachines.hatch.energytunnel6.tier.06.name=LuV 262144/t 激光靶仓 +gt.blockmachines.hatch.energytunnel7.tier.06.name=LuV 1048576/t 激光靶仓 +gt.blockmachines.hatch.energytunnel1.tier.07.name=ZPM 256/t 激光靶仓 +gt.blockmachines.hatch.energytunnel2.tier.07.name=ZPM 1024/t 激光靶仓 +gt.blockmachines.hatch.energytunnel3.tier.07.name=ZPM 4096/t 激光靶仓 +gt.blockmachines.hatch.energytunnel4.tier.07.name=ZPM 16384/t 激光靶仓 +gt.blockmachines.hatch.energytunnel5.tier.07.name=ZPM 65536/t 激光靶仓 +gt.blockmachines.hatch.energytunnel6.tier.07.name=ZPM 262144/t 激光靶仓 +gt.blockmachines.hatch.energytunnel7.tier.07.name=ZPM 1048576/t 激光靶仓 +gt.blockmachines.hatch.energytunnel1.tier.08.name=UV 256/t 激光靶仓 +gt.blockmachines.hatch.energytunnel2.tier.08.name=UV 1024/t 激光靶仓 +gt.blockmachines.hatch.energytunnel3.tier.08.name=UV 4096/t 激光靶仓 +gt.blockmachines.hatch.energytunnel4.tier.08.name=UV 16384/t 激光靶仓 +gt.blockmachines.hatch.energytunnel5.tier.08.name=UV 65536/t 激光靶仓 +gt.blockmachines.hatch.energytunnel6.tier.08.name=UV 262144/t 激光靶仓 +gt.blockmachines.hatch.energytunnel7.tier.08.name=UV 1048576/t 激光靶仓 +gt.blockmachines.hatch.energytunnel1.tier.09.name=UHV 256/t 激光靶仓 +gt.blockmachines.hatch.energytunnel2.tier.09.name=UHV 1024/t 激光靶仓 +gt.blockmachines.hatch.energytunnel3.tier.09.name=UHV 4096/t 激光靶仓 +gt.blockmachines.hatch.energytunnel4.tier.09.name=UHV 16384/t 激光靶仓 +gt.blockmachines.hatch.energytunnel5.tier.09.name=UHV 65536/t 激光靶仓 +gt.blockmachines.hatch.energytunnel6.tier.09.name=UHV 262144/t 激光靶仓 +gt.blockmachines.hatch.energytunnel7.tier.09.name=UHV 1048576/t 激光靶仓 +gt.blockmachines.hatch.energytunnel1.tier.10.name=UEV 256/t 激光靶仓 +gt.blockmachines.hatch.energytunnel2.tier.10.name=UEV 1024/t 激光靶仓 +gt.blockmachines.hatch.energytunnel3.tier.10.name=UEV 4096/t 激光靶仓 +gt.blockmachines.hatch.energytunnel4.tier.10.name=UEV 16384/t 激光靶仓 +gt.blockmachines.hatch.energytunnel5.tier.10.name=UEV 65536/t 激光靶仓 +gt.blockmachines.hatch.energytunnel6.tier.10.name=UEV 262144/t 激光靶仓 +gt.blockmachines.hatch.energytunnel7.tier.10.name=UEV 1048576/t 激光靶仓 +gt.blockmachines.hatch.energytunnel1.tier.11.name=UIV 256/t 激光靶仓 +gt.blockmachines.hatch.energytunnel2.tier.11.name=UIV 1024/t 激光靶仓 +gt.blockmachines.hatch.energytunnel3.tier.11.name=UIV 4096/t 激光靶仓 +gt.blockmachines.hatch.energytunnel4.tier.11.name=UIV 16384/t 激光靶仓 +gt.blockmachines.hatch.energytunnel5.tier.11.name=UIV 65536/t 激光靶仓 +gt.blockmachines.hatch.energytunnel6.tier.11.name=UIV 262144/t 激光靶仓 +gt.blockmachines.hatch.energytunnel7.tier.11.name=UIV 1048576/t 激光靶仓 +gt.blockmachines.hatch.energytunnel1.tier.12.name=UMV 256/t 激光靶仓 +gt.blockmachines.hatch.energytunnel2.tier.12.name=UMV 1024/t 激光靶仓 +gt.blockmachines.hatch.energytunnel3.tier.12.name=UMV 4096/t 激光靶仓 +gt.blockmachines.hatch.energytunnel4.tier.12.name=UMV 16384/t 激光靶仓 +gt.blockmachines.hatch.energytunnel5.tier.12.name=UMV 65536/t 激光靶仓 +gt.blockmachines.hatch.energytunnel6.tier.12.name=UMV 262144/t 激光靶仓 +gt.blockmachines.hatch.energytunnel7.tier.12.name=UMV 1048576/t 激光靶仓 +gt.blockmachines.hatch.energytunnel1.tier.13.name=UXV 256/t 激光靶仓 +gt.blockmachines.hatch.energytunnel2.tier.13.name=UXV 1024/t 激光靶仓 +gt.blockmachines.hatch.energytunnel3.tier.13.name=UXV 4096/t 激光靶仓 +gt.blockmachines.hatch.energytunnel4.tier.13.name=UXV 16384/t 激光靶仓 +gt.blockmachines.hatch.energytunnel5.tier.13.name=UXV 65536/t 激光靶仓 +gt.blockmachines.hatch.energytunnel6.tier.13.name=UXV 262144/t 激光靶仓 +gt.blockmachines.hatch.energytunnel7.tier.13.name=UXV 1048576/t 激光靶仓 +gt.blockmachines.hatch.energytunnel.tier.14.name=传奇激光靶仓 +gt.blockmachines.hatch.energytunnel.desc.0=多方块机器的能量输入端 +gt.blockmachines.hatch.energytunnel.desc.1=通量 + +gt.blockmachines.hatch.dynamomulti04.tier.05.name=4安IV动力仓 +gt.blockmachines.hatch.dynamomulti16.tier.05.name=16安IV动力仓 +gt.blockmachines.hatch.dynamomulti64.tier.05.name=64安IV动力仓 +gt.blockmachines.hatch.dynamomulti04.tier.06.name=4安LuV动力仓 +gt.blockmachines.hatch.dynamomulti16.tier.06.name=16安LuV动力仓 +gt.blockmachines.hatch.dynamomulti64.tier.06.name=64安LuV动力仓 +gt.blockmachines.hatch.dynamomulti04.tier.07.name=4安ZPM动力仓 +gt.blockmachines.hatch.dynamomulti16.tier.07.name=16安ZPM动力仓 +gt.blockmachines.hatch.dynamomulti64.tier.07.name=64安ZPM动力仓 +gt.blockmachines.hatch.dynamomulti04.tier.08.name=4安UV动力仓 +gt.blockmachines.hatch.dynamomulti16.tier.08.name=16安UV动力仓 +gt.blockmachines.hatch.dynamomulti64.tier.08.name=64安UV动力仓 +gt.blockmachines.hatch.dynamomulti04.tier.09.name=4安UHV动力仓 +gt.blockmachines.hatch.dynamomulti16.tier.09.name=16安UHV动力仓 +gt.blockmachines.hatch.dynamomulti64.tier.09.name=64安UHV动力仓 +gt.blockmachines.hatch.dynamomulti04.tier.10.name=4安UEV动力仓 +gt.blockmachines.hatch.dynamomulti16.tier.10.name=16安UEV动力仓 +gt.blockmachines.hatch.dynamomulti64.tier.10.name=64安UEV动力仓 +gt.blockmachines.hatch.dynamomulti04.tier.11.name=4安UIV动力仓 +gt.blockmachines.hatch.dynamomulti16.tier.11.name=16安UIV动力仓 +gt.blockmachines.hatch.dynamomulti64.tier.11.name=64安UIV动力仓 +gt.blockmachines.hatch.dynamomulti04.tier.12.name=4安UMV动力仓 +gt.blockmachines.hatch.dynamomulti16.tier.12.name=16安UMV动力仓 +gt.blockmachines.hatch.dynamomulti64.tier.12.name=64安UMV动力仓 +gt.blockmachines.hatch.dynamomulti04.tier.13.name=4安IV动力仓 +gt.blockmachines.hatch.dynamomulti16.tier.13.name=16安IV动力仓 +gt.blockmachines.hatch.dynamomulti64.tier.13.name=64安IV动力仓 +gt.blockmachines.hatch.dynamomulti.desc.0=从多方块机器以高电流输出能源 +gt.blockmachines.hatch.dynamomulti.desc.1=输出电流 + +gt.blockmachines.hatch.dynamotunnel1.tier.05.name=IV 256/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel2.tier.05.name=IV 1024/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel3.tier.05.name=IV 4096/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel4.tier.05.name=IV 16384/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel5.tier.05.name=IV 65536/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel6.tier.05.name=IV 262144/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel7.tier.05.name=IV 1048576/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel1.tier.06.name=LuV 256/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel2.tier.06.name=LuV 1024/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel3.tier.06.name=LuV 4096/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel4.tier.06.name=LuV 16384/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel5.tier.06.name=LuV 65536/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel6.tier.06.name=LuV 262144/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel7.tier.06.name=LuV 1048576/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel1.tier.07.name=ZPM 256/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel2.tier.07.name=ZPM 1024/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel3.tier.07.name=ZPM 4096/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel4.tier.07.name=ZPM 16384/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel5.tier.07.name=ZPM 65536/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel6.tier.07.name=ZPM 262144/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel7.tier.07.name=ZPM 1048576/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel1.tier.08.name=UV 256/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel2.tier.08.name=UV 1024/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel3.tier.08.name=UV 4096/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel4.tier.08.name=UV 16384/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel5.tier.08.name=UV 65536/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel6.tier.08.name=UV 262144/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel7.tier.08.name=UV 1048576/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel1.tier.09.name=UHV 256/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel2.tier.09.name=UHV 1024/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel3.tier.09.name=UHV 4096/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel4.tier.09.name=UHV 16384/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel5.tier.09.name=UHV 65536/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel6.tier.09.name=UHV 262144/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel7.tier.09.name=UHV 1048576/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel1.tier.10.name=UEV 256/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel2.tier.10.name=UEV 1024/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel3.tier.10.name=UEV 4096/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel4.tier.10.name=UEV 16384/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel5.tier.10.name=UEV 65536/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel6.tier.10.name=UEV 262144/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel7.tier.10.name=UEV 1048576/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel1.tier.11.name=UIV 256/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel2.tier.11.name=UIV 1024/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel3.tier.11.name=UIV 4096/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel4.tier.11.name=UIV 16384/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel5.tier.11.name=UIV 65536/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel6.tier.11.name=UIV 262144/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel7.tier.11.name=UIV 1048576/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel1.tier.12.name=UMV 256/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel2.tier.12.name=UMV 1024/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel3.tier.12.name=UMV 4096/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel4.tier.12.name=UMV 16384/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel5.tier.12.name=UMV 65536/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel6.tier.12.name=UMV 262144/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel7.tier.12.name=UMV 1048576/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel1.tier.13.name=UXV 256/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel2.tier.13.name=UXV 1024/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel3.tier.13.name=UXV 4096/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel4.tier.13.name=UXV 16384/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel5.tier.13.name=UXV 65536/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel6.tier.13.name=UXV 262144/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel7.tier.13.name=UXV 1048576/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel.tier.14.name=传奇激光源仓 +gt.blockmachines.hatch.dynamotunnel.desc.0=多方块机器的能量输出端 +gt.blockmachines.hatch.dynamotunnel.desc.1=通量 + +gt.blockmachines.emin.tier.08.name=UV元物质输入仓 +gt.blockmachines.emin.tier.09.name=UHV元物质输入仓 +gt.blockmachines.emin.tier.10.name=UEV元物质输入仓 +gt.blockmachines.emin.tier.11.name=UIV元物质输入仓 +gt.blockmachines.emin.tier.12.name=UMV元物质输入仓 +gt.blockmachines.emin.tier.13.name=UXV元物质输入仓 +gt.blockmachines.emin.desc=多方块机器的元物质输入 + +gt.blockmachines.emout.tier.08.name=UV元物质输出仓 +gt.blockmachines.emout.tier.09.name=UHV元物质输出仓 +gt.blockmachines.emout.tier.10.name=UEV元物质输出仓 +gt.blockmachines.emout.tier.11.name=UIV元物质输出仓 +gt.blockmachines.emout.tier.12.name=UMV元物质输出仓 +gt.blockmachines.emout.tier.13.name=UXV元物质输出仓 +gt.blockmachines.emout.desc=多方块机器的元物质输出 + +#TODO change tier.05 to tier.04 +gt.blockmachines.hatch.param.tier.05.name=参数仪 +gt.blockmachines.hatch.param.tier.07.name=参数仪 X +gt.blockmachines.hatch.param.tier.10.name=参数仪 tXt +gt.blockmachines.hatch.param.desc.0=多方块机器的参数化 +gt.blockmachines.hatch.param.desc.1=E=mine*craft² + +gt.blockmachines.hatch.certain.tier.07.name=未定元解析器 +gt.blockmachines.hatch.certain.tier.10.name=未定元解析器 X +gt.blockmachines.hatch.certain.desc.0=你真的很确定吗? +gt.blockmachines.hatch.certain.desc.1=盒子里的薛定谔方程 + +gt.blockmachines.hatch.datain.tier.07.name=副光学连接端口 +gt.blockmachines.hatch.datain.desc.0=多方块机器的数据输入 +gt.blockmachines.hatch.datain.desc.1=高速光纤接口 +gt.blockmachines.hatch.datain.desc.2=启用前必须涂色 + +gt.blockmachines.hatch.dataout.tier.07.name=主光学连接端口 +gt.blockmachines.hatch.dataout.desc.0=多方块机器的数据输出 +gt.blockmachines.hatch.dataout.desc.1=高速光纤接口 +gt.blockmachines.hatch.dataout.desc.2=启用前必须涂色 + +gt.blockmachines.hatch.datainass.tier.07.name=装配线数据库接口 +gt.blockmachines.hatch.datainass.desc.0=多方块机器的数据输入 +gt.blockmachines.hatch.datainass.desc.1=高速光纤接口 +gt.blockmachines.hatch.datainass.desc.2=启用前必须涂色 + +gt.blockmachines.hatch.dataoutass.tier.07.name=数据库主接口 +gt.blockmachines.hatch.dataoutass.desc.0=多方块机器的数据输出 +gt.blockmachines.hatch.dataoutass.desc.1=高速光纤接口 +gt.blockmachines.hatch.dataoutass.desc.2=启用前必须涂色 + +gt.blockmachines.hatch.rack.tier.08.name=计算机箱 +gt.blockmachines.hatch.rack.desc.0=4插槽机箱 +gt.blockmachines.hatch.rack.desc.1=容纳计算机组件 +gt.blockmachines.hatch.holder.tier.09.name=物品固定容器 +gt.blockmachines.hatch.holder.desc.0=用于研究站 +gt.blockmachines.hatch.holder.desc.1=先进的固定机制! +gt.blockmachines.hatch.capacitor.tier.03.name=电容仓 +gt.blockmachines.hatch.capacitor.desc.0=用于特斯拉电塔 +gt.blockmachines.hatch.capacitor.desc.1=存储'䏍量! (就一会儿) 原文:store 'nergy'(for a while) + +#Casings +gt.blockcasingsNH.10.name=UEV机械方块 +gt.blockcasingsNH.11.name=UIV机械方块 +gt.blockcasingsNH.12.name=UMV机械方块 +gt.blockcasingsNH.13.name=UXV机械方块 +gt.blockcasingsNH.14.name=OPV机械方块 +gt.blockcasingsNH.15.name=MAX机械方块 + +gt.blockhintTT.desc.0=构造时的帮助 +gt.blockhintTT.0.name=提示方块:1号 +gt.blockhintTT.1.name=提示方块:2号 +gt.blockhintTT.2.name=提示方块:3号 +gt.blockhintTT.3.name=提示方块:4号 +gt.blockhintTT.4.name=提示方块:5号 +gt.blockhintTT.5.name=提示方块:6号 +gt.blockhintTT.6.name=提示方块:7号 +gt.blockhintTT.7.name=提示方块:8号 +gt.blockhintTT.8.name=提示方块:9号 +gt.blockhintTT.9.name=提示方块:10号 +gt.blockhintTT.10.name=提示方块:11号 +gt.blockhintTT.11.name=提示方块:12号 +gt.blockhintTT.desc.1=特定组的占位符. +gt.blockhintTT.12.name=提示方块:一般 +gt.blockhintTT.desc.2=一般占位符. +gt.blockhintTT.13.name=提示方块:空气 +gt.blockhintTT.desc.3=确保其中包含空气方块. +gt.blockhintTT.14.name=提示方块:非空气 +gt.blockhintTT.desc.4=确保其中不含空气方块. +gt.blockhintTT.15.name=提示方块:错误 +gt.blockhintTT.desc.5=错误,你希望做什么? + +gt.blockcasingsTT.0.name=超能机械方块 +gt.blockcasingsTT.0.desc.0=非常适合高能应用. +gt.blockcasingsTT.0.desc.1=能量等级正在上升! +gt.blockcasingsTT.1.name=电子计算机械方块 +gt.blockcasingsTT.1.desc.0=又好又干净的外壳. +gt.blockcasingsTT.1.desc.1=灰尘会破坏它!? +gt.3blockcasingsTT.2.name=计算机散热风扇 +gt.blockcasingsTT.2.desc.0=带过滤器的散热风扇. +gt.blockcasingsTT.2.desc.1=完美静音! +gt.blockcasingsTT.3.name=进阶电子计算机械方块 +gt.blockcasingsTT.3.desc.0=包含高带宽总线 +gt.blockcasingsTT.3.desc.1=带宽数千量子比特. +gt.blockcasingsTT.4.name=分子机械方块 +gt.blockcasingsTT.4.desc.0=阻止元物质. +gt.blockcasingsTT.4.desc.1=也阻止了辐射和情绪... +gt.blockcasingsTT.5.name=进阶分子机械方块 +gt.blockcasingsTT.5.desc.0=冷却并稳定. +gt.blockcasingsTT.5.desc.1=舒适的机器基础. +gt.blockcasingsTT.6.name=遏制场发生器 +gt.blockcasingsTT.6.desc.0=产生一个场... +gt.blockcasingsTT.6.desc.1=甚至可以阻止高能粒子. +gt.blockcasingsTT.7.name=分子线圈 +gt.blockcasingsTT.7.desc.0=好吧,它太... +gt.blockcasingsTT.7.desc.1=[用这个线圈!] +gt.blockcasingsTT.8.name=中空机械方块 +gt.blockcasingsTT.8.desc.0=强化加速器通道. +gt.blockcasingsTT.8.desc.1=有史以来最先进的管道. +gt.blockcasingsTT.9.name=时空扭曲机械方块 +gt.blockcasingsTT.9.desc.0=光速不再是限制. +gt.blockcasingsTT.9.desc.1=Wibbly wobbly timey wimey stuff.(欣赏原文吧,表示给跪了,大意是时空摇摆不定) +gt.blockcasingsTT.10.name=传输机械方块 +gt.blockcasingsTT.10.desc.0=远程连接. +gt.blockcasingsTT.10.desc.1=最好别用手碰它. +gt.blockcasingsTT.11.name=维度联络机械方块 +gt.blockcasingsTT.11.desc.0=多维运算. +gt.blockcasingsTT.11.desc.1=宇宙或别的地方. +gt.blockcasingsTT.12.name=终极分子机械方块 +gt.blockcasingsTT.12.desc.0=各方面的终极. +gt.blockcasingsTT.12.desc.1=我不知道它不能做什么. +gt.blockcasingsTT.13.name=究极分子机械方块 +gt.blockcasingsTT.13.desc.0=各方面的究极. +gt.blockcasingsTT.13.desc.1=我不知道自己在做什么! +gt.blockcasingsTT.14.name=终极遏制场发生器 +gt.blockcasingsTT.14.desc.0=黑洞... +gt.blockcasingsTT.14.desc.1=嗯... +gt.blockcasingsTT.15.name=[调试方块] +gt.blockcasingsTT.15.desc.0=懒人确定边的方式. +gt.blockcasingsTT.15.desc.1=0, 1, 2, 3, 4, 5, 6?! + +gt.blockcasingsBA0.0.name=红石合金初级特斯拉绕组 +gt.blockcasingsBA0.1.name=MV超导初级特斯拉绕组 +gt.blockcasingsBA0.2.name=HV超导初级特斯拉绕组 +gt.blockcasingsBA0.3.name=EV超导初级特斯拉绕组 +gt.blockcasingsBA0.4.name=IV超导初级特斯拉绕组 +gt.blockcasingsBA0.5.name=LuV超导初级特斯拉绕组 +gt.blockcasingsBA0.0.desc.0=最高电圧 +gt.blockcasingsBA0.0.desc.1=有的人称这为神迹,另一些人把这叫做物理. +gt.blockcasingsBA0.6.name=特斯拉基座机械方块 +gt.blockcasingsBA0.6.desc.0=一种奇妙机器的基础 +gt.blockcasingsBA0.6.desc.1=它是活的,它是活的! +gt.blockcasingsBA0.7.name=特斯拉线圈机械方块 +gt.blockcasingsBA0.7.desc.0=用最好的铝箔制成! +gt.blockcasingsBA0.7.desc.1=法拉第套装稍晚到来 +gt.blockcasingsBA0.8.name=特斯拉次级绕组 +gt.blockcasingsBA0.8.desc.0=从初级绕组获取能量 +gt.blockcasingsBA0.8.desc.1=谁不想要32k的环氧树脂? + +#Multiblocks +gt.blockmachines.multimachine.em.transformer.name=有源变压器 +gt.blockmachines.multimachine.em.transformer.hint=1 - 能源仓、动力仓或超能机械方块 +gt.blockmachines.multimachine.em.transformer.desc.0=变电站 +gt.blockmachines.multimachine.em.transformer.desc.1=任意电压间的相互转换! +gt.blockmachines.multimachine.em.transformer.desc.2=只有0.78125%的能量损失, HAYO! + +gt.blockmachines.multimachine.tm.microwave.name=微波发生仪 +gt.blockmachines.multimachine.tm.microwave.hint.0=1 - 基础仓室或洁净不锈钢机械方块 +gt.blockmachines.multimachine.tm.microwave.hint.1=也像个漏斗,所以给它个输出总线吧 +gt.blockmachines.multimachine.tm.microwave.desc.0=高频烤炉 +gt.blockmachines.multimachine.tm.microwave.desc.1=从生物到食物,只在转瞬之间! +gt.blockmachines.multimachine.tm.microwave.desc.2=我说用核弹...我的意思是把晚餐放进微波炉! +gt.blockmachines.multimachine.tm.microwave.cfgi.0=功率设置 +gt.blockmachines.multimachine.tm.microwave.cfgi.1=时间设置 +gt.blockmachines.multimachine.tm.microwave.cfgo.0=时间 +gt.blockmachines.multimachine.tm.microwave.cfgo.1=剩余时间 + +gt.blockmachines.multimachine.tm.teslaCoil.name=特斯拉电塔 +gt.blockmachines.multimachine.tm.teslaCoil.hint.0=1 - 基础仓室, 电容仓或特斯拉基座机械方块 +gt.blockmachines.multimachine.tm.teslaCoil.hint.1=2 - 钛框架 +gt.blockmachines.multimachine.tm.teslaCoil.desc.0=无线电源塔 +gt.blockmachines.multimachine.tm.teslaCoil.desc.1=讨厌的线缆不见啦! +gt.blockmachines.multimachine.tm.teslaCoil.desc.2=可能会影响生存几率 +gt.blockmachines.multimachine.tm.teslaCoil.cfgi.0=迟滞低设置 +gt.blockmachines.multimachine.tm.teslaCoil.cfgi.1=迟滞高设置 +gt.blockmachines.multimachine.tm.teslaCoil.cfgi.2=特斯拉电塔传输半径设置 +gt.blockmachines.multimachine.tm.teslaCoil.cfgi.3=特斯拉收发器传输半径设置 +gt.blockmachines.multimachine.tm.teslaCoil.cfgi.4=加强特斯拉线圈帽传输半径设置 +gt.blockmachines.multimachine.tm.teslaCoil.cfgi.5=输出电压设置 +gt.blockmachines.multimachine.tm.teslaCoil.cfgi.6=输出电流设置 +gt.blockmachines.multimachine.tm.teslaCoil.cfgi.7=最小扫描时间设置 +gt.blockmachines.multimachine.tm.teslaCoil.cfgi.8=过载设置 +gt.blockmachines.multimachine.tm.teslaCoil.cfgi.9=闲置 +gt.blockmachines.multimachine.tm.teslaCoil.cfgo.0=特斯拉电塔传输半径显示 +gt.blockmachines.multimachine.tm.teslaCoil.cfgo.1=特斯拉收发器传输半径显示 +gt.blockmachines.multimachine.tm.teslaCoil.cfgo.2=加强特斯拉线圈帽传输半径显示 +gt.blockmachines.multimachine.tm.teslaCoil.cfgo.3=输出电压显示 +gt.blockmachines.multimachine.tm.teslaCoil.cfgo.4=输出电流显示 +gt.blockmachines.multimachine.tm.teslaCoil.cfgo.5=能量容量显示 +gt.blockmachines.multimachine.tm.teslaCoil.cfgo.6=已存储能量显示 +gt.blockmachines.multimachine.tm.teslaCoil.cfgo.7=充能进度显示 +gt.blockmachines.multimachine.tm.teslaCoil.cfgo.8=扫描时间显示 + +gt.blockmachines.multimachine.em.switch.name=QoS网络交换机 +gt.blockmachines.multimachine.em.switch.hint=1 - 基础仓室、光学连接端口或电子计算机机械方块 +gt.blockmachines.multimachine.em.switch.desc.0=用户控制的计算力路由 +gt.blockmachines.multimachine.em.switch.desc.1=服务质量是必须的 + +gt.blockmachines.multimachine.em.computer.name=量子计算机 +gt.blockmachines.multimachine.em.computer.hint.0=1 - 基础仓室、光学连接端口或电子计算机机械方块 +gt.blockmachines.multimachine.em.computer.hint.1=2 - 计算机箱或进阶电子计算机械方块 +gt.blockmachines.multimachine.em.computer.desc=你需要它来处理上面的这串数字 +gt.blockmachines.multimachine.em.computer.cfgi.0=超频比 +gt.blockmachines.multimachine.em.computer.cfgi.1=过压比 +gt.blockmachines.multimachine.em.computer.cfgo.0=当前最大热量 +gt.blockmachines.multimachine.em.computer.cfgo.1=生成算力 + +gt.blockmachines.multimachine.em.databank.name=数据库 +gt.blockmachines.multimachine.em.databank.hint.0=1 - 基础仓室或超能机械方块 +gt.blockmachines.multimachine.em.databank.hint.1=2 - 数据访问仓、数据库主接口或电子计算机械方块 +gt.blockmachines.multimachine.em.databank.desc.0=远程装配数据传递 +gt.blockmachines.multimachine.em.databank.desc.1=直接应用于前部 + +gt.blockmachines.multimachine.em.junction.name=物质流枢纽 +gt.blockmachines.multimachine.em.junction.hint.0=1 - 基础仓室或超能机械方块 +gt.blockmachines.multimachine.em.junction.hint.1=2 - 元物质输入/出仓或分子机械方块 +gt.blockmachines.multimachine.em.junction.desc.0=中转物质流 +gt.blockmachines.multimachine.em.junction.desc.1=沿轴运动! + +gt.blockmachines.multimachine.em.mattertoem.name=物质量子化仪 +gt.blockmachines.multimachine.em.mattertoem.hint.0=1 - 基础仓室或超能机械方块 +gt.blockmachines.multimachine.em.mattertoem.hint.1=2 - 元物质输出仓 +gt.blockmachines.multimachine.em.mattertoem.hint.2=3 - 元物质溢流仓或分子机械方块 +gt.blockmachines.multimachine.em.mattertoem.desc.0=方便地将常规物品转换为量子形态 +gt.blockmachines.multimachine.em.mattertoem.desc.1=使得它们更...不方便 + +gt.blockmachines.multimachine.em.emtomatter.name=物质反量子化仪 +gt.blockmachines.multimachine.em.emtomatter.hint.0=1 - 基础仓室或超能机械方块 +gt.blockmachines.multimachine.em.emtomatter.hint.1=2 - 元物质输入仓 +gt.blockmachines.multimachine.em.emtomatter.hint.2=3 - 元物质溢流仓或分子机械方块 +gt.blockmachines.multimachine.em.emtomatter.desc.0=将量子转化回 +gt.blockmachines.multimachine.em.emtomatter.desc.1=它们的常规形态...但为什么要这么做? + +gt.blockmachines.multimachine.em.emtoessentia.name=源质反量子化仪 +gt.blockmachines.multimachine.em.emtoessentia.hint.0=1 - 基础仓室或超能机械方块 +gt.blockmachines.multimachine.em.emtoessentia.hint.1=2 - 元物质输入仓 +gt.blockmachines.multimachine.em.emtoessentia.hint.2=3 - 元物质溢流仓或分子机械方块 +gt.blockmachines.multimachine.em.emtoessentia.hint.3=通用 - 某种源质的储存方块 +gt.blockmachines.multimachine.em.emtoessentia.desc.0=将量子转化回 +gt.blockmachines.multimachine.em.emtoessentia.desc.1=它们的常规形态...但为什么要这么做? + +gt.blockmachines.multimachine.em.essentiatoem.name=源质量子化仪 +gt.blockmachines.multimachine.em.essentiatoem.hint.0=1 - 基础仓室或超能机械方块 +gt.blockmachines.multimachine.em.essentiatoem.hint.1=2 - 元物质输出仓 +gt.blockmachines.multimachine.em.essentiatoem.hint.2=3 - 元物质溢流仓或分子机械方块 +gt.blockmachines.multimachine.em.essentiatoem.hint.3=通用 - 某种源质的储存方块 +gt.blockmachines.multimachine.em.essentiatoem.desc.0=方便地将常规物品转换为量子形态 +gt.blockmachines.multimachine.em.essentiatoem.desc.1=使得它们更...不方便 + +gt.blockmachines.multimachine.em.scanner.name=元物质扫描仪 +gt.blockmachines.multimachine.em.scanner.hint.0=1 - 基础仓室或超能机械方块 +gt.blockmachines.multimachine.em.scanner.hint.1=2 - 元物质输入仓或分子机械方块 +gt.blockmachines.multimachine.em.scanner.hint.2=3 - 元物质输出仓或分子机械方块 +gt.blockmachines.multimachine.em.scanner.hint.3=4 - 元物质溢流仓或分子机械方块 +gt.blockmachines.multimachine.em.scanner.desc.0=它是如何存在的? +gt.blockmachines.multimachine.em.scanner.desc.1=我!不!知!道!(至少暂时是这样) + +gt.blockmachines.multimachine.em.research.name=研究站 +gt.blockmachines.multimachine.em.research.hint.0=1 - 基础仓室、光学连接端口或电子计算机械方块 +gt.blockmachines.multimachine.em.research.hint.1=2 - 物品固定容器 +gt.blockmachines.multimachine.em.research.desc.0=哲学家们甚至... +gt.blockmachines.multimachine.em.research.desc.1=从来不曾梦见它! + +gt.blockmachines.multimachine.em.collider.name=物质对撞机 +gt.blockmachines.multimachine.em.collider.hint.0=1 - 基础仓室或超能机械方块 +gt.blockmachines.multimachine.em.collider.hint.1=2 - 元物质输入仓或分子机械方块 +gt.blockmachines.multimachine.em.collider.hint.2=3 - 元物质输出仓或分子机械方块 +gt.blockmachines.multimachine.em.collider.hint.3=4 - 元物质溢流仓或分子机械方块 +gt.blockmachines.multimachine.em.collider.hint.4=通用 - 另一个控制器面向相反的方向 +gt.blockmachines.multimachine.em.collider.desc.0=以极高的速度使物质相碰撞 +gt.blockmachines.multimachine.em.collider.desc.1=比光*还快!!! +gt.blockmachines.multimachine.em.collider.mode.0=模式:聚变 +gt.blockmachines.multimachine.em.collider.mode.1=模式:对撞 +gt.blockmachines.multimachine.em.collider.mode.2=模式:未定义 +gt.blockmachines.multimachine.em.collider.mode.3=从属于其他控制器 + +gt.blockmachines.multimachine.em.infuser.name=能量注入仪 +gt.blockmachines.multimachine.em.infuser.hint=1 - 基础仓室或超能机械方块 +gt.blockmachines.multimachine.em.infuser.desc.0=急速的能量转移! +gt.blockmachines.multimachine.em.infuser.desc.1=瞬间满电! +gt.blockmachines.multimachine.em.infuser.desc.2=但坏掉的时候不会工作! +gt.blockmachines.multimachine.em.infuser.desc.3=以及你需要考虑一下损耗... + +gt.blockmachines.multimachine.em.processing.name=量子加工机 +gt.blockmachines.multimachine.em.processing.hint.0=1 - 基础仓室或超能机械方块 +gt.blockmachines.multimachine.em.processing.hint.1=2 - 元物质输入/出仓或分子机械方块 +gt.blockmachines.multimachine.em.processing.desc.0=从你最启用它开始... +gt.blockmachines.multimachine.em.processing.desc.1=为你处理量子物质 + +gt.blockmachines.multimachine.em.crafter.name=物质组装机 +gt.blockmachines.multimachine.em.crafter.hint.0=1 - 基础仓室或超能机械方块 +gt.blockmachines.multimachine.em.crafter.hint.1=2 - 元物质输入/出仓或分子机械方块 +gt.blockmachines.multimachine.em.crafter.desc.0=以最精确的方法制造物品。 +gt.blockmachines.multimachine.em.crafter.desc.1=(跨过普朗克尺度的过程) + +gt.blockmachines.multimachine.em.stabilizer.name=元物质稳定器 +gt.blockmachines.multimachine.em.stabilizer.hint.0=1 - 基础仓室或超能机械方块 +gt.blockmachines.multimachine.em.stabilizer.hint.1=2 - 元物质输入/出仓或分子机械方块 +gt.blockmachines.multimachine.em.stabilizer.desc.0=扭曲时间以稳定物质 +gt.blockmachines.multimachine.em.stabilizer.desc.1=Wibbly wobbly timey wimey stuff.(欣赏原文吧,表示给跪了,大意是时空摇摆不定) + +gt.blockmachines.multimachine.em.wormhole.name=虫洞 +gt.blockmachines.multimachine.em.wormhole.hint.0=1 - 基础仓室或超能机械方块 +gt.blockmachines.multimachine.em.wormhole.hint.1=2 - 元物质输入/出仓或分子机械方块 +gt.blockmachines.multimachine.em.wormhole.desc.0=它并没有充满虫子。 +gt.blockmachines.multimachine.em.wormhole.desc.1=它充满了反虫子!!! + +gt.blockmachines.multimachine.em.decay.name=衰变发生器 +gt.blockmachines.multimachine.em.decay.hint.0=1 - 基础仓室或超能机械方块 +gt.blockmachines.multimachine.em.decay.hint.1=2 - 元物质输入/出仓或分子机械方块 +gt.blockmachines.multimachine.em.decay.desc.0=它的周期太长了吗? +gt.blockmachines.multimachine.em.decay.desc.1=那么就用它的半衰期(3)代替! +gt.blockmachines.multimachine.em.decay.conf=分流器 + +gt.blockmachines.multimachine.em.annihilation.name=湮灭发电机 +gt.blockmachines.multimachine.em.annihilation.hint.0=1 - 基础仓室或超能机械方块 +gt.blockmachines.multimachine.em.annihilation.hint.1=2 - 元物质输入/出仓或分子机械方块 +gt.blockmachines.multimachine.em.annihilation.desc.0=物质和反物质并不是那么喜欢对方。 +gt.blockmachines.multimachine.em.annihilation.desc.1=质能转换! + +gt.blockmachines.multimachine.em.blackholegenerator.name=黑洞发生器 +gt.blockmachines.multimachine.em.blackholegenerator.hint.0=1 - 基础仓室或超能机械方块 +gt.blockmachines.multimachine.em.blackholegenerator.hint.1=2 - 元物质输入/出仓或分子机械方块 +gt.blockmachines.multimachine.em.blackholegenerator.desc.0=基于奇点的能量获取 +gt.blockmachines.multimachine.em.blackholegenerator.desc.1=极端不稳定!!! + +#Pipes +gt.blockmachines.pipe.elementalmatter.name=量子隧道 +gt.blockmachines.pipe.elementalmatter.desc.0=量子隧道设备. +gt.blockmachines.pipe.elementalmatter.desc.1=不是传送门!!! +gt.blockmachines.pipe.elementalmatter.desc.2=启用前必须涂色 +gt.blockmachines.pipe.elementalmatter.desc.3=请勿交叉、分流或转弯 + +gt.blockmachines.pipe.energystream.name=激光真空管 +gt.blockmachines.pipe.energystream.desc.0=激光隧道设备. +gt.blockmachines.pipe.energystream.desc.1=要有光!!! +gt.blockmachines.pipe.energystream.desc.2=启用前必须涂色 +gt.blockmachines.pipe.energystream.desc.3=请勿分流或转弯 + +gt.blockmachines.pipe.datastream.name=光缆 +gt.blockmachines.pipe.datastream.desc.0=高级数据传输设备 +gt.blockmachines.pipe.datastream.desc.1=请勿直视激光! +gt.blockmachines.pipe.datastream.desc.2=启用前必须涂色 +gt.blockmachines.pipe.datastream.desc.3=请勿交叉或分流 + +#Single blocks +gt.blockmachines.machine.tt.ownerdetector.name=所有者检测机 +gt.blockmachines.machine.tt.ownerdetector.desc.0=使用螺丝刀以变更模式 +gt.blockmachines.machine.tt.ownerdetector.desc.1=寻找他的PaPa +gt.blockmachines.machine.tt.ownerdetector.desc.2=高兴时发出信号 + +gt.blockmachines.machine.tt.datareader.name=数据读取机 +gt.blockmachines.machine.tt.datareader.desc.0=读取闪存和数据球 +gt.blockmachines.machine.tt.datareader.desc.1=给它通电,然后 +gt.blockmachines.machine.tt.datareader.desc.2=将数据存储物放进去 + +gt.blockmachines.machine.tt.buck.05.name=IV降压变压器 +gt.blockmachines.machine.tt.buck.06.name=LuV降压变压器 +gt.blockmachines.machine.tt.buck.07.name=ZPM降压变压器 +gt.blockmachines.machine.tt.buck.08.name=UV降压变压器 +gt.blockmachines.machine.tt.buck.09.name=UHV降压变压器 +gt.blockmachines.machine.tt.buck.10.name=UEV降压变压器 +gt.blockmachines.machine.tt.buck.11.name=UIV降压变压器 +gt.blockmachines.machine.tt.buck.12.name=UMV降压变压器 +gt.blockmachines.machine.tt.buck.13.name=UXV降压变压器 +gt.blockmachines.machine.tt.buck.desc.0=电压调节器 +gt.blockmachines.machine.tt.buck.desc.1=可调降压变压器 +gt.blockmachines.machine.tt.buck.desc.2=开关电源... + +gt.blockmachines.machine.tt.tesla.01.name=基础特斯拉收发器 +gt.blockmachines.machine.tt.tesla.02.name=进阶特斯拉收发器 +gt.blockmachines.machine.tt.tesla.03.name=霄龙特斯拉收发器 +gt.blockmachines.machine.tt.tesla.04.name=极限特斯拉收发器 +gt.blockmachines.machine.tt.tesla.05.name=疯狂特斯拉收发器 +gt.blockmachines.machine.tt.tesla.desc.0=你选择的特斯拉I/O机器 +gt.blockmachines.machine.tt.tesla.desc.1=富人的闪电洪炉 + +#Debug blocks +gt.blockmachines.debug.tt.pollutor.name=Debug污染生成机 +gt.blockmachines.debug.tt.pollutor.desc.0=该死的genny破产了! +gt.blockmachines.debug.tt.pollutor.desc.1=无限的生产者/消费者 +gt.blockmachines.debug.tt.pollutor.desc.2=我只是想要一个... +gt.blockmachines.debug.tt.data.name=Debug数据仓 +gt.blockmachines.debug.tt.data.desc.0=量子数据输出 +gt.blockmachines.debug.tt.data.desc.1=高速光纤接口 +gt.blockmachines.debug.tt.data.desc.2=启用前必须涂色 +gt.blockmachines.debug.tt.maintenance.name=Debug维护仓 +gt.blockmachines.debug.tt.maintenance.desc.0=用于维护多方块 +gt.blockmachines.debug.tt.maintenance.desc.1=它能修好一切,除了自己. +gt.blockmachines.debug.tt.maintenance.desc.2=为人民服务! +gt.blockmachines.debug.tt.genny.name=Debug发电机 +gt.blockmachines.debug.tt.genny.desc.0=凭空而生的能量 +gt.blockmachines.debug.tt.genny.desc.1=一个无限的能源生产/消耗设备 +gt.blockmachines.debug.tt.genny.desc.2=我只是想要一个... +gt.blockmachines.debug.tt.writer.name=Debug结构打印机 +gt.blockmachines.debug.tt.writer.desc.0=扫描周围的方块 +gt.blockmachines.debug.tt.writer.desc.1=打印多方块非实体的结构样式编码 +gt.blockmachines.debug.tt.writer.desc.2=ABC轴沿机器正面确定 + +#Keywords and phrases +#Example: ID:3 +tt.keyword.ID=ID +#Example: 32EU at 1A +tt.keyword.at= +#These are Thaumcraft aspects +tt.keyword.Air=风 +tt.keyword.Earth=地 +tt.keyword.Fire=火 +tt.keyword.Water=水 +tt.keyword.Order=秩序 +tt.keyword.Entropy=混沌 +tt.keyword.Primal=元始 +tt.keyword.Aspect=要素 +tt.keyword.CLASS=CLASS +tt.keyword.NAME=名字 +tt.keyword.CHARGE=充能 +tt.keyword.COLORLESS=无色 +tt.keyword.MASS=物质 +tt.keyword.BOOM=BOOM! +tt.keyword.Destination=目标 +tt.keyword.Weight=质量 +tt.keyword.Source=来源 +tt.keyword.Progress=过程 +tt.keyword.Computation=算力 +#Problemns as in maintanance issues +tt.keyword.Problems=故障 +tt.keyword.Efficiency=效率 +#Button that allows to pass power to other machines +tt.keyword.PowerPass=导能 +#Button that vents EM +tt.keyword.SafeVoid=安全罩 +tt.keyword.Parametrizer=参数仪 +tt.keyword.Value=值 +tt.keyword.Input=输入 +tt.keyword.input=输入 +tt.keyword.output=输出 +tt.keyword.Status=状态 +tt.keyword.Content=内含 +tt.keyword.PacketHistory=封包记录 + +tt.keyphrase.LIFE_TIME=寿命 +tt.keyphrase.CARRIES_COLOR=有色 +tt.keyphrase.提示方块:Details=提示细节 +tt.keyphrase.At_current_energy_level=在当前能级 +#Used when 0 Elemental Matter Stacks +tt.keyphrase.No_Stacks=空 +tt.keyphrase.Contains_EM=存储元物质 +tt.keyphrase.Contained_mass=存储物质 +tt.keyphrase.Mass_Disposal_speed=清理速度 +tt.keyphrase.Muffler_BOOM=溢流BOOM! +tt.keyphrase.Energy_Hatches=能源仓 +tt.keyphrase.Probably_uses=可能用到 +tt.keyphrase.Probably_makes=可能制作 +tt.keyphrase.Tier_Rating=等级 +tt.keyphrase.Amp_Rating=电流 +tt.keyphrase.Computation_Available=可用算力 +tt.keyphrase.Computation_Remaining=剩余算力 +tt.keyphrase.Content_Stack_Count=内含:堆数 +tt.keyphrase.Base_computation=基础算力 +tt.keyphrase.After_overclocking=超频后 +tt.keyphrase.Heat_Accumulated=热量累积 +tt.keyphrase.Running_interdimensional_scan=多维度扫描进行中 +tt.keyphrase.Running_local_dimension_scan=本维度扫描进行中 +tt.keyphrase.Overdrive_disengaged=过载未占用 +tt.keyphrase.Overdrive_engaged=过载已占用 +tt.keyphrase.Hysteresis_high_set_to=滞后高通设置为 +tt.keyphrase.Hysteresis_low_set_to=滞后低通设置为 +tt.keyphrase.Tesla_radius_set_to=特斯拉半径设置为 +tt.keyphrase.Sending_power=发送功率 +tt.keyphrase.Receiving_power=接收功率 +tt.keyphrase.Stored_energy=已存储能量 +tt.keyphrase.Stored_EU=已存储EU +tt.keyphrase.Average_IO=平均I/O +tt.keyphrase.Average_IO_(max)=电压I/O(最大) +tt.keyphrase.Average_IO_max=电压I/O 最大 +tt.keyphrase.Amperage_IO_(max)=电流I/O(最大) +tt.keyphrase.Side_capabilities=辅助功能 -death.attack.elementalPollution=%1$s 被蒸发了 -death.attack.elementalPollution.player=%1$s 在与 %2$s 战斗中被蒸发了 +#OpenTurrets compatibility +tile.turretHeadEM.name=元物质炮塔 +tile.turretBaseEM.name=元物质炮塔基座 -- cgit From 51bcd0afb70ee185e89478177ddd2866abc22a27 Mon Sep 17 00:00:00 2001 From: Bass Date: Sat, 29 Feb 2020 09:46:31 +0000 Subject: Optical Connector Fix Quick issue patch for Kiwi233 Fixes Optical master connector and Optical slave connector having GUIs on right click --- .../metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DataConnector.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DataConnector.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DataConnector.java index 74564a7a57..6d0706971d 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DataConnector.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DataConnector.java @@ -114,7 +114,6 @@ public abstract class GT_MetaTileEntity_Hatch_DataConnector Date: Sat, 29 Feb 2020 09:50:59 +0000 Subject: Update GT5u Version --- .../GT_MetaTileEntity_TM_proccessingStack.java | 142 +++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java new file mode 100644 index 0000000000..9466d9df46 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java @@ -0,0 +1,142 @@ +package com.github.technus.tectech.thing.metaTileEntity.multi; + +import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.Reference; +import com.github.technus.tectech.thing.metaTileEntity.IConstructable; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.*; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedTexture; +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.util.GT_Recipe; +import gregtech.api.util.GT_Utility; +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; + +import java.util.ArrayList; +import java.util.HashSet; + +import static com.github.technus.tectech.Util.StructureBuilderExtreme; +import static com.github.technus.tectech.loader.MainLoader.microwaving; +import static com.github.technus.tectech.recipe.TT_recipeAdder.nullItem; +import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.*; +import static gregtech.api.GregTech_API.sBlockCasings4; +import static net.minecraft.util.StatCollector.translateToLocal; + +public class GT_MetaTileEntity_TM_proccessingStack extends GT_MetaTileEntity_MultiblockBase_EM implements IConstructable { + //region variables + private boolean hasBeenPausedThisCycle = false; + //endregion + + //region structure + //use multi A energy inputs, use less power the longer it runs + private static final String[][] base = new String[][]{ + {" ",}, + {" 0 ",}, + {" ",}, + }; + private static final String[][] slice = new String[][]{ + {"111",}, + {"101",}, + {"111",}, + }; + private static final String[][] cap = new String[][]{ + {" ",}, + {" 0 ",}, + {" ",}, + }; + private static final Block[] blockType = new Block[]{sBlockCasings4}; + private static final byte[] blockMeta = new byte[]{1}; + + private final IHatchAdder[] addingMethods = new IHatchAdder[]{this::addClassicToMachineList}; + private static final short[] casingTextures = new short[]{49}; + private static final Block[] blockTypeFallback = new Block[]{sBlockCasings4}; + private static final byte[] blockMetaFallback = new byte[]{1}; + private static final String[] description = new String[]{ + EnumChatFormatting.AQUA + translateToLocal("tt.keyphrase.Hint_Details") + ":", + translateToLocal("gt.blockmachines.multimachine.tm.proccessingStack.hint.0"), + translateToLocal("gt.blockmachines.multimachine.tm.proccessingStack.hint.1"), + }; + //endregion + + public GT_MetaTileEntity_TM_proccessingStack(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public GT_MetaTileEntity_TM_proccessingStack(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new GT_MetaTileEntity_TM_proccessingStack(mName); + } + + @Override + public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { + return false; + //return structureCheck_EM(shape, blockType, blockMeta, addingMethods, casingTextures, blockTypeFallback, blockMetaFallback, 1, 0, 0); + } + + @Override + public boolean checkRecipe_EM(ItemStack itemStack) { + return true; + } + + @Override + public void outputAfterRecipe_EM() { + + } + + @Override + public String[] getDescription() { + return new String[]{ + CommonValues.BASS_MARK, + translateToLocal("gt.blockmachines.multimachine.tm.proccessingStack.desc.0"), + EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD + translateToLocal("gt.blockmachines.multimachine.tm.proccessingStack.desc.1"), + EnumChatFormatting.BLUE + translateToLocal("gt.blockmachines.multimachine.tm.proccessingStack.desc.2"), + }; + } + + @Override + public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) { + return new GT_Container_MultiMachineEM(aPlayerInventory, aBaseMetaTileEntity, false, true, true); + } + + @Override + public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) { + return new GT_GUIContainer_MultiMachineEM(aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "EMDisplay.png", false, true, true); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { + if (aSide == aFacing) { + return new ITexture[]{Textures.BlockIcons.CASING_BLOCKS[49], new TT_RenderedTexture(aActive ? Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE : Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE)}; + } else if (aSide == GT_Utility.getOppositeSide(aFacing)) { + return new ITexture[]{Textures.BlockIcons.CASING_BLOCKS[49], aActive ? Textures.BlockIcons.CASING_BLOCKS[52] : Textures.BlockIcons.CASING_BLOCKS[53]}; + } + return new ITexture[]{Textures.BlockIcons.CASING_BLOCKS[49]}; + } + + @Override + public boolean onRunningTick(ItemStack aStack) { + return true; + } + + @Override + public void construct(int stackSize, boolean hintsOnly) { + //StructureBuilderExtreme(shape, blockType, blockMeta, 2, 2, 0, getBaseMetaTileEntity(), this, hintsOnly); + } + + @Override + public String[] getStructureDescription(int stackSize) { + return description; + } +} \ No newline at end of file -- cgit From e0bfe85329d11c676e88c059418b3f05f72477da Mon Sep 17 00:00:00 2001 From: Bass Date: Sat, 29 Feb 2020 09:56:00 +0000 Subject: Update GT5u Version --- build.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.properties b/build.properties index 941c22cd92..f7b519147b 100644 --- a/build.properties +++ b/build.properties @@ -6,8 +6,8 @@ ic2.version=2.2.790-experimental codechickenlib.version=1.1.3.140 codechickencore.version=1.0.7.47 nei.version=1.0.5.120 -gregtech.jenkinsbuild=370 -gregtech.version=5.09.33.25 +gregtech.jenkinsbuild=408 +gregtech.version=5.09.33.32 cofhcore.version=[1.7.10]3.1.4-329-dev yamcore.version=0.5.79 baubles.version=1.0.1.10 -- cgit From a08cb636d1845e3ec45ca182265e41fe18b04215 Mon Sep 17 00:00:00 2001 From: Dream-Master Date: Sat, 29 Feb 2020 11:23:45 +0100 Subject: bump version --- build.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.properties b/build.properties index f7b519147b..a86b45bf9b 100644 --- a/build.properties +++ b/build.properties @@ -1,6 +1,6 @@ minecraft.version=1.7.10 forge.version=10.13.4.1614 -tectech.version=3.7.3 +tectech.version=3.7.4 ic2.version=2.2.790-experimental codechickenlib.version=1.1.3.140 -- cgit From 8018005b583183b20afdba86250295d975467f83 Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Fri, 27 Mar 2020 06:29:03 +0100 Subject: Block nerf (#24) * put Irontank mod to the withelist of BlockNerf * bump gt dependencie --- build.properties | 2 +- src/main/java/com/github/technus/tectech/loader/MainLoader.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/build.properties b/build.properties index a86b45bf9b..ce592885df 100644 --- a/build.properties +++ b/build.properties @@ -6,7 +6,7 @@ ic2.version=2.2.790-experimental codechickenlib.version=1.1.3.140 codechickencore.version=1.0.7.47 nei.version=1.0.5.120 -gregtech.jenkinsbuild=408 +gregtech.jenkinsbuild=420 gregtech.version=5.09.33.32 cofhcore.version=[1.7.10]3.1.4-329-dev yamcore.version=0.5.79 diff --git a/src/main/java/com/github/technus/tectech/loader/MainLoader.java b/src/main/java/com/github/technus/tectech/loader/MainLoader.java index d7d23d7461..7e9a90961e 100644 --- a/src/main/java/com/github/technus/tectech/loader/MainLoader.java +++ b/src/main/java/com/github/technus/tectech/loader/MainLoader.java @@ -323,6 +323,7 @@ public final class MainLoader { "DraconicEvolution", "IC2NuclearControl", "IronChest", + "irontank", "opensecurity", "openmodularturrets", "Railcraft", -- cgit From 02ead08abc959a8f821261a1c4436e6ff798823c Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Tue, 7 Apr 2020 06:21:00 +0200 Subject: Add recipe for IV-ZPM high amp energy hatches #25 (#26) * Add recipe for IV-ZPM high amp energy hatches #25 https://github.com/Technus/TecTech/issues/25 * bump version and gt dependencie to let jenkins build --- build.properties | 6 +++--- .../compatibility/dreamcraft/DreamCraftRecipeLoader.java | 14 +++++++++++++- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/build.properties b/build.properties index 9d848971d8..1d0944c8bc 100644 --- a/build.properties +++ b/build.properties @@ -1,13 +1,13 @@ minecraft.version=1.7.10 forge.version=10.13.4.1614 -tectech.version=3.7.3 +tectech.version=3.7.4 ic2.version=2.2.790-experimental codechickenlib.version=1.1.3.140 codechickencore.version=1.0.7.47 nei.version=1.0.5.120 -gregtech.jenkinsbuild=370 -gregtech.version=5.09.33.25 +gregtech.jenkinsbuild=435 +gregtech.version=5.09.33.36 cofhcore.version=[1.7.10]3.1.4-329-dev yamcore.version=0.5.79 baubles.version=1.0.1.10 diff --git a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java index 30b2b0e7ff..8570f74bd8 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java +++ b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java @@ -257,7 +257,19 @@ public class DreamCraftRecipeLoader implements Runnable { //GT_Values.RA.ADD_ASSEMBLER_RECIPE(new ItemStack[]{com.dreammaster.gthandler.CustomItemList.Transformer_UMV_UIV.get(1), CustomItemList.eM_dynamoMulti4_UIV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.NetherStar, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BlackPlutonium, 4)}, Materials.Electrum.getMolten(8000), CustomItemList.eM_dynamoMulti16_UIV.get(1), 200, 8000000); //GT_Values.RA.ADD_ASSEMBLER_RECIPE(new ItemStack[]{com.dreammaster.gthandler.CustomItemList.WetTransformer_UMV_UIV.get(1), CustomItemList.eM_dynamoMulti16_UIV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.NetherStar, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BlackPlutonium, 6)}, Materials.Tungsten.getMolten(8000), CustomItemList.eM_dynamoMulti64_UIV.get(1), 400, 8000000); - //Energy Hatches UV-UIV + //Energy Hatches IV-UIV + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Hatch_Energy_IV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Tungsten, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), 2)}, Materials.Silver.getMolten(144), CustomItemList.eM_energyMulti4_IV.get(1), 100, 1920); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_LuV_IV.get(1), CustomItemList.eM_energyMulti4_LuV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Tungsten, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), 4)}, Materials.Electrum.getMolten(144), CustomItemList.eM_energyMulti16_IV.get(1), 200, 1920); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("WetTransformer_LuV_IV").get(1), CustomItemList.eM_energyMulti16_LuV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.Tungsten, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), 6)}, Materials.Tungsten.getMolten(144), CustomItemList.eM_energyMulti64_IV.get(1), 400, 1920); + + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Hatch_Energy_LuV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.VanadiumGallium, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 2)}, Materials.Silver.getMolten(288), CustomItemList.eM_energyMulti4_LuV.get(1), 100, 7680); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_ZPM_LuV.get(1), CustomItemList.eM_energyMulti4_LuV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.VanadiumGallium, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 4)}, Materials.Electrum.getMolten(288), CustomItemList.eM_energyMulti16_LuV.get(1), 200, 7680); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("WetTransformer_ZPM_LuV").get(1), CustomItemList.eM_energyMulti16_LuV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.VanadiumGallium, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 6)}, Materials.Tungsten.getMolten(288), CustomItemList.eM_energyMulti64_LuV.get(1), 400, 7680); + + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Hatch_Energy_ZPM.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Naquadah, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 2)}, Materials.Silver.getMolten(576), CustomItemList.eM_energyMulti4_ZPM.get(1), 100, 30720); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_UV_ZPM.get(1), CustomItemList.eM_energyMulti4_ZPM.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Naquadah, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 4)}, Materials.Electrum.getMolten(576), CustomItemList.eM_energyMulti16_ZPM.get(1), 200, 30720); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("WetTransformer_UV_ZPM").get(1), CustomItemList.eM_energyMulti16_ZPM.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.Naquadah, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 6)}, Materials.Tungsten.getMolten(576), CustomItemList.eM_energyMulti64_ZPM.get(1), 400, 30720); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Hatch_Energy_UV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.NaquadahAlloy, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 2)}, Materials.Silver.getMolten(1152), CustomItemList.eM_energyMulti4_UV.get(1), 100, 122880); GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_MAX_UV.get(1), CustomItemList.eM_energyMulti4_UV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.NaquadahAlloy, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 4)}, Materials.Electrum.getMolten(1152), CustomItemList.eM_energyMulti16_UV.get(1), 200, 122880); GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("WetTransformer_UHV_UV").get(1), CustomItemList.eM_energyMulti16_UV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.NaquadahAlloy, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 6)}, Materials.Tungsten.getMolten(1152), CustomItemList.eM_energyMulti64_UV.get(1), 400, 122880); -- cgit From b8237f536e3329a24d631be452f1211bd3138ca8 Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Tue, 7 Apr 2020 06:21:00 +0200 Subject: Add recipe for IV-ZPM high amp energy hatches #25 (#26) * Add recipe for IV-ZPM high amp energy hatches #25 https://github.com/Technus/TecTech/issues/25 * bump version and gt dependencie to let jenkins build --- build.properties | 4 ++-- .../compatibility/dreamcraft/DreamCraftRecipeLoader.java | 14 +++++++++++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/build.properties b/build.properties index ce592885df..bc29eb3bf9 100644 --- a/build.properties +++ b/build.properties @@ -6,8 +6,8 @@ ic2.version=2.2.790-experimental codechickenlib.version=1.1.3.140 codechickencore.version=1.0.7.47 nei.version=1.0.5.120 -gregtech.jenkinsbuild=420 -gregtech.version=5.09.33.32 +gregtech.jenkinsbuild=435 +gregtech.version=5.09.33.36 cofhcore.version=[1.7.10]3.1.4-329-dev yamcore.version=0.5.79 baubles.version=1.0.1.10 diff --git a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java index 30b2b0e7ff..8570f74bd8 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java +++ b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java @@ -257,7 +257,19 @@ public class DreamCraftRecipeLoader implements Runnable { //GT_Values.RA.ADD_ASSEMBLER_RECIPE(new ItemStack[]{com.dreammaster.gthandler.CustomItemList.Transformer_UMV_UIV.get(1), CustomItemList.eM_dynamoMulti4_UIV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.NetherStar, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BlackPlutonium, 4)}, Materials.Electrum.getMolten(8000), CustomItemList.eM_dynamoMulti16_UIV.get(1), 200, 8000000); //GT_Values.RA.ADD_ASSEMBLER_RECIPE(new ItemStack[]{com.dreammaster.gthandler.CustomItemList.WetTransformer_UMV_UIV.get(1), CustomItemList.eM_dynamoMulti16_UIV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.NetherStar, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BlackPlutonium, 6)}, Materials.Tungsten.getMolten(8000), CustomItemList.eM_dynamoMulti64_UIV.get(1), 400, 8000000); - //Energy Hatches UV-UIV + //Energy Hatches IV-UIV + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Hatch_Energy_IV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Tungsten, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), 2)}, Materials.Silver.getMolten(144), CustomItemList.eM_energyMulti4_IV.get(1), 100, 1920); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_LuV_IV.get(1), CustomItemList.eM_energyMulti4_LuV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Tungsten, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), 4)}, Materials.Electrum.getMolten(144), CustomItemList.eM_energyMulti16_IV.get(1), 200, 1920); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("WetTransformer_LuV_IV").get(1), CustomItemList.eM_energyMulti16_LuV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.Tungsten, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), 6)}, Materials.Tungsten.getMolten(144), CustomItemList.eM_energyMulti64_IV.get(1), 400, 1920); + + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Hatch_Energy_LuV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.VanadiumGallium, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 2)}, Materials.Silver.getMolten(288), CustomItemList.eM_energyMulti4_LuV.get(1), 100, 7680); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_ZPM_LuV.get(1), CustomItemList.eM_energyMulti4_LuV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.VanadiumGallium, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 4)}, Materials.Electrum.getMolten(288), CustomItemList.eM_energyMulti16_LuV.get(1), 200, 7680); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("WetTransformer_ZPM_LuV").get(1), CustomItemList.eM_energyMulti16_LuV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.VanadiumGallium, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 6)}, Materials.Tungsten.getMolten(288), CustomItemList.eM_energyMulti64_LuV.get(1), 400, 7680); + + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Hatch_Energy_ZPM.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Naquadah, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 2)}, Materials.Silver.getMolten(576), CustomItemList.eM_energyMulti4_ZPM.get(1), 100, 30720); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_UV_ZPM.get(1), CustomItemList.eM_energyMulti4_ZPM.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Naquadah, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 4)}, Materials.Electrum.getMolten(576), CustomItemList.eM_energyMulti16_ZPM.get(1), 200, 30720); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("WetTransformer_UV_ZPM").get(1), CustomItemList.eM_energyMulti16_ZPM.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.Naquadah, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 6)}, Materials.Tungsten.getMolten(576), CustomItemList.eM_energyMulti64_ZPM.get(1), 400, 30720); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Hatch_Energy_UV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.NaquadahAlloy, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 2)}, Materials.Silver.getMolten(1152), CustomItemList.eM_energyMulti4_UV.get(1), 100, 122880); GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_MAX_UV.get(1), CustomItemList.eM_energyMulti4_UV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.NaquadahAlloy, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 4)}, Materials.Electrum.getMolten(1152), CustomItemList.eM_energyMulti16_UV.get(1), 200, 122880); GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("WetTransformer_UHV_UV").get(1), CustomItemList.eM_energyMulti16_UV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.NaquadahAlloy, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 6)}, Materials.Tungsten.getMolten(1152), CustomItemList.eM_energyMulti64_UV.get(1), 400, 122880); -- cgit From f988d3bc726794e919b31bd2396432b2ceb2a9d3 Mon Sep 17 00:00:00 2001 From: Dream-Master Date: Tue, 7 Apr 2020 11:32:45 +0200 Subject: update gt for jenkins build --- build.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.properties b/build.properties index bc29eb3bf9..dc9a4492a5 100644 --- a/build.properties +++ b/build.properties @@ -6,7 +6,7 @@ ic2.version=2.2.790-experimental codechickenlib.version=1.1.3.140 codechickencore.version=1.0.7.47 nei.version=1.0.5.120 -gregtech.jenkinsbuild=435 +gregtech.jenkinsbuild=442 gregtech.version=5.09.33.36 cofhcore.version=[1.7.10]3.1.4-329-dev yamcore.version=0.5.79 -- cgit From a054f31a0d83013b77859a4d22362181c54b4a89 Mon Sep 17 00:00:00 2001 From: Dream-Master Date: Tue, 7 Apr 2020 11:32:45 +0200 Subject: update gt for jenkins build (cherry picked from commit f988d3bc726794e919b31bd2396432b2ceb2a9d3) --- build.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.properties b/build.properties index 1d0944c8bc..817ae15210 100644 --- a/build.properties +++ b/build.properties @@ -6,7 +6,7 @@ ic2.version=2.2.790-experimental codechickenlib.version=1.1.3.140 codechickencore.version=1.0.7.47 nei.version=1.0.5.120 -gregtech.jenkinsbuild=435 +gregtech.jenkinsbuild=442 gregtech.version=5.09.33.36 cofhcore.version=[1.7.10]3.1.4-329-dev yamcore.version=0.5.79 -- cgit From 4166b36baafc19f12ca24c9974934361c1afbdc9 Mon Sep 17 00:00:00 2001 From: Tec Date: Wed, 8 Apr 2020 00:11:30 +0200 Subject: Fix blocks --- build.gradle | 7 +++++++ src/main/java/com/github/technus/tectech/TecTech.java | 1 - .../java/com/github/technus/tectech/loader/MainLoader.java | 13 +++++++------ .../github/technus/tectech/mechanics/avr/SidedRedstone.java | 2 +- src/main/resources/META-INF/tectech_at.cfg | 2 ++ 5 files changed, 17 insertions(+), 8 deletions(-) create mode 100644 src/main/resources/META-INF/tectech_at.cfg diff --git a/build.gradle b/build.gradle index 7c1298fc49..6ec5f8e3e5 100644 --- a/build.gradle +++ b/build.gradle @@ -196,3 +196,10 @@ task signJar(dependsOn: 'reobf') { ) } } + +jar { + manifest + { + attributes "FMLAT": "tectech_at.cfg" + } +} diff --git a/src/main/java/com/github/technus/tectech/TecTech.java b/src/main/java/com/github/technus/tectech/TecTech.java index 79defc0a1a..9694dadfd3 100644 --- a/src/main/java/com/github/technus/tectech/TecTech.java +++ b/src/main/java/com/github/technus/tectech/TecTech.java @@ -98,7 +98,6 @@ public class TecTech { public void Load(FMLInitializationEvent event) { hasCOFH = Loader.isModLoaded(Reference.COFHCORE); - if(configTecTech.DISABLE_MATERIAL_LOADING_FFS){ try { Field modifiersField = Field.class.getDeclaredField( "modifiers" ); diff --git a/src/main/java/com/github/technus/tectech/loader/MainLoader.java b/src/main/java/com/github/technus/tectech/loader/MainLoader.java index 7e9a90961e..1bf95a1936 100644 --- a/src/main/java/com/github/technus/tectech/loader/MainLoader.java +++ b/src/main/java/com/github/technus/tectech/loader/MainLoader.java @@ -28,6 +28,7 @@ import gregtech.api.util.GT_ModHandler; import gregtech.api.util.GT_Recipe; import gregtech.api.util.GT_Utility; import net.minecraft.block.Block; +import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.util.DamageSource; import net.minecraftforge.fluids.Fluid; @@ -339,23 +340,23 @@ public final class MainLoader { for(Block block : GameData.getBlockRegistry().typeSafeIterable()) { GameRegistry.UniqueIdentifier uniqueIdentifier=GameRegistry.findUniqueIdentifierFor(block); if (uniqueIdentifier != null) { - if (modIDs.contains(uniqueIdentifier.modId)) {//Full Whitelisted Mods + if (block.blockHardness < 0 || modIDs.contains(uniqueIdentifier.modId)) { continue; } else if ("OpenBlocks".equals(uniqueIdentifier.modId)) { if ("grave".equals(uniqueIdentifier.name)) { continue; } - } else if ("TwilightForest".equals(uniqueIdentifier.modId)){ - if ("tile.TFShield".equals(uniqueIdentifier.name)){ + } else if ("TwilightForest".equals(uniqueIdentifier.modId)) { + if ("tile.TFShield".equals(uniqueIdentifier.name)) { block.setResistance(30); continue; - }else if ("tile.TFThorns".equals(uniqueIdentifier.name)){ + } else if ("tile.TFThorns".equals(uniqueIdentifier.name)) { block.setResistance(10); continue; - }else if ("tile.TFTowerTranslucent".equals(uniqueIdentifier.name)){ + } else if ("tile.TFTowerTranslucent".equals(uniqueIdentifier.name)) { block.setResistance(30); continue; - }else if ("tile.TFDeadrock".equals(uniqueIdentifier.name)) { + } else if ("tile.TFDeadrock".equals(uniqueIdentifier.name)) { block.setResistance(5); continue; } else { diff --git a/src/main/java/com/github/technus/tectech/mechanics/avr/SidedRedstone.java b/src/main/java/com/github/technus/tectech/mechanics/avr/SidedRedstone.java index fd351631f3..26b83eb1f1 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/avr/SidedRedstone.java +++ b/src/main/java/com/github/technus/tectech/mechanics/avr/SidedRedstone.java @@ -4,7 +4,7 @@ import com.github.technus.avrClone.AvrCore; import com.github.technus.avrClone.registerPackages.*; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -public class SidedRedstone extends RegisterPackageSync { +public class SidedRedstone extends RegisterPackageSync { public static final RSINT RSINT =new RSINT(); public SidedRedstone(int offset) { diff --git a/src/main/resources/META-INF/tectech_at.cfg b/src/main/resources/META-INF/tectech_at.cfg new file mode 100644 index 0000000000..e09e575a7d --- /dev/null +++ b/src/main/resources/META-INF/tectech_at.cfg @@ -0,0 +1,2 @@ +public net.minecraft.block.Block field_149781_w #blockResistance +public net.minecraft.block.Block field_149782_v #blockHardness \ No newline at end of file -- cgit From 1c0e4f179fa557b94459ae24d8a7551c00f34e1a Mon Sep 17 00:00:00 2001 From: Tec Date: Wed, 8 Apr 2020 00:16:42 +0200 Subject: Update avr --- AVRcore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AVRcore b/AVRcore index 3bdcf87f6e..ad1b22c95d 160000 --- a/AVRcore +++ b/AVRcore @@ -1 +1 @@ -Subproject commit 3bdcf87f6ed02b9e5f9a291b3e534c5d515e573b +Subproject commit ad1b22c95df78dde1abccb15d8bf442c3d9f7cbc -- cgit From d6b7758cce68d65b41fe0810d02a7b5874789cde Mon Sep 17 00:00:00 2001 From: Dream-Master Date: Wed, 8 Apr 2020 17:38:08 +0200 Subject: Add recipe for IV-ZPM high amp energy hatches #25 https://github.com/Technus/TecTech/issues/25 --- .../compatibility/dreamcraft/DreamCraftRecipeLoader.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java index 8570f74bd8..75a943b76b 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java +++ b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java @@ -258,13 +258,13 @@ public class DreamCraftRecipeLoader implements Runnable { //GT_Values.RA.ADD_ASSEMBLER_RECIPE(new ItemStack[]{com.dreammaster.gthandler.CustomItemList.WetTransformer_UMV_UIV.get(1), CustomItemList.eM_dynamoMulti16_UIV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.NetherStar, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BlackPlutonium, 6)}, Materials.Tungsten.getMolten(8000), CustomItemList.eM_dynamoMulti64_UIV.get(1), 400, 8000000); //Energy Hatches IV-UIV - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Hatch_Energy_IV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Tungsten, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), 2)}, Materials.Silver.getMolten(144), CustomItemList.eM_energyMulti4_IV.get(1), 100, 1920); - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_LuV_IV.get(1), CustomItemList.eM_energyMulti4_LuV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Tungsten, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), 4)}, Materials.Electrum.getMolten(144), CustomItemList.eM_energyMulti16_IV.get(1), 200, 1920); - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("WetTransformer_LuV_IV").get(1), CustomItemList.eM_energyMulti16_LuV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.Tungsten, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), 6)}, Materials.Tungsten.getMolten(144), CustomItemList.eM_energyMulti64_IV.get(1), 400, 1920); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Hatch_Energy_IV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Tungsten, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 2)}, Materials.Silver.getMolten(144), CustomItemList.eM_energyMulti4_IV.get(1), 100, 1920); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_LuV_IV.get(1), CustomItemList.eM_energyMulti4_LuV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Tungsten, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 4)}, Materials.Electrum.getMolten(144), CustomItemList.eM_energyMulti16_IV.get(1), 200, 1920); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("WetTransformer_LuV_IV").get(1), CustomItemList.eM_energyMulti16_IV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.Tungsten, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 6)}, Materials.Tungsten.getMolten(144), CustomItemList.eM_energyMulti64_IV.get(1), 400, 1920); - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Hatch_Energy_LuV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.VanadiumGallium, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 2)}, Materials.Silver.getMolten(288), CustomItemList.eM_energyMulti4_LuV.get(1), 100, 7680); - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_ZPM_LuV.get(1), CustomItemList.eM_energyMulti4_LuV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.VanadiumGallium, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 4)}, Materials.Electrum.getMolten(288), CustomItemList.eM_energyMulti16_LuV.get(1), 200, 7680); - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("WetTransformer_ZPM_LuV").get(1), CustomItemList.eM_energyMulti16_LuV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.VanadiumGallium, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 6)}, Materials.Tungsten.getMolten(288), CustomItemList.eM_energyMulti64_LuV.get(1), 400, 7680); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Hatch_Energy_LuV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.VanadiumGallium, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), 2)}, Materials.Silver.getMolten(288), CustomItemList.eM_energyMulti4_LuV.get(1), 100, 7680); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_ZPM_LuV.get(1), CustomItemList.eM_energyMulti4_LuV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.VanadiumGallium, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), 4)}, Materials.Electrum.getMolten(288), CustomItemList.eM_energyMulti16_LuV.get(1), 200, 7680); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("WetTransformer_ZPM_LuV").get(1), CustomItemList.eM_energyMulti16_LuV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.VanadiumGallium, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), 6)}, Materials.Tungsten.getMolten(288), CustomItemList.eM_energyMulti64_LuV.get(1), 400, 7680); GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Hatch_Energy_ZPM.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Naquadah, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 2)}, Materials.Silver.getMolten(576), CustomItemList.eM_energyMulti4_ZPM.get(1), 100, 30720); GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_UV_ZPM.get(1), CustomItemList.eM_energyMulti4_ZPM.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Naquadah, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 4)}, Materials.Electrum.getMolten(576), CustomItemList.eM_energyMulti16_ZPM.get(1), 200, 30720); -- cgit From f08ea99cff1357e831fd3f3ca03804ca0dbd06fa Mon Sep 17 00:00:00 2001 From: Dream-Master Date: Wed, 8 Apr 2020 17:38:34 +0200 Subject: Add recipe for IV-ZPM high amp energy hatches #25 https://github.com/Technus/TecTech/issues/25 --- .../tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java index 75a943b76b..08faa16d51 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java +++ b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java @@ -260,7 +260,7 @@ public class DreamCraftRecipeLoader implements Runnable { //Energy Hatches IV-UIV GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Hatch_Energy_IV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Tungsten, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 2)}, Materials.Silver.getMolten(144), CustomItemList.eM_energyMulti4_IV.get(1), 100, 1920); GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_LuV_IV.get(1), CustomItemList.eM_energyMulti4_LuV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Tungsten, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 4)}, Materials.Electrum.getMolten(144), CustomItemList.eM_energyMulti16_IV.get(1), 200, 1920); - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("WetTransformer_LuV_IV").get(1), CustomItemList.eM_energyMulti16_IV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.Tungsten, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 6)}, Materials.Tungsten.getMolten(144), CustomItemList.eM_energyMulti64_IV.get(1), 400, 1920); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("WetTransformer_LuV_IV").get(1), CustomItemList.eM_energyMulti16_IV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.Tungsten, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 6)}, Materials.Tungsten.getMolten(144), CustomItemList.eM_energyMulti64_IV.get(1), 400, 1920); GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Hatch_Energy_LuV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.VanadiumGallium, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), 2)}, Materials.Silver.getMolten(288), CustomItemList.eM_energyMulti4_LuV.get(1), 100, 7680); GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_ZPM_LuV.get(1), CustomItemList.eM_energyMulti4_LuV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.VanadiumGallium, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), 4)}, Materials.Electrum.getMolten(288), CustomItemList.eM_energyMulti16_LuV.get(1), 200, 7680); -- cgit From dc0fe8c01b9056467f1d155a9189d11d08584da2 Mon Sep 17 00:00:00 2001 From: Dream-Master Date: Wed, 8 Apr 2020 17:59:59 +0200 Subject: Add recipe for IV-ZPM high amp energy hatches #25 https://github.com/Technus/TecTech/issues/25 --- .../tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java index 08faa16d51..86468de1b2 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java +++ b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java @@ -259,7 +259,7 @@ public class DreamCraftRecipeLoader implements Runnable { //Energy Hatches IV-UIV GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Hatch_Energy_IV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Tungsten, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 2)}, Materials.Silver.getMolten(144), CustomItemList.eM_energyMulti4_IV.get(1), 100, 1920); - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_LuV_IV.get(1), CustomItemList.eM_energyMulti4_LuV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Tungsten, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 4)}, Materials.Electrum.getMolten(144), CustomItemList.eM_energyMulti16_IV.get(1), 200, 1920); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_LuV_IV.get(1), CustomItemList.eM_energyMulti4_IV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Tungsten, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 4)}, Materials.Electrum.getMolten(144), CustomItemList.eM_energyMulti16_IV.get(1), 200, 1920); GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("WetTransformer_LuV_IV").get(1), CustomItemList.eM_energyMulti16_IV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.Tungsten, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 6)}, Materials.Tungsten.getMolten(144), CustomItemList.eM_energyMulti64_IV.get(1), 400, 1920); GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Hatch_Energy_LuV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.VanadiumGallium, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), 2)}, Materials.Silver.getMolten(288), CustomItemList.eM_energyMulti4_LuV.get(1), 100, 7680); -- cgit From 92b772fe4dc5f111e1d23bc4d0cc5a0c8029b777 Mon Sep 17 00:00:00 2001 From: Tec Date: Tue, 14 Apr 2020 13:45:14 +0200 Subject: Refactor to internal texture arrays. --- AVRcore | 2 +- build.properties | 4 ++-- .../spartakcore/SpartakCoreRecipeLoader.java | 5 ----- .../technus/tectech/loader/ElementalLoader.java | 2 +- .../github/technus/tectech/loader/MainLoader.java | 1 - .../technus/tectech/loader/NetworkDispatcher.java | 6 +++--- .../tectech/loader/thing/MachineLoader.java | 1 - .../tectech/mechanics/avr/SidedRedstone.java | 5 ++++- .../definitions/complex/dHadronDefinition.java | 1 - .../tectech/thing/casing/GT_Item_CasingsTT.java | 3 ++- .../item/ElementalDefinitionContainer_EM.java | 2 +- .../item/ElementalDefinitionScanStorage_EM.java | 2 +- .../hatch/GT_MetaTileEntity_Hatch_Param.java | 5 ++++- .../hatch/gui/GT_GUIContainer_Param.java | 2 +- .../hatch/gui/GT_GUIContainer_ParamAdv.java | 2 +- .../multi/GT_MetaTileEntity_TM_microwave.java | 6 +++--- .../GT_MetaTileEntity_TM_proccessingStack.java | 24 ++++++--------------- .../multi/GT_MetaTileEntity_TM_teslaCoil.java | 1 - .../base/GT_MetaTileEntity_MultiblockBase_EM.java | 7 +++--- .../multi/em_machine/Behaviour_Centrifuge.java | 4 ++-- .../Behaviour_ElectromagneticSeparator.java | 4 ++-- .../single/GT_MetaTileEntity_BuckConverter.java | 6 ++---- .../single/GT_MetaTileEntity_DataReader.java | 11 +++++----- .../single/GT_MetaTileEntity_DebugPollutor.java | 4 ++-- .../GT_MetaTileEntity_DebugPowerGenerator.java | 6 ++---- .../GT_MetaTileEntity_DebugStructureWriter.java | 3 ++- .../single/GT_MetaTileEntity_MicroController.java | 11 +++++----- .../single/GT_MetaTileEntity_OwnerDetector.java | 4 ++-- .../single/GT_MetaTileEntity_TT_Transformer.java | 25 +++++++++++----------- .../single/GT_MetaTileEntity_TeslaCoil.java | 9 ++++---- 30 files changed, 77 insertions(+), 91 deletions(-) diff --git a/AVRcore b/AVRcore index ad1b22c95d..27bf45ba7b 160000 --- a/AVRcore +++ b/AVRcore @@ -1 +1 @@ -Subproject commit ad1b22c95df78dde1abccb15d8bf442c3d9f7cbc +Subproject commit 27bf45ba7b08a0e3751b3e119e73441430bda49f diff --git a/build.properties b/build.properties index dc9a4492a5..fb3a817233 100644 --- a/build.properties +++ b/build.properties @@ -6,8 +6,8 @@ ic2.version=2.2.790-experimental codechickenlib.version=1.1.3.140 codechickencore.version=1.0.7.47 nei.version=1.0.5.120 -gregtech.jenkinsbuild=442 -gregtech.version=5.09.33.36 +gregtech.jenkinsbuild=452 +gregtech.version=5.09.33.38 cofhcore.version=[1.7.10]3.1.4-329-dev yamcore.version=0.5.79 baubles.version=1.0.1.10 diff --git a/src/main/java/com/github/technus/tectech/compatibility/spartakcore/SpartakCoreRecipeLoader.java b/src/main/java/com/github/technus/tectech/compatibility/spartakcore/SpartakCoreRecipeLoader.java index 778fbad919..3fabfd67b2 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/spartakcore/SpartakCoreRecipeLoader.java +++ b/src/main/java/com/github/technus/tectech/compatibility/spartakcore/SpartakCoreRecipeLoader.java @@ -7,13 +7,10 @@ import com.github.technus.tectech.thing.metaTileEntity.multi.em_machine.Behaviou import com.github.technus.tectech.thing.metaTileEntity.multi.em_machine.Behaviour_ElectromagneticSeparator; import com.github.technus.tectech.thing.metaTileEntity.multi.em_machine.Behaviour_Recycler; import com.github.technus.tectech.thing.metaTileEntity.multi.em_machine.GT_MetaTileEntity_EM_machine; - -import cpw.mods.fml.common.Loader; import gregtech.api.enums.GT_Values; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; -import gregtech.api.interfaces.IItemContainer; import gregtech.api.util.GT_ModHandler; import gregtech.api.util.GT_OreDictUnificator; import gregtech.api.util.GT_Utility; @@ -22,8 +19,6 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; -import java.lang.reflect.Method; - import static com.github.technus.tectech.loader.recipe.RecipeLoader.getOrDefault; /** diff --git a/src/main/java/com/github/technus/tectech/loader/ElementalLoader.java b/src/main/java/com/github/technus/tectech/loader/ElementalLoader.java index 79ad5dc98c..b481b82646 100644 --- a/src/main/java/com/github/technus/tectech/loader/ElementalLoader.java +++ b/src/main/java/com/github/technus/tectech/loader/ElementalLoader.java @@ -4,8 +4,8 @@ import com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.defin import com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.definitions.ePrimalAspectDefinition; import com.github.technus.tectech.mechanics.elementalMatter.core.templates.cElementalPrimitive; import com.github.technus.tectech.mechanics.elementalMatter.definitions.complex.dAtomDefinition; -import com.github.technus.tectech.mechanics.elementalMatter.definitions.complex.iaeaNuclide; import com.github.technus.tectech.mechanics.elementalMatter.definitions.complex.dHadronDefinition; +import com.github.technus.tectech.mechanics.elementalMatter.definitions.complex.iaeaNuclide; import com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.*; /** diff --git a/src/main/java/com/github/technus/tectech/loader/MainLoader.java b/src/main/java/com/github/technus/tectech/loader/MainLoader.java index 1bf95a1936..a2384eac61 100644 --- a/src/main/java/com/github/technus/tectech/loader/MainLoader.java +++ b/src/main/java/com/github/technus/tectech/loader/MainLoader.java @@ -28,7 +28,6 @@ import gregtech.api.util.GT_ModHandler; import gregtech.api.util.GT_Recipe; import gregtech.api.util.GT_Utility; import net.minecraft.block.Block; -import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.util.DamageSource; import net.minecraftforge.fluids.Fluid; diff --git a/src/main/java/com/github/technus/tectech/loader/NetworkDispatcher.java b/src/main/java/com/github/technus/tectech/loader/NetworkDispatcher.java index 71478f3ad8..88b237c003 100644 --- a/src/main/java/com/github/technus/tectech/loader/NetworkDispatcher.java +++ b/src/main/java/com/github/technus/tectech/loader/NetworkDispatcher.java @@ -1,11 +1,11 @@ package com.github.technus.tectech.loader; -import com.github.technus.tectech.thing.metaTileEntity.hatch.TextParametersMessage; -import com.github.technus.tectech.thing.metaTileEntity.pipe.PipeActivityMessage; -import com.github.technus.tectech.thing.metaTileEntity.RotationMessage; import com.github.technus.tectech.mechanics.data.ChunkDataMessage; import com.github.technus.tectech.mechanics.data.PlayerDataMessage; import com.github.technus.tectech.mechanics.data.RendererMessage; +import com.github.technus.tectech.thing.metaTileEntity.RotationMessage; +import com.github.technus.tectech.thing.metaTileEntity.hatch.TextParametersMessage; +import com.github.technus.tectech.thing.metaTileEntity.pipe.PipeActivityMessage; import static com.github.technus.tectech.Reference.MODID; diff --git a/src/main/java/com/github/technus/tectech/loader/thing/MachineLoader.java b/src/main/java/com/github/technus/tectech/loader/thing/MachineLoader.java index 2c0b59632c..9f87428bb5 100644 --- a/src/main/java/com/github/technus/tectech/loader/thing/MachineLoader.java +++ b/src/main/java/com/github/technus/tectech/loader/thing/MachineLoader.java @@ -16,7 +16,6 @@ import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import static com.github.technus.tectech.CommonValues.V; -import static com.github.technus.tectech.CommonValues.VOLTAGE_NAMES; import static com.github.technus.tectech.thing.CustomItemList.*; /** diff --git a/src/main/java/com/github/technus/tectech/mechanics/avr/SidedRedstone.java b/src/main/java/com/github/technus/tectech/mechanics/avr/SidedRedstone.java index 26b83eb1f1..715988d26f 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/avr/SidedRedstone.java +++ b/src/main/java/com/github/technus/tectech/mechanics/avr/SidedRedstone.java @@ -1,7 +1,10 @@ package com.github.technus.tectech.mechanics.avr; import com.github.technus.avrClone.AvrCore; -import com.github.technus.avrClone.registerPackages.*; +import com.github.technus.avrClone.registerPackages.IInterrupt; +import com.github.technus.avrClone.registerPackages.IRegister; +import com.github.technus.avrClone.registerPackages.IRegisterBit; +import com.github.technus.avrClone.registerPackages.RegisterPackageSync; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; public class SidedRedstone extends RegisterPackageSync { diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dHadronDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dHadronDefinition.java index 404f116adf..04a1eab490 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dHadronDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dHadronDefinition.java @@ -21,7 +21,6 @@ import net.minecraftforge.oredict.OreDictionary; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; -import java.util.TreeMap; import static com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.definitions.dComplexAspectDefinition.getNbtTagCompound; import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; diff --git a/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_CasingsTT.java b/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_CasingsTT.java index 9778b1f846..23e9c7026f 100644 --- a/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_CasingsTT.java +++ b/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_CasingsTT.java @@ -8,7 +8,8 @@ import net.minecraft.util.EnumChatFormatting; import java.util.List; -import static com.github.technus.tectech.CommonValues.*; +import static com.github.technus.tectech.CommonValues.COSMIC_MARK; +import static com.github.technus.tectech.CommonValues.TEC_MARK_EM; import static net.minecraft.util.StatCollector.translateToLocal; /** diff --git a/src/main/java/com/github/technus/tectech/thing/item/ElementalDefinitionContainer_EM.java b/src/main/java/com/github/technus/tectech/thing/item/ElementalDefinitionContainer_EM.java index 87c4409171..5cb84505bd 100644 --- a/src/main/java/com/github/technus/tectech/thing/item/ElementalDefinitionContainer_EM.java +++ b/src/main/java/com/github/technus/tectech/thing/item/ElementalDefinitionContainer_EM.java @@ -1,8 +1,8 @@ package com.github.technus.tectech.thing.item; import com.github.technus.tectech.CommonValues; -import com.github.technus.tectech.font.TecTechFontRender; import com.github.technus.tectech.Util; +import com.github.technus.tectech.font.TecTechFontRender; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalDefinitionStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.tElementalException; import com.github.technus.tectech.thing.item.renderElemental.IElementalItem; diff --git a/src/main/java/com/github/technus/tectech/thing/item/ElementalDefinitionScanStorage_EM.java b/src/main/java/com/github/technus/tectech/thing/item/ElementalDefinitionScanStorage_EM.java index f9aafa1f7f..7e7c2eb625 100644 --- a/src/main/java/com/github/technus/tectech/thing/item/ElementalDefinitionScanStorage_EM.java +++ b/src/main/java/com/github/technus/tectech/thing/item/ElementalDefinitionScanStorage_EM.java @@ -2,8 +2,8 @@ package com.github.technus.tectech.thing.item; import com.github.technus.tectech.CommonValues; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.font.TecTechFontRender; import com.github.technus.tectech.Util; +import com.github.technus.tectech.font.TecTechFontRender; import com.github.technus.tectech.loader.gui.ModGuiHandler; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.thing.CustomItemList; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Param.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Param.java index b94836657d..7bcc796e9d 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Param.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Param.java @@ -2,7 +2,10 @@ package com.github.technus.tectech.thing.metaTileEntity.hatch; import com.github.technus.tectech.CommonValues; import com.github.technus.tectech.Util; -import com.github.technus.tectech.thing.metaTileEntity.hatch.gui.*; +import com.github.technus.tectech.thing.metaTileEntity.hatch.gui.GT_Container_Param; +import com.github.technus.tectech.thing.metaTileEntity.hatch.gui.GT_Container_ParamAdv; +import com.github.technus.tectech.thing.metaTileEntity.hatch.gui.GT_GUIContainer_Param; +import com.github.technus.tectech.thing.metaTileEntity.hatch.gui.GT_GUIContainer_ParamAdv; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/gui/GT_GUIContainer_Param.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/gui/GT_GUIContainer_Param.java index 52f0832cb2..b094cd2d93 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/gui/GT_GUIContainer_Param.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/gui/GT_GUIContainer_Param.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.hatch.gui; -import com.github.technus.tectech.font.TecTechFontRender; import com.github.technus.tectech.Util; +import com.github.technus.tectech.font.TecTechFontRender; import gregtech.api.gui.GT_GUIContainerMetaTile_Machine; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import net.minecraft.entity.player.InventoryPlayer; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/gui/GT_GUIContainer_ParamAdv.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/gui/GT_GUIContainer_ParamAdv.java index ca92f0496e..45e4f1fb65 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/gui/GT_GUIContainer_ParamAdv.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/gui/GT_GUIContainer_ParamAdv.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.hatch.gui; -import com.github.technus.tectech.font.TecTechFontRender; import com.github.technus.tectech.Util; +import com.github.technus.tectech.font.TecTechFontRender; import gregtech.api.gui.GT_GUIContainerMetaTile_Machine; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import net.minecraft.entity.player.InventoryPlayer; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java index 60a642ee95..881f802d19 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java @@ -206,11 +206,11 @@ public class GT_MetaTileEntity_TM_microwave extends GT_MetaTileEntity_Multiblock @Override public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { if (aSide == aFacing) { - return new ITexture[]{Textures.BlockIcons.CASING_BLOCKS[49], new TT_RenderedTexture(aActive ? Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE : Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE)}; + return new ITexture[]{Textures.BlockIcons.casingTexturePages[0][49], new TT_RenderedTexture(aActive ? Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE : Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE)}; } else if (aSide == GT_Utility.getOppositeSide(aFacing)) { - return new ITexture[]{Textures.BlockIcons.CASING_BLOCKS[49], aActive ? Textures.BlockIcons.CASING_BLOCKS[52] : Textures.BlockIcons.CASING_BLOCKS[53]}; + return new ITexture[]{Textures.BlockIcons.casingTexturePages[0][49], aActive ? Textures.BlockIcons.casingTexturePages[0][52] : Textures.BlockIcons.casingTexturePages[0][53]}; } - return new ITexture[]{Textures.BlockIcons.CASING_BLOCKS[49]}; + return new ITexture[]{Textures.BlockIcons.casingTexturePages[0][49]}; } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java index 9466d9df46..d35304dfca 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java @@ -1,32 +1,22 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; import com.github.technus.tectech.CommonValues; -import com.github.technus.tectech.Reference; import com.github.technus.tectech.thing.metaTileEntity.IConstructable; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.*; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_Container_MultiMachineEM; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_GUIContainer_MultiMachineEM; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedTexture; 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.util.GT_Recipe; import gregtech.api.util.GT_Utility; import net.minecraft.block.Block; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; -import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.EnumChatFormatting; -import java.util.ArrayList; -import java.util.HashSet; - -import static com.github.technus.tectech.Util.StructureBuilderExtreme; -import static com.github.technus.tectech.loader.MainLoader.microwaving; -import static com.github.technus.tectech.recipe.TT_recipeAdder.nullItem; -import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.*; import static gregtech.api.GregTech_API.sBlockCasings4; import static net.minecraft.util.StatCollector.translateToLocal; @@ -118,11 +108,11 @@ public class GT_MetaTileEntity_TM_proccessingStack extends GT_MetaTileEntity_Mul @Override public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { if (aSide == aFacing) { - return new ITexture[]{Textures.BlockIcons.CASING_BLOCKS[49], new TT_RenderedTexture(aActive ? Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE : Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE)}; + return new ITexture[]{Textures.BlockIcons.casingTexturePages[0][49], new TT_RenderedTexture(aActive ? Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE : Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE)}; } else if (aSide == GT_Utility.getOppositeSide(aFacing)) { - return new ITexture[]{Textures.BlockIcons.CASING_BLOCKS[49], aActive ? Textures.BlockIcons.CASING_BLOCKS[52] : Textures.BlockIcons.CASING_BLOCKS[53]}; + return new ITexture[]{Textures.BlockIcons.casingTexturePages[0][49], aActive ? Textures.BlockIcons.casingTexturePages[0][52] : Textures.BlockIcons.casingTexturePages[0][53]}; } - return new ITexture[]{Textures.BlockIcons.CASING_BLOCKS[49]}; + return new ITexture[]{Textures.BlockIcons.casingTexturePages[0][49]}; } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java index 9fb7193dd8..d083c58ff3 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java @@ -35,7 +35,6 @@ import java.util.Map; import static com.github.technus.tectech.CommonValues.V; import static com.github.technus.tectech.Util.*; -import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsBA0; import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.*; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java index 54f438aa9f..0e00a3180f 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java @@ -4,14 +4,14 @@ import com.github.technus.tectech.Reference; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.Util; import com.github.technus.tectech.Vec3pos; +import com.github.technus.tectech.loader.NetworkDispatcher; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalDefinitionStack; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; import com.github.technus.tectech.mechanics.elementalMatter.core.tElementalException; import com.github.technus.tectech.thing.metaTileEntity.IFrontRotation; -import com.github.technus.tectech.thing.metaTileEntity.hatch.*; import com.github.technus.tectech.thing.metaTileEntity.RotationMessage; -import com.github.technus.tectech.loader.NetworkDispatcher; +import com.github.technus.tectech.thing.metaTileEntity.hatch.*; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -39,7 +39,8 @@ import net.minecraftforge.fluids.FluidStack; import java.util.ArrayList; import static com.github.technus.tectech.CommonValues.*; -import static com.github.technus.tectech.Util.*; +import static com.github.technus.tectech.Util.StructureCheckerExtreme; +import static com.github.technus.tectech.Util.getTier; import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Centrifuge.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Centrifuge.java index ef8c0e7c3d..63177d40ae 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Centrifuge.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Centrifuge.java @@ -4,10 +4,10 @@ import com.github.technus.tectech.TecTech; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; import com.github.technus.tectech.mechanics.elementalMatter.definitions.complex.dAtomDefinition; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.MultiblockControl; import com.github.technus.tectech.thing.metaTileEntity.multi.base.INameFunction; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.Parameters; import com.github.technus.tectech.thing.metaTileEntity.multi.base.IStatusFunction; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.MultiblockControl; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.Parameters; import java.util.Arrays; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_ElectromagneticSeparator.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_ElectromagneticSeparator.java index 4b1c5f3cf6..08a79e5c90 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_ElectromagneticSeparator.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_ElectromagneticSeparator.java @@ -4,10 +4,10 @@ import com.github.technus.tectech.TecTech; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; import com.github.technus.tectech.mechanics.elementalMatter.definitions.complex.dAtomDefinition; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.MultiblockControl; import com.github.technus.tectech.thing.metaTileEntity.multi.base.INameFunction; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.Parameters; import com.github.technus.tectech.thing.metaTileEntity.multi.base.IStatusFunction; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.MultiblockControl; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.Parameters; import static com.github.technus.tectech.CommonValues.V; import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.*; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_BuckConverter.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_BuckConverter.java index b65601185b..d4335e3c5a 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_BuckConverter.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_BuckConverter.java @@ -20,9 +20,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; -import static com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_IN_POWER_TT; -import static com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_OUT_POWER_TT; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; +import static com.github.technus.tectech.thing.metaTileEntity.Textures.*; import static net.minecraft.util.StatCollector.translateToLocal; public class GT_MetaTileEntity_BuckConverter extends GT_MetaTileEntity_TieredMachineBlock { @@ -54,7 +52,7 @@ public class GT_MetaTileEntity_BuckConverter extends GT_MetaTileEntity_TieredMac @Override public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { - return new ITexture[]{MACHINE_CASINGS[mTier][aColorIndex + 1], aSide == aFacing ? (aActive?BUCK_ACTIVE:BUCK) : + return new ITexture[]{MACHINE_CASINGS_TT[mTier][aColorIndex + 1], aSide == aFacing ? (aActive?BUCK_ACTIVE:BUCK) : (aSide==GT_Utility.getOppositeSide(aFacing)? OVERLAYS_ENERGY_IN_POWER_TT[mTier]: (aActive ? OVERLAYS_ENERGY_OUT_POWER_TT[mTier] : OVERLAYS_ENERGY_IN_POWER_TT[mTier]))}; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DataReader.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DataReader.java index 4ad9e05b89..c98db2b985 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DataReader.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DataReader.java @@ -33,6 +33,7 @@ import java.util.Map; import static com.github.technus.tectech.CommonValues.V; import static com.github.technus.tectech.Reference.MODID; import static com.github.technus.tectech.recipe.TT_recipeAdder.nullItem; +import static com.github.technus.tectech.thing.metaTileEntity.Textures.MACHINE_CASINGS_TT; import static net.minecraft.util.StatCollector.translateToLocal; /** @@ -69,16 +70,16 @@ public class GT_MetaTileEntity_DataReader extends GT_MetaTileEntity_BasicMachine public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { if(aBaseMetaTileEntity.getWorld()==null){ if(aSide==aFacing){ - return new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[mTier][aColorIndex + 1], aActive ? READER_ONLINE : READER_OFFLINE}; + return new ITexture[]{MACHINE_CASINGS_TT[mTier][aColorIndex + 1], aActive ? READER_ONLINE : READER_OFFLINE}; } - return new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[mTier][aColorIndex + 1]}; + return new ITexture[]{MACHINE_CASINGS_TT[mTier][aColorIndex + 1]}; } if(aSide==mMainFacing){ - return new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[mTier][aColorIndex + 1], aActive ? READER_ONLINE : READER_OFFLINE}; + return new ITexture[]{MACHINE_CASINGS_TT[mTier][aColorIndex + 1], aActive ? READER_ONLINE : READER_OFFLINE}; }else if(aSide==aFacing){ - return new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[mTier][aColorIndex + 1], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)}; + return new ITexture[]{MACHINE_CASINGS_TT[mTier][aColorIndex + 1], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)}; } - return new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[mTier][aColorIndex + 1]}; + return new ITexture[]{MACHINE_CASINGS_TT[mTier][aColorIndex + 1]}; } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugPollutor.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugPollutor.java index 183b999c3b..e092eb7c38 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugPollutor.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugPollutor.java @@ -22,7 +22,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; +import static com.github.technus.tectech.thing.metaTileEntity.Textures.MACHINE_CASINGS_TT; import static net.minecraft.util.StatCollector.translateToLocal; /** @@ -57,7 +57,7 @@ public class GT_MetaTileEntity_DebugPollutor extends GT_MetaTileEntity_TieredMac @Override public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { - return new ITexture[]{MACHINE_CASINGS[mTier][aColorIndex + 1], aSide != aFacing ? aActive? new GT_RenderedTexture(GT_MetaTileEntity_Hatch_OverflowElemental.MufflerEM): new GT_RenderedTexture(GT_MetaTileEntity_Hatch_OverflowElemental.MufflerEMidle) : POLLUTOR}; + return new ITexture[]{MACHINE_CASINGS_TT[mTier][aColorIndex + 1], aSide != aFacing ? aActive? new GT_RenderedTexture(GT_MetaTileEntity_Hatch_OverflowElemental.MufflerEM): new GT_RenderedTexture(GT_MetaTileEntity_Hatch_OverflowElemental.MufflerEMidle) : POLLUTOR}; } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugPowerGenerator.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugPowerGenerator.java index a666510666..0da48dfbac 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugPowerGenerator.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugPowerGenerator.java @@ -19,9 +19,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; -import static com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_IN_POWER_TT; -import static com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_OUT_POWER_TT; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; +import static com.github.technus.tectech.thing.metaTileEntity.Textures.*; import static net.minecraft.util.StatCollector.translateToLocal; /** @@ -56,7 +54,7 @@ public class GT_MetaTileEntity_DebugPowerGenerator extends GT_MetaTileEntity_Tie @Override public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { - return new ITexture[]{MACHINE_CASINGS[mTier][aColorIndex + 1], aSide != aFacing ? aActive? OVERLAYS_ENERGY_OUT_POWER_TT[mTier]: OVERLAYS_ENERGY_IN_POWER_TT[mTier] : GENNY}; + return new ITexture[]{MACHINE_CASINGS_TT[mTier][aColorIndex + 1], aSide != aFacing ? aActive? OVERLAYS_ENERGY_OUT_POWER_TT[mTier]: OVERLAYS_ENERGY_IN_POWER_TT[mTier] : GENNY}; } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugStructureWriter.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugStructureWriter.java index cdfdee7899..171e051c5c 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugStructureWriter.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugStructureWriter.java @@ -21,6 +21,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; import static com.github.technus.tectech.Util.StructureWriter; +import static com.github.technus.tectech.thing.metaTileEntity.Textures.MACHINE_CASINGS_TT; import static net.minecraft.util.StatCollector.translateToLocal; /** @@ -56,7 +57,7 @@ public class GT_MetaTileEntity_DebugStructureWriter extends GT_MetaTileEntity_Ti @Override public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { - return new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[mTier][aColorIndex + 1], aSide != aFacing ? new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TELEPORTER_ACTIVE) : MARK}; + return new ITexture[]{MACHINE_CASINGS_TT[mTier][aColorIndex + 1], aSide != aFacing ? new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TELEPORTER_ACTIVE) : MARK}; } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_MicroController.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_MicroController.java index ef5426a272..79f753aa02 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_MicroController.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_MicroController.java @@ -21,6 +21,7 @@ import gregtech.api.objects.GT_RenderedTexture; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import static com.github.technus.tectech.thing.metaTileEntity.Textures.MACHINE_CASINGS_TT; import static com.github.technus.tectech.thing.metaTileEntity.single.GT_MetaTileEntity_DataReader.READER_OFFLINE; import static com.github.technus.tectech.thing.metaTileEntity.single.GT_MetaTileEntity_DataReader.READER_ONLINE; @@ -168,16 +169,16 @@ public class GT_MetaTileEntity_MicroController extends GT_MetaTileEntity_TieredM public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { if(aBaseMetaTileEntity.getWorld()==null){ if(aSide==aFacing){ - return new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[mTier][aColorIndex + 1], aActive ? READER_ONLINE : READER_OFFLINE}; + return new ITexture[]{MACHINE_CASINGS_TT[mTier][aColorIndex + 1], aActive ? READER_ONLINE : READER_OFFLINE}; } - return new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[mTier][aColorIndex + 1]}; + return new ITexture[]{MACHINE_CASINGS_TT[mTier][aColorIndex + 1]}; } if(aSide==aBaseMetaTileEntity.getFrontFacing()){ - return new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[mTier][aColorIndex + 1], aActive ? READER_ONLINE : READER_OFFLINE}; + return new ITexture[]{MACHINE_CASINGS_TT[mTier][aColorIndex + 1], aActive ? READER_ONLINE : READER_OFFLINE}; }else if(aSide==aFacing){ - return new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[mTier][aColorIndex + 1], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)}; + return new ITexture[]{MACHINE_CASINGS_TT[mTier][aColorIndex + 1], new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT)}; } - return new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[mTier][aColorIndex + 1]}; + return new ITexture[]{MACHINE_CASINGS_TT[mTier][aColorIndex + 1]}; } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_OwnerDetector.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_OwnerDetector.java index 28a5cf50b5..c22219e6d9 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_OwnerDetector.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_OwnerDetector.java @@ -20,9 +20,9 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; import org.apache.commons.lang3.reflect.FieldUtils; -import org.luaj.vm2.ast.Str; import static com.github.technus.tectech.CommonValues.RECIPE_AT; +import static com.github.technus.tectech.thing.metaTileEntity.Textures.MACHINE_CASINGS_TT; import static net.minecraft.util.StatCollector.translateToLocal; import static net.minecraft.util.StatCollector.translateToLocalFormatted; @@ -59,7 +59,7 @@ public class GT_MetaTileEntity_OwnerDetector extends GT_MetaTileEntity_TieredMac @Override public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { - return new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[mTier][aColorIndex + 1], aActive ? OWNER_ONLINE : OWNER_OFFLINE}; + return new ITexture[]{MACHINE_CASINGS_TT[mTier][aColorIndex + 1], aActive ? OWNER_ONLINE : OWNER_OFFLINE}; } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TT_Transformer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TT_Transformer.java index 09ab5fe508..2302d1a42b 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TT_Transformer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TT_Transformer.java @@ -2,7 +2,6 @@ package com.github.technus.tectech.thing.metaTileEntity.single; import com.github.technus.tectech.CommonValues; import com.github.technus.tectech.Util; -import gregtech.api.enums.Textures; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; @@ -31,18 +30,18 @@ public class GT_MetaTileEntity_TT_Transformer extends GT_MetaTileEntity_Transfor public ITexture[][][] getTextureSet(ITexture[] aTextures) { ITexture[][][] rTextures = new ITexture[12][17][]; for (byte b = -1; b < 16; b++) { - rTextures[0][b + 1] = new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], OVERLAYS_ENERGY_OUT_MULTI_TT[mTier]}; - rTextures[1][b + 1] = new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], OVERLAYS_ENERGY_OUT_MULTI_TT[mTier]}; - rTextures[2][b + 1] = new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], OVERLAYS_ENERGY_OUT_MULTI_TT[mTier]}; - rTextures[3][b + 1] = new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], OVERLAYS_ENERGY_IN_POWER_TT[mTier + 1]}; - rTextures[4][b + 1] = new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], OVERLAYS_ENERGY_IN_POWER_TT[mTier + 1]}; - rTextures[5][b + 1] = new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], OVERLAYS_ENERGY_IN_POWER_TT[mTier + 1]}; - rTextures[6][b + 1] = new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], OVERLAYS_ENERGY_IN_MULTI_TT[mTier]}; - rTextures[7][b + 1] = new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], OVERLAYS_ENERGY_IN_MULTI_TT[mTier]}; - rTextures[8][b + 1] = new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], OVERLAYS_ENERGY_IN_MULTI_TT[mTier]}; - rTextures[9][b + 1] = new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], OVERLAYS_ENERGY_OUT_POWER_TT[mTier + 1]}; - rTextures[10][b + 1] = new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], OVERLAYS_ENERGY_OUT_POWER_TT[mTier + 1]}; - rTextures[11][b + 1] = new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], OVERLAYS_ENERGY_OUT_POWER_TT[mTier + 1]}; + rTextures[0][b + 1] = new ITexture[]{MACHINE_CASINGS_TT[mTier][b + 1], OVERLAYS_ENERGY_OUT_MULTI_TT[mTier]}; + rTextures[1][b + 1] = new ITexture[]{MACHINE_CASINGS_TT[mTier][b + 1], OVERLAYS_ENERGY_OUT_MULTI_TT[mTier]}; + rTextures[2][b + 1] = new ITexture[]{MACHINE_CASINGS_TT[mTier][b + 1], OVERLAYS_ENERGY_OUT_MULTI_TT[mTier]}; + rTextures[3][b + 1] = new ITexture[]{MACHINE_CASINGS_TT[mTier][b + 1], OVERLAYS_ENERGY_IN_POWER_TT[mTier + 1]}; + rTextures[4][b + 1] = new ITexture[]{MACHINE_CASINGS_TT[mTier][b + 1], OVERLAYS_ENERGY_IN_POWER_TT[mTier + 1]}; + rTextures[5][b + 1] = new ITexture[]{MACHINE_CASINGS_TT[mTier][b + 1], OVERLAYS_ENERGY_IN_POWER_TT[mTier + 1]}; + rTextures[6][b + 1] = new ITexture[]{MACHINE_CASINGS_TT[mTier][b + 1], OVERLAYS_ENERGY_IN_MULTI_TT[mTier]}; + rTextures[7][b + 1] = new ITexture[]{MACHINE_CASINGS_TT[mTier][b + 1], OVERLAYS_ENERGY_IN_MULTI_TT[mTier]}; + rTextures[8][b + 1] = new ITexture[]{MACHINE_CASINGS_TT[mTier][b + 1], OVERLAYS_ENERGY_IN_MULTI_TT[mTier]}; + rTextures[9][b + 1] = new ITexture[]{MACHINE_CASINGS_TT[mTier][b + 1], OVERLAYS_ENERGY_OUT_POWER_TT[mTier + 1]}; + rTextures[10][b + 1] = new ITexture[]{MACHINE_CASINGS_TT[mTier][b + 1], OVERLAYS_ENERGY_OUT_POWER_TT[mTier + 1]}; + rTextures[11][b + 1] = new ITexture[]{MACHINE_CASINGS_TT[mTier][b + 1], OVERLAYS_ENERGY_OUT_POWER_TT[mTier + 1]}; } return rTextures; } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java index 351ca3a18a..48db8725df 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java @@ -10,7 +10,6 @@ import com.github.technus.tectech.thing.cover.GT_Cover_TM_TeslaCoil; import com.github.technus.tectech.thing.cover.GT_Cover_TM_TeslaCoil_Ultimate; import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_TM_teslaCoil; import eu.usrv.yamcore.auxiliary.PlayerChatHelper; -import gregtech.api.enums.Textures; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; @@ -30,7 +29,7 @@ import java.util.Map; import static com.github.technus.tectech.CommonValues.V; import static com.github.technus.tectech.Util.entriesSortedByValues; import static com.github.technus.tectech.Util.map; -import static com.github.technus.tectech.thing.metaTileEntity.Textures.TESLA_TRANSCEIVER_TOP_BA; +import static com.github.technus.tectech.thing.metaTileEntity.Textures.*; import static java.lang.Math.round; import static net.minecraft.util.StatCollector.translateToLocal; import static net.minecraft.util.StatCollector.translateToLocalFormatted; @@ -177,9 +176,9 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB ITexture[][][] rTextures = new ITexture[3][17][]; for (byte i = -1; i < 16; ++i) { - rTextures[0][i + 1] = new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[this.mTier][i + 1]}; - rTextures[1][i + 1] = new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[this.mTier][i + 1], TESLA_TRANSCEIVER_TOP_BA}; - rTextures[2][i + 1] = new ITexture[]{Textures.BlockIcons.MACHINE_CASINGS[this.mTier][i + 1], this.mInventory.length == 16 ? Textures.BlockIcons.OVERLAYS_ENERGY_OUT_POWER[this.mTier] : (this.mInventory.length > 4 ? Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[this.mTier] : Textures.BlockIcons.OVERLAYS_ENERGY_OUT[this.mTier])}; + rTextures[0][i + 1] = new ITexture[]{MACHINE_CASINGS_TT[this.mTier][i + 1]}; + rTextures[1][i + 1] = new ITexture[]{MACHINE_CASINGS_TT[this.mTier][i + 1], TESLA_TRANSCEIVER_TOP_BA}; + rTextures[2][i + 1] = new ITexture[]{MACHINE_CASINGS_TT[this.mTier][i + 1], this.mInventory.length == 16 ? OVERLAYS_ENERGY_OUT_POWER_TT[this.mTier] : (this.mInventory.length > 4 ? OVERLAYS_ENERGY_OUT_MULTI_TT[this.mTier] : OVERLAYS_ENERGY_OUT_TT[this.mTier])}; } return rTextures; -- cgit From fc5dcb1ff4bf6dd61022ea54e5016cd8a547261a Mon Sep 17 00:00:00 2001 From: Tec Date: Tue, 14 Apr 2020 13:47:40 +0200 Subject: Update GT dependency --- build.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.properties b/build.properties index fb3a817233..d813ae4e06 100644 --- a/build.properties +++ b/build.properties @@ -6,8 +6,8 @@ ic2.version=2.2.790-experimental codechickenlib.version=1.1.3.140 codechickencore.version=1.0.7.47 nei.version=1.0.5.120 -gregtech.jenkinsbuild=452 -gregtech.version=5.09.33.38 +gregtech.jenkinsbuild=477 +gregtech.version=5.09.33.40 cofhcore.version=[1.7.10]3.1.4-329-dev yamcore.version=0.5.79 baubles.version=1.0.1.10 -- cgit From 02ad7e99f64017d524725e7bfec66092d1c7482b Mon Sep 17 00:00:00 2001 From: Bass Date: Tue, 14 Apr 2020 13:30:38 +0100 Subject: Bump version IV-ZPM High Amp Hatch Recipes Internal Texture Arrays Refactor Fixed BloodAsp Compatibility --- build.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.properties b/build.properties index d813ae4e06..2d6fa914f9 100644 --- a/build.properties +++ b/build.properties @@ -1,6 +1,6 @@ minecraft.version=1.7.10 forge.version=10.13.4.1614 -tectech.version=3.7.4 +tectech.version=3.7.5 ic2.version=2.2.790-experimental codechickenlib.version=1.1.3.140 -- cgit From b79cacc0408efb75e686332da3e6643d548abe76 Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 19 Apr 2020 11:17:27 +0200 Subject: Attempt to upgrade gradle to 4.8.1 --- build.gradle | 31 +++--- gradle/wrapper/gradle-wrapper.properties | 6 +- .../ForgeGradle-1.2.2-SNAPSHOT-javadoc.jar | Bin 0 -> 568159 bytes .../1.2.2-SNAPSHOT/ForgeGradle-1.2.2-SNAPSHOT.jar | Bin 0 -> 514179 bytes .../1.2.2-SNAPSHOT/ForgeGradle-1.2.2-SNAPSHOT.pom | 106 +++++++++++++++++++++ .../1.2.2-SNAPSHOT/maven-metadata-local.xml | 12 +++ .../gradle/ForgeGradle/maven-metadata-local.xml | 11 +++ 7 files changed, 149 insertions(+), 17 deletions(-) create mode 100644 mavenLocal/net/minecraftforge/gradle/ForgeGradle/1.2.2-SNAPSHOT/ForgeGradle-1.2.2-SNAPSHOT-javadoc.jar create mode 100644 mavenLocal/net/minecraftforge/gradle/ForgeGradle/1.2.2-SNAPSHOT/ForgeGradle-1.2.2-SNAPSHOT.jar create mode 100644 mavenLocal/net/minecraftforge/gradle/ForgeGradle/1.2.2-SNAPSHOT/ForgeGradle-1.2.2-SNAPSHOT.pom create mode 100644 mavenLocal/net/minecraftforge/gradle/ForgeGradle/1.2.2-SNAPSHOT/maven-metadata-local.xml create mode 100644 mavenLocal/net/minecraftforge/gradle/ForgeGradle/maven-metadata-local.xml diff --git a/build.gradle b/build.gradle index 6ec5f8e3e5..4be211b64a 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,9 @@ buildscript { repositories { + maven { + name = "mavenLocal" + url = "mavenLocal" + } mavenCentral() maven { name = "forge" @@ -11,7 +15,7 @@ buildscript { } } dependencies { - classpath 'net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT' + classpath 'net.minecraftforge.gradle:ForgeGradle:1.2.2-SNAPSHOT' classpath "de.undercouch:gradle-download-task:3.1.2" } } @@ -20,6 +24,14 @@ plugins { id 'org.ajoberstar.grgit' version '3.1.1' } +file "build.properties" withReader { + def prop = new Properties() + prop.load(it) + ext.config = new ConfigSlurper().parse prop +} + +ext.set("minecraftVersion","${config.minecraft.version}-${config.forge.version}-${config.minecraft.version}") + import de.undercouch.gradle.tasks.download.Download apply plugin: 'forge' apply plugin: 'signing' @@ -39,23 +51,14 @@ sourceSets { } } -file "build.properties" withReader { - def prop = new Properties() - prop.load(it) - ext.config = new ConfigSlurper().parse prop -} - version = "${config.minecraft.version}-${config.tectech.version}" group = "com.github.technus" archivesBaseName = "TecTech" -minecraft { - version = "${config.minecraft.version}-${config.forge.version}-${config.minecraft.version}" - runDir = "eclipse" - - replaceIn "src/main/java/com/github/technus/tectech/auxiliary/Reference.java" - replace "GRADLETOKEN_VERSION", "${config.tectech.version}" -} +minecraft.version = ext.get("minecraftVersion") +minecraft.runDir = "eclipse" +minecraft.replaceIn "src/main/java/com/github/technus/tectech/auxiliary/Reference.java" +minecraft.replace "GRADLETOKEN_VERSION", "${config.tectech.version}" configurations { provided diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 39c1bb6d1b..7b33d51c2f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sun Jul 21 17:13:31 CEST 2019 +#Sun Apr 19 08:14:01 CEST 2020 +distributionUrl=https\://services.gradle.org/distributions/gradle-4.8.1-all.zip distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip +zipStoreBase=GRADLE_USER_HOME diff --git a/mavenLocal/net/minecraftforge/gradle/ForgeGradle/1.2.2-SNAPSHOT/ForgeGradle-1.2.2-SNAPSHOT-javadoc.jar b/mavenLocal/net/minecraftforge/gradle/ForgeGradle/1.2.2-SNAPSHOT/ForgeGradle-1.2.2-SNAPSHOT-javadoc.jar new file mode 100644 index 0000000000..52fb12544c Binary files /dev/null and b/mavenLocal/net/minecraftforge/gradle/ForgeGradle/1.2.2-SNAPSHOT/ForgeGradle-1.2.2-SNAPSHOT-javadoc.jar differ diff --git a/mavenLocal/net/minecraftforge/gradle/ForgeGradle/1.2.2-SNAPSHOT/ForgeGradle-1.2.2-SNAPSHOT.jar b/mavenLocal/net/minecraftforge/gradle/ForgeGradle/1.2.2-SNAPSHOT/ForgeGradle-1.2.2-SNAPSHOT.jar new file mode 100644 index 0000000000..869ba4cb93 Binary files /dev/null and b/mavenLocal/net/minecraftforge/gradle/ForgeGradle/1.2.2-SNAPSHOT/ForgeGradle-1.2.2-SNAPSHOT.jar differ diff --git a/mavenLocal/net/minecraftforge/gradle/ForgeGradle/1.2.2-SNAPSHOT/ForgeGradle-1.2.2-SNAPSHOT.pom b/mavenLocal/net/minecraftforge/gradle/ForgeGradle/1.2.2-SNAPSHOT/ForgeGradle-1.2.2-SNAPSHOT.pom new file mode 100644 index 0000000000..143732d174 --- /dev/null +++ b/mavenLocal/net/minecraftforge/gradle/ForgeGradle/1.2.2-SNAPSHOT/ForgeGradle-1.2.2-SNAPSHOT.pom @@ -0,0 +1,106 @@ + + + 4.0.0 + net.minecraftforge.gradle + ForgeGradle + 1.2.2-SNAPSHOT + + + org.ow2.asm + asm-debug-all + 5.0.3 + compile + + + com.google.guava + guava + 18.0 + compile + + + net.sf.opencsv + opencsv + 2.3 + compile + + + com.cloudbees + diff4j + 1.1 + compile + + + com.github.abrarsyed.jastyle + jAstyle + 1.2 + compile + + + net.sf.trove4j + trove4j + 2.1.0 + compile + + + com.github.jponge + lzma-java + 1.3 + compile + + + com.nothome + javaxdelta + 2.0.1 + compile + + + com.google.code.gson + gson + 2.2.4 + compile + + + com.github.tony19 + named-regexp + 0.2.3 + compile + + + net.md-5 + SpecialSource + 1.7.3 + compile + + + org.apache.httpcomponents + httpclient + 4.3.3 + compile + + + org.apache.httpcomponents + httpmime + 4.3.3 + compile + + + de.oceanlabs.mcp + RetroGuard + 3.6.6 + compile + + + de.oceanlabs.mcp + mcinjector + 3.2-SNAPSHOT + compile + + + net.minecraftforge.srg2source + Srg2Source + 3.2-SNAPSHOT + compile + + + diff --git a/mavenLocal/net/minecraftforge/gradle/ForgeGradle/1.2.2-SNAPSHOT/maven-metadata-local.xml b/mavenLocal/net/minecraftforge/gradle/ForgeGradle/1.2.2-SNAPSHOT/maven-metadata-local.xml new file mode 100644 index 0000000000..87ed94ad22 --- /dev/null +++ b/mavenLocal/net/minecraftforge/gradle/ForgeGradle/1.2.2-SNAPSHOT/maven-metadata-local.xml @@ -0,0 +1,12 @@ + + + net.minecraftforge.gradle + ForgeGradle + 1.2.2-SNAPSHOT + + + true + + 20200419091233 + + diff --git a/mavenLocal/net/minecraftforge/gradle/ForgeGradle/maven-metadata-local.xml b/mavenLocal/net/minecraftforge/gradle/ForgeGradle/maven-metadata-local.xml new file mode 100644 index 0000000000..4f9586c58a --- /dev/null +++ b/mavenLocal/net/minecraftforge/gradle/ForgeGradle/maven-metadata-local.xml @@ -0,0 +1,11 @@ + + + net.minecraftforge.gradle + ForgeGradle + + + 1.2.2-SNAPSHOT + + 20200419091233 + + -- cgit From 90f330c28cd391220369360e1ac08a5daaae1ea2 Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 19 Apr 2020 11:20:47 +0200 Subject: update GT --- build.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.properties b/build.properties index 2d6fa914f9..cfc5423a3c 100644 --- a/build.properties +++ b/build.properties @@ -6,8 +6,8 @@ ic2.version=2.2.790-experimental codechickenlib.version=1.1.3.140 codechickencore.version=1.0.7.47 nei.version=1.0.5.120 -gregtech.jenkinsbuild=477 -gregtech.version=5.09.33.40 +gregtech.jenkinsbuild=498 +gregtech.version=5.09.33.41 cofhcore.version=[1.7.10]3.1.4-329-dev yamcore.version=0.5.79 baubles.version=1.0.1.10 -- cgit From a5c8713f445c70cc764ad21b021b8242e01c6719 Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 19 Apr 2020 13:27:11 +0200 Subject: Should load more reliably... --- .../metaTileEntity/hatch/GT_MetaTileEntity_Hatch_InputDataItems.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_InputDataItems.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_InputDataItems.java index 97565e155e..e54f4f3354 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_InputDataItems.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_InputDataItems.java @@ -166,7 +166,7 @@ public class GT_MetaTileEntity_Hatch_InputDataItems extends GT_MetaTileEntity_Ha @Override public void loadNBTData(NBTTagCompound aNBT) { super.loadNBTData(aNBT); - NBTTagCompound stacksTag=new NBTTagCompound(); + NBTTagCompound stacksTag= aNBT.getCompoundTag("data_stacks"); int count=stacksTag.getInteger("count"); if(count>0){ ArrayList stacks=new ArrayList<>(); -- cgit From a3160c99c1151b9bff6c56bad819336ca12a4e6c Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 19 Apr 2020 13:56:54 +0200 Subject: Null check this stuff --- .../metaTileEntity/single/GT_MetaTileEntity_DataReader.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DataReader.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DataReader.java index c98db2b985..0663cdfaca 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DataReader.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DataReader.java @@ -26,9 +26,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fluids.FluidStack; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; +import java.util.*; import static com.github.technus.tectech.CommonValues.V; import static com.github.technus.tectech.Reference.MODID; @@ -186,8 +184,9 @@ public class GT_MetaTileEntity_DataReader extends GT_MetaTileEntity_BasicMachine renders.add(render); } - public static ArrayList getRenders(Util.ItemStack_NoNBT stack){ - return RENDER_REGISTRY.get(stack); + public static List getRenders(Util.ItemStack_NoNBT stack){ + ArrayList iDataRenders = RENDER_REGISTRY.get(stack); + return iDataRenders==null?Collections.emptyList():iDataRenders; } public interface IDataRender { -- cgit From de69e9a10db3d406ad26c004d60f98160ddd3382 Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 19 Apr 2020 13:56:54 +0200 Subject: Null check this stuff --- .../metaTileEntity/single/GT_MetaTileEntity_DataReader.java | 12 +++++------- .../single/gui/GT_GUIContainer_DataReader.java | 12 ++++++------ 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DataReader.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DataReader.java index c98db2b985..a56172c7f4 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DataReader.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DataReader.java @@ -26,9 +26,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fluids.FluidStack; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; +import java.util.*; import static com.github.technus.tectech.CommonValues.V; import static com.github.technus.tectech.Reference.MODID; @@ -93,8 +91,7 @@ public class GT_MetaTileEntity_DataReader extends GT_MetaTileEntity_BasicMachine return DID_NOT_FIND_RECIPE; } ItemStack input=getInputAt(0); - ArrayList renders=getRenders(new Util.ItemStack_NoNBT(input)); - for(IDataRender render:renders){ + for(IDataRender render:getRenders(new Util.ItemStack_NoNBT(input))){ if(render.canRender(input,mTier)){ mOutputItems[0]=input.copy(); input.stackSize-=1; @@ -186,8 +183,9 @@ public class GT_MetaTileEntity_DataReader extends GT_MetaTileEntity_BasicMachine renders.add(render); } - public static ArrayList getRenders(Util.ItemStack_NoNBT stack){ - return RENDER_REGISTRY.get(stack); + public static List getRenders(Util.ItemStack_NoNBT stack){ + ArrayList iDataRenders = RENDER_REGISTRY.get(stack); + return iDataRenders==null?Collections.emptyList():iDataRenders; } public interface IDataRender { diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/gui/GT_GUIContainer_DataReader.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/gui/GT_GUIContainer_DataReader.java index eb2c2e4112..e0e3cdd6b8 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/gui/GT_GUIContainer_DataReader.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/gui/GT_GUIContainer_DataReader.java @@ -115,8 +115,8 @@ public class GT_GUIContainer_DataReader extends GT_GUIContainerMetaTile_Machine private void renderDataBG(ItemStack thing, int mouseX, int mouseY, int x, int y, byte mTier) { if (thing != null) { - ArrayList renders = GT_MetaTileEntity_DataReader.getRenders(new Util.ItemStack_NoNBT(thing)); - for (GT_MetaTileEntity_DataReader.IDataRender render : renders) { + for (GT_MetaTileEntity_DataReader.IDataRender render : + GT_MetaTileEntity_DataReader.getRenders(new Util.ItemStack_NoNBT(thing))) { if (render.canRender(thing, mTier)) { if (!GT_Utility.areStacksEqual(stack, thing, false)) { render.initRender(thing); @@ -133,8 +133,8 @@ public class GT_GUIContainer_DataReader extends GT_GUIContainerMetaTile_Machine if(stack==null){ return false; } - ArrayList renders = GT_MetaTileEntity_DataReader.getRenders(new Util.ItemStack_NoNBT(stack)); - for (GT_MetaTileEntity_DataReader.IDataRender render : renders) { + for (GT_MetaTileEntity_DataReader.IDataRender render : + GT_MetaTileEntity_DataReader.getRenders(new Util.ItemStack_NoNBT(stack))) { if (render.canRender(stack, mTier)) { render.renderForeground(stack, mouseX, mouseY, this, fontRendererObj); return true; @@ -147,8 +147,8 @@ public class GT_GUIContainer_DataReader extends GT_GUIContainerMetaTile_Machine if(stack==null){ return false; } - ArrayList renders = GT_MetaTileEntity_DataReader.getRenders(new Util.ItemStack_NoNBT(stack)); - for (GT_MetaTileEntity_DataReader.IDataRender render : renders) { + for (GT_MetaTileEntity_DataReader.IDataRender render : + GT_MetaTileEntity_DataReader.getRenders(new Util.ItemStack_NoNBT(stack))) { if (render.canRender(stack, mTier)) { render.renderTooltips(stack, mouseX, mouseY, this); return true; -- cgit From 3ede636a1a1e2faf39a1c7fa84a7e981841ebd5b Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 19 Apr 2020 20:54:45 +0200 Subject: Fix gradle run client? --- build.gradle | 2 +- .../ForgeGradle-1.2.2-SNAPSHOT-javadoc.jar | Bin 568159 -> 596605 bytes .../1.2.2-SNAPSHOT/ForgeGradle-1.2.2-SNAPSHOT.jar | Bin 514179 -> 534903 bytes 3 files changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 4be211b64a..c969fb1e47 100644 --- a/build.gradle +++ b/build.gradle @@ -57,7 +57,7 @@ archivesBaseName = "TecTech" minecraft.version = ext.get("minecraftVersion") minecraft.runDir = "eclipse" -minecraft.replaceIn "src/main/java/com/github/technus/tectech/auxiliary/Reference.java" +minecraft.replaceIn "src/main/java/com/github/technus/tectech/Reference.java" minecraft.replace "GRADLETOKEN_VERSION", "${config.tectech.version}" configurations { diff --git a/mavenLocal/net/minecraftforge/gradle/ForgeGradle/1.2.2-SNAPSHOT/ForgeGradle-1.2.2-SNAPSHOT-javadoc.jar b/mavenLocal/net/minecraftforge/gradle/ForgeGradle/1.2.2-SNAPSHOT/ForgeGradle-1.2.2-SNAPSHOT-javadoc.jar index 52fb12544c..a8cb73b1ec 100644 Binary files a/mavenLocal/net/minecraftforge/gradle/ForgeGradle/1.2.2-SNAPSHOT/ForgeGradle-1.2.2-SNAPSHOT-javadoc.jar and b/mavenLocal/net/minecraftforge/gradle/ForgeGradle/1.2.2-SNAPSHOT/ForgeGradle-1.2.2-SNAPSHOT-javadoc.jar differ diff --git a/mavenLocal/net/minecraftforge/gradle/ForgeGradle/1.2.2-SNAPSHOT/ForgeGradle-1.2.2-SNAPSHOT.jar b/mavenLocal/net/minecraftforge/gradle/ForgeGradle/1.2.2-SNAPSHOT/ForgeGradle-1.2.2-SNAPSHOT.jar index 869ba4cb93..83af8431bb 100644 Binary files a/mavenLocal/net/minecraftforge/gradle/ForgeGradle/1.2.2-SNAPSHOT/ForgeGradle-1.2.2-SNAPSHOT.jar and b/mavenLocal/net/minecraftforge/gradle/ForgeGradle/1.2.2-SNAPSHOT/ForgeGradle-1.2.2-SNAPSHOT.jar differ -- cgit From 19c2b558de394c323a018d9e430ad2106cc649eb Mon Sep 17 00:00:00 2001 From: DreamMasterXXL Date: Sun, 19 Apr 2020 22:32:29 +0200 Subject: update gt dependencie --- build.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.properties b/build.properties index cfc5423a3c..a4251fb3bb 100644 --- a/build.properties +++ b/build.properties @@ -6,7 +6,7 @@ ic2.version=2.2.790-experimental codechickenlib.version=1.1.3.140 codechickencore.version=1.0.7.47 nei.version=1.0.5.120 -gregtech.jenkinsbuild=498 +gregtech.jenkinsbuild=512 gregtech.version=5.09.33.41 cofhcore.version=[1.7.10]3.1.4-329-dev yamcore.version=0.5.79 -- cgit From 281015aaf5a3b65dece68f12b559926b8f41d3c9 Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 19 Apr 2020 22:53:04 +0200 Subject: Fix pipes, implement ExtendedFacing, bump version --- build.properties | 2 +- .../com/github/technus/tectech/CommonValues.java | 43 - .../java/com/github/technus/tectech/Converter.java | 59 - .../java/com/github/technus/tectech/TecTech.java | 1 + src/main/java/com/github/technus/tectech/Util.java | 1640 -------------------- .../java/com/github/technus/tectech/Vec3pos.java | 50 - src/main/java/com/github/technus/tectech/XSTR.java | 278 ---- .../dreamcraft/NoDreamCraftMachineLoader.java | 2 +- .../openComputers/AvrArchitecture.java | 2 +- .../blocks/turretbases/TurretBaseItemEM.java | 2 +- .../blocks/turretheads/TurretHeadItemEM.java | 2 +- .../definitions/dComplexAspectDefinition.java | 2 +- .../GT_MetaTileEntity_EM_essentiaDequantizer.java | 10 +- .../GT_MetaTileEntity_EM_essentiaQuantizer.java | 10 +- .../github/technus/tectech/loader/MainLoader.java | 4 +- .../technus/tectech/loader/NetworkDispatcher.java | 8 +- .../tectech/loader/recipe/BloodyRecipeLoader.java | 34 +- .../tectech/loader/thing/MachineLoader.java | 2 +- .../technus/tectech/loader/thing/ThingsLoader.java | 4 +- .../mechanics/alignment/AlignmentLimits.java | 183 +++ .../mechanics/alignment/AlignmentMessage.java | 140 ++ .../tectech/mechanics/alignment/IAlignment.java | 173 +++ .../mechanics/alignment/IAlignmentLimits.java | 19 + .../mechanics/alignment/IntegerAxisSwap.java | 67 + .../mechanics/alignment/enumerable/Direction.java | 34 + .../alignment/enumerable/ExtendedFacing.java | 324 ++++ .../mechanics/alignment/enumerable/Flip.java | 76 + .../mechanics/alignment/enumerable/Rotation.java | 76 + .../tectech/mechanics/anomaly/AnomalyHandler.java | 2 +- .../tectech/mechanics/commands/ConvertFloat.java | 2 +- .../tectech/mechanics/commands/ConvertInteger.java | 2 +- .../mechanics/constructible/IConstructable.java | 15 + .../tectech/mechanics/data/ChunkDataMessage.java | 2 +- .../tectech/mechanics/data/PlayerPersistence.java | 2 +- .../mechanics/dataTransport/DataPacket.java | 22 +- .../mechanics/dataTransport/QuantumDataPacket.java | 4 +- .../core/stacks/cElementalInstanceStack.java | 2 +- .../core/templates/cElementalPrimitive.java | 2 +- .../definitions/complex/dAtomDefinition.java | 6 +- .../definitions/complex/dHadronDefinition.java | 2 +- .../definitions/complex/iaeaNuclide.java | 2 +- .../tectech/mechanics/pipe/IActivePipe.java | 9 + .../mechanics/pipe/IConnectsToDataPipe.java | 14 + .../mechanics/pipe/IConnectsToElementalPipe.java | 8 + .../mechanics/pipe/IConnectsToEnergyTunnel.java | 8 + .../mechanics/pipe/PipeActivityMessage.java | 133 ++ .../tectech/thing/block/QuantumGlassItem.java | 2 +- .../tectech/thing/block/ReactorSimItem.java | 2 +- .../tectech/thing/casing/GT_Item_CasingsBA0.java | 2 +- .../tectech/thing/casing/GT_Item_CasingsTT.java | 4 +- .../tectech/thing/casing/GT_Item_HintTT.java | 2 +- .../thing/item/ConstructableTriggerItem.java | 6 +- .../item/DebugElementalInstanceContainer_EM.java | 4 +- .../item/ElementalDefinitionContainer_EM.java | 4 +- .../item/ElementalDefinitionScanStorage_EM.java | 4 +- .../technus/tectech/thing/item/EuMeterGT.java | 2 +- .../thing/item/FrontRotationTriggerItem.java | 20 +- .../tectech/thing/item/ParametrizerMemoryCard.java | 4 +- .../tectech/thing/item/TeslaCoilCapacitor.java | 4 +- .../tectech/thing/item/TeslaCoilComponent.java | 2 +- .../technus/tectech/thing/item/TeslaCoilCover.java | 2 +- .../technus/tectech/thing/item/TeslaStaff.java | 2 +- .../thing/metaTileEntity/IConstructable.java | 15 - .../thing/metaTileEntity/IFrontRotation.java | 11 - .../thing/metaTileEntity/RotationMessage.java | 139 -- .../hatch/GT_MetaTileEntity_Hatch_Capacitor.java | 8 +- .../GT_MetaTileEntity_Hatch_CreativeData.java | 8 +- ...T_MetaTileEntity_Hatch_CreativeMaintenance.java | 4 +- .../GT_MetaTileEntity_Hatch_DataConnector.java | 8 +- .../hatch/GT_MetaTileEntity_Hatch_DynamoMulti.java | 6 +- .../GT_MetaTileEntity_Hatch_DynamoTunnel.java | 10 +- ...GT_MetaTileEntity_Hatch_ElementalContainer.java | 6 +- .../hatch/GT_MetaTileEntity_Hatch_EnergyMulti.java | 6 +- .../GT_MetaTileEntity_Hatch_EnergyTunnel.java | 21 +- .../hatch/GT_MetaTileEntity_Hatch_Holder.java | 4 +- .../hatch/GT_MetaTileEntity_Hatch_InputData.java | 6 +- .../GT_MetaTileEntity_Hatch_InputDataItems.java | 8 +- .../GT_MetaTileEntity_Hatch_InputElemental.java | 2 +- .../hatch/GT_MetaTileEntity_Hatch_OutputData.java | 6 +- .../GT_MetaTileEntity_Hatch_OutputDataItems.java | 6 +- .../GT_MetaTileEntity_Hatch_OutputElemental.java | 2 +- .../GT_MetaTileEntity_Hatch_OverflowElemental.java | 8 +- .../hatch/GT_MetaTileEntity_Hatch_Param.java | 4 +- .../hatch/GT_MetaTileEntity_Hatch_ParamText.java | 2 +- .../hatch/GT_MetaTileEntity_Hatch_Rack.java | 8 +- .../hatch/GT_MetaTileEntity_Hatch_Uncertainty.java | 4 +- .../hatch/TextParametersMessage.java | 2 +- .../hatch/gui/GT_Container_Param.java | 2 +- .../hatch/gui/GT_Container_ParamAdv.java | 2 +- .../hatch/gui/GT_Container_ParamText.java | 2 +- .../hatch/gui/GT_GUIContainer_Param.java | 2 +- .../hatch/gui/GT_GUIContainer_ParamAdv.java | 2 +- .../hatch/gui/GT_GUIContainer_ParamText.java | 2 +- .../multi/GT_MetaTileEntity_EM_annihilation.java | 12 +- .../multi/GT_MetaTileEntity_EM_bhg.java | 14 +- .../multi/GT_MetaTileEntity_EM_collider.java | 16 +- .../multi/GT_MetaTileEntity_EM_computer.java | 28 +- .../multi/GT_MetaTileEntity_EM_crafting.java | 12 +- .../multi/GT_MetaTileEntity_EM_dataBank.java | 14 +- .../multi/GT_MetaTileEntity_EM_decay.java | 14 +- .../multi/GT_MetaTileEntity_EM_dequantizer.java | 10 +- .../multi/GT_MetaTileEntity_EM_infuser.java | 8 +- .../multi/GT_MetaTileEntity_EM_junction.java | 10 +- .../multi/GT_MetaTileEntity_EM_quantizer.java | 12 +- .../multi/GT_MetaTileEntity_EM_research.java | 16 +- .../multi/GT_MetaTileEntity_EM_scanner.java | 14 +- .../multi/GT_MetaTileEntity_EM_stabilizer.java | 8 +- .../multi/GT_MetaTileEntity_EM_switch.java | 18 +- .../multi/GT_MetaTileEntity_EM_transformer.java | 12 +- .../multi/GT_MetaTileEntity_EM_wormhole.java | 12 +- .../multi/GT_MetaTileEntity_TM_microwave.java | 36 +- .../GT_MetaTileEntity_TM_proccessingStack.java | 8 +- .../multi/GT_MetaTileEntity_TM_teslaCoil.java | 114 +- .../multi/base/GT_Container_MultiMachineEM.java | 2 +- .../base/GT_MetaTileEntity_MultiblockBase_EM.java | 429 +---- .../render/TT_RenderedExtendedFacingTexture.java | 893 +++++++++++ .../multi/base/render/TT_RenderedTexture.java | 769 --------- .../multi/em_machine/Behaviour_Centrifuge.java | 2 +- .../Behaviour_ElectromagneticSeparator.java | 2 +- .../multi/em_machine/Behaviour_Recycler.java | 2 +- .../em_machine/GT_MetaTileEntity_EM_machine.java | 10 +- .../pipe/GT_MetaTileEntity_Pipe_Data.java | 40 +- .../pipe/GT_MetaTileEntity_Pipe_EM.java | 40 +- .../pipe/GT_MetaTileEntity_Pipe_Energy.java | 40 +- .../thing/metaTileEntity/pipe/IActivePipe.java | 9 - .../metaTileEntity/pipe/IConnectsToDataPipe.java | 14 - .../pipe/IConnectsToElementalPipe.java | 8 - .../pipe/IConnectsToEnergyTunnel.java | 8 - .../metaTileEntity/pipe/PipeActivityMessage.java | 133 -- .../single/GT_MetaTileEntity_BuckConverter.java | 4 +- .../single/GT_MetaTileEntity_DataReader.java | 6 +- .../single/GT_MetaTileEntity_DebugPollutor.java | 4 +- .../GT_MetaTileEntity_DebugPowerGenerator.java | 4 +- .../GT_MetaTileEntity_DebugStructureWriter.java | 6 +- .../single/GT_MetaTileEntity_MicroController.java | 2 +- .../single/GT_MetaTileEntity_OwnerDetector.java | 6 +- .../single/GT_MetaTileEntity_TT_Transformer.java | 4 +- .../single/GT_MetaTileEntity_TeslaCoil.java | 16 +- .../single/GT_MetaTileEntity_WetTransformer.java | 4 +- .../single/gui/GT_Container_DebugPollutor.java | 2 +- .../single/gui/GT_GUIContainer_BuckConverter.java | 4 +- .../single/gui/GT_GUIContainer_DataReader.java | 2 +- .../gui/GT_GUIContainer_DebugPowerGenerator.java | 4 +- .../github/technus/tectech/util/CommonValues.java | 43 + .../com/github/technus/tectech/util/Converter.java | 59 + .../java/com/github/technus/tectech/util/Util.java | 1104 +++++++++++++ .../com/github/technus/tectech/util/Vec3Impl.java | 146 ++ .../java/com/github/technus/tectech/util/XSTR.java | 278 ++++ 148 files changed, 4317 insertions(+), 4036 deletions(-) delete mode 100644 src/main/java/com/github/technus/tectech/CommonValues.java delete mode 100644 src/main/java/com/github/technus/tectech/Converter.java delete mode 100644 src/main/java/com/github/technus/tectech/Util.java delete mode 100644 src/main/java/com/github/technus/tectech/Vec3pos.java delete mode 100644 src/main/java/com/github/technus/tectech/XSTR.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/alignment/AlignmentLimits.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/alignment/AlignmentMessage.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/alignment/IAlignment.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/alignment/IAlignmentLimits.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/alignment/IntegerAxisSwap.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/alignment/enumerable/Direction.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/alignment/enumerable/ExtendedFacing.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/alignment/enumerable/Flip.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/alignment/enumerable/Rotation.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/constructible/IConstructable.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/pipe/IActivePipe.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/pipe/IConnectsToDataPipe.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/pipe/IConnectsToElementalPipe.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/pipe/IConnectsToEnergyTunnel.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/pipe/PipeActivityMessage.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/IConstructable.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/IFrontRotation.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/RotationMessage.java create mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/render/TT_RenderedExtendedFacingTexture.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/render/TT_RenderedTexture.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/IActivePipe.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/IConnectsToDataPipe.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/IConnectsToElementalPipe.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/IConnectsToEnergyTunnel.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/PipeActivityMessage.java create mode 100644 src/main/java/com/github/technus/tectech/util/CommonValues.java create mode 100644 src/main/java/com/github/technus/tectech/util/Converter.java create mode 100644 src/main/java/com/github/technus/tectech/util/Util.java create mode 100644 src/main/java/com/github/technus/tectech/util/Vec3Impl.java create mode 100644 src/main/java/com/github/technus/tectech/util/XSTR.java diff --git a/build.properties b/build.properties index cfc5423a3c..a4d2ac1760 100644 --- a/build.properties +++ b/build.properties @@ -1,6 +1,6 @@ minecraft.version=1.7.10 forge.version=10.13.4.1614 -tectech.version=3.7.5 +tectech.version=3.8.0 ic2.version=2.2.790-experimental codechickenlib.version=1.1.3.140 diff --git a/src/main/java/com/github/technus/tectech/CommonValues.java b/src/main/java/com/github/technus/tectech/CommonValues.java deleted file mode 100644 index 9564643fbe..0000000000 --- a/src/main/java/com/github/technus/tectech/CommonValues.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.github.technus.tectech; - -import net.minecraft.util.EnumChatFormatting; - -/** - * Created by danie_000 on 11.01.2017. - */ -public final class CommonValues { - public static final String TEC_MARK_GENERAL = - EnumChatFormatting.BLUE + "Tec" + - EnumChatFormatting.DARK_BLUE + "Tech" + - EnumChatFormatting.BLUE + ": Interdimensional"; - public static final String TEC_MARK_EM = - EnumChatFormatting.BLUE + "Tec" + - EnumChatFormatting.DARK_BLUE + "Tech" + - EnumChatFormatting.BLUE + ": Elemental Matter"; - public static final String BASS_MARK = - EnumChatFormatting.BLUE + "Tec" + - EnumChatFormatting.DARK_BLUE + "Tech" + - EnumChatFormatting.BLUE + ": Theta Movement"; - public static final String COSMIC_MARK = - EnumChatFormatting.BLUE + "Tec" + - EnumChatFormatting.DARK_BLUE + "Tech" + - EnumChatFormatting.BLUE + ": Cosmic";//TODO get a better name than cosmic for *UNDEFINED* thing - - public static final byte DECAY_AT = 0;// hatches compute decays - public static final byte MULTI_PURGE_1_AT = 2;// multiblocks clean their hatches 1 - public static final byte MOVE_AT = 4;// move stuff around - public static final byte RECIPE_AT = 6;// move stuff around - public static final byte MULTI_PURGE_2_AT = 8;// multiblocks clean their hatches 2 - public static final byte OVERFLOW_AT = 10;// then hatches clean themselves - // - in case some hatches are not in multiblock structure - public static final byte MULTI_CHECK_AT = 12;// multiblock checks it's state - public static final byte DISPERSE_AT = 14;// overflow hatches perform disperse - public static final byte TRANSFER_AT = 16; - - public static final long[] AatV = new long[]{268435455,67108863,16777215,4194303,1048575,262143,65535,16383,4095,1023,255,63,15,3,1,1}; - public static final String[] VOLTAGE_NAMES = new String[]{"Ultra Low Voltage", "Low Voltage", "Medium Voltage", "High Voltage", "Extreme Voltage", "Insane Voltage", "Ludicrous Voltage", "ZPM Voltage", "Ultimate Voltage", "Ultimate High Voltage", "Ultimate Extreme Voltage", "Ultimate Insane Voltage", "Ultimate Mega Voltage", "Ultimate Extended Mega Voltage", "Overpowered Voltage", "Maximum Voltage"}; - public static final String[] VN = new String[]{"ULV", "LV", "MV", "HV", "EV", "IV", "LuV", "ZPM", "UV", "UHV", "UEV", "UIV", "UMV", "UXV", "OpV", "MAX"}; - public static final long[] V = new long[]{8L, 32L, 128L, 512L, 2048L, 8192L, 32768L, 131072L, 524288L, 2097152L, 8388608L, 33554432L, 134217728L, 536870912L, 1073741824L, Integer.MAX_VALUE - 7}; - - private CommonValues() {} -} diff --git a/src/main/java/com/github/technus/tectech/Converter.java b/src/main/java/com/github/technus/tectech/Converter.java deleted file mode 100644 index 5d1f5c802e..0000000000 --- a/src/main/java/com/github/technus/tectech/Converter.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.github.technus.tectech; - -import java.io.*; - -public final class Converter { - private Converter() {} - - public static void writeInts(int [] array,ByteArrayOutputStream byteArrayOutputStream) { - try { - DataOutputStream dataOutputStream = new DataOutputStream(byteArrayOutputStream); - for (int i = 0; i < array.length; i++) { - dataOutputStream.writeInt(array[i]); - } - dataOutputStream.flush(); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - public static void readInts(ByteArrayInputStream byteArrayInputStream,int[] array) { - try { - DataInputStream dataInputStream = new DataInputStream(byteArrayInputStream); - for (int i = 0; i < array.length; i++) { - array[i] = dataInputStream.readInt(); - } - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - public static byte[] writeInts(int[] array) { - try { - ByteArrayOutputStream bos = new ByteArrayOutputStream(array.length * 4); - DataOutputStream dos = new DataOutputStream(bos); - for (int i = 0; i < array.length; i++) { - dos.writeInt(array[i]); - } - - return bos.toByteArray(); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - public static int[] readInts(byte[] array) { - try { - ByteArrayInputStream bis = new ByteArrayInputStream(array); - DataInputStream dataInputStream = new DataInputStream(bis); - int size = array.length / Integer.BYTES; - int[] res = new int[size]; - for (int i = 0; i < size; i++) { - res[i] = dataInputStream.readInt(); - } - return res; - } catch (IOException e) { - throw new RuntimeException(e); - } - } -} diff --git a/src/main/java/com/github/technus/tectech/TecTech.java b/src/main/java/com/github/technus/tectech/TecTech.java index 9694dadfd3..47a3b576b1 100644 --- a/src/main/java/com/github/technus/tectech/TecTech.java +++ b/src/main/java/com/github/technus/tectech/TecTech.java @@ -12,6 +12,7 @@ import com.github.technus.tectech.mechanics.data.PlayerPersistence; import com.github.technus.tectech.mechanics.elementalMatter.core.commands.GiveEM; import com.github.technus.tectech.mechanics.elementalMatter.core.commands.ListEM; import com.github.technus.tectech.proxy.CommonProxy; +import com.github.technus.tectech.util.XSTR; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.Mod; diff --git a/src/main/java/com/github/technus/tectech/Util.java b/src/main/java/com/github/technus/tectech/Util.java deleted file mode 100644 index 5bd3ff59a9..0000000000 --- a/src/main/java/com/github/technus/tectech/Util.java +++ /dev/null @@ -1,1640 +0,0 @@ -package com.github.technus.tectech; - -import com.github.technus.tectech.thing.casing.TT_Container_Casings; -import com.github.technus.tectech.thing.metaTileEntity.IFrontRotation; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; -import cpw.mods.fml.common.FMLCommonHandler; -import cpw.mods.fml.common.ObfuscationReflectionHelper; -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.GregTech_API; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_TieredMachineBlock; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.ICrafting; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.CompressedStreamTools; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.server.MinecraftServer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.world.ChunkCoordIntPair; -import net.minecraft.world.World; -import net.minecraft.world.chunk.Chunk; -import net.minecraft.world.storage.IPlayerFileData; -import net.minecraft.world.storage.SaveHandler; -import net.minecraftforge.fluids.FluidStack; -import org.apache.commons.lang3.StringUtils; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.lang.reflect.Field; -import java.util.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; -import static gregtech.api.enums.GT_Values.E; -import static java.nio.charset.Charset.forName; - -/** - * Created by Tec on 21.03.2017. - */ -public final class Util { - private Util() { - } - - @SuppressWarnings("ComparatorMethodParameterNotUsed") - public static > SortedSet> entriesSortedByValues(Map map) { - SortedSet> sortedEntries = new TreeSet<>( - (e1, e2) -> { - int res = e1.getValue().compareTo(e2.getValue()); - return res != 0 ? res : 1; // Special fix to preserve items with equal values - } - ); - sortedEntries.addAll(map.entrySet()); - return sortedEntries; - } - - public static int bitStringToInt(String bits){ - if(bits==null){ - return 0; - } - if(bits.length() > 32){ - throw new NumberFormatException("Too long!"); - } - return Integer.parseInt(bits,2); - } - - public static int hexStringToInt(String hex){ - if(hex==null){ - return 0; - } - if(hex.length()>8){ - throw new NumberFormatException("Too long!"); - } - return Integer.parseInt(hex,16); - } - - public static double stringToDouble(String str){ - if(str==null){ - return 0; - } - return Double.parseDouble(str); - } - - public static double getValue(String in1) { - String str = in1.toLowerCase(); - double val; - try { - if (str.contains("b")) { - String[] split = str.split("b"); - val = Util.bitStringToInt(split[0].replaceAll("[^-]", "") + split[1].replaceAll("_", "")); - } else if (str.contains("x")) { - String[] split = str.split("x"); - val = Util.hexStringToInt(split[0].replaceAll("[^-]", "") + split[1].replaceAll("_", "")); - } else { - val = Util.stringToDouble(str); - } - return val; - } catch (Exception e) { - return 0; - } - } - - - public static String intBitsToString(int number) { - StringBuilder result = new StringBuilder(16); - - for (int i = 31; i >= 0; i--) { - int mask = 1 << i; - result.append((number & mask) != 0 ? "1" : "0"); - - if (i % 8 == 0) { - result.append(' '); - } - } - result.replace(result.length() - 1, result.length(), ""); - - return result.toString(); - } - - public static String intBitsToShortString(int number) { - StringBuilder result = new StringBuilder(35); - - for (int i = 31; i >= 0; i--) { - int mask = 1 << i; - result.append((number & mask) != 0 ? ":" : "."); - - if (i % 8 == 0) { - result.append('|'); - } - } - result.replace(result.length() - 1, result.length(), ""); - - return result.toString(); - } - - public static String longBitsToShortString(long number) { - StringBuilder result = new StringBuilder(71); - - for (int i = 63; i >= 0; i--) { - long mask = 1L << i; - result.append((number & mask) != 0 ? ":" : "."); - - if (i % 8 == 0) { - result.append('|'); - } - } - result.replace(result.length() - 1, result.length(), ""); - - return result.toString(); - } - - public static float map(float x, float in_min, float in_max, float out_min, float out_max) { - return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; - } - - //region junk - /* - //Check Machine Structure based on string[][] (effectively char[][][]), ond offset of the controller - //This only checks for REGULAR BLOCKS! - public static boolean StructureChecker(String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR-1 blocks - Block[] blockType,//use numbers 0-9 for casing types - byte[] blockMeta,//use numbers 0-9 for casing types - int horizontalOffset, int verticalOffset, int depthOffset, - IGregTechTileEntity aBaseMetaTileEntity, - boolean forceCheck) { - World world = aBaseMetaTileEntity.getWorld(); - if (world.isRemote) { - return false; - } - //TE Rotation - byte facing = aBaseMetaTileEntity.getFrontFacing(); - - int x, y, z, a, b, c, pointer; - int - baseX=aBaseMetaTileEntity.getXCoord(), - baseZ=aBaseMetaTileEntity.getZCoord(), - baseY=aBaseMetaTileEntity.getYCoord(); - //a,b,c - relative to block face! - //x,y,z - relative to block position on map! - //yPos - absolute height of checked block - - //perform your duties - c = -depthOffset; - for (String[] _structure : structure) {//front to back - b = verticalOffset; - for (String __structure : _structure) {//top to bottom - a = -horizontalOffset; - for (char block : __structure.toCharArray()) {//left to right - if (block < ' ') {//Control chars allow skipping - b -= block; - break; - } if (block > '@')//characters allow to skip check a-1 skip, b-2 skips etc. - { - a += block - '@'; - } else if (block < '+')//used to mark THINGS - { - a++; - } else if (block=='.') { - a++; - } else { - //get x y z from rotation - switch (facing) {//translation - case 4: - x = baseX + c; - z = baseZ + a; - y = baseY + b; - break; - case 3: - x = baseX + a; - z = baseZ - c; - y = baseY + b; - break; - case 5: - x = baseX - c; - z = baseZ - a; - y = baseY + b; - break; - case 2: - x = baseX - a; - z = baseZ + c; - y = baseY + b; - break; - //Things get odd if the block faces up or down... - case 1: - x = baseX + a; - z = baseZ + b; - y = baseY - c; - break;//similar to 3 - case 0: - x = baseX - a; - z = baseZ - b; - y = baseY + c; - break;//similar to 2 - default: - return false; - } - - //that must be here since in some cases other axis (b,c) controls y - if (y < 0 || y >= 256) { - return false; - } - - //Check block - if (world.blockExists(x, y, z)) {//this actually checks if the chunk is loaded at this pos - switch (block) { - case '-'://must be air - if (world.getBlock(x, y, z).getMaterial() != Material.air) { - return false; - } - break; - case '+'://must not be air - if (world.getBlock(x, y, z).getMaterial() == Material.air) { - return false; - } - break; - default: //check for block (countable) - pointer = block - '0'; - //countable air -> net.minecraft.block.BlockAir - if (world.getBlock(x, y, z) != blockType[pointer]) { - if (DEBUG_MODE) { - TecTech.LOGGER.info("Struct-block-error " + x + ' ' + y + ' ' + z + " / " + a + ' ' + b + ' ' + c + " / " + world.getBlock(x, y, z).getUnlocalizedName() + ' ' + blockType[pointer].getUnlocalizedName()); - } - return false; - } - if (world.getBlockMetadata(x, y, z) != blockMeta[pointer]) { - if (DEBUG_MODE) { - TecTech.LOGGER.info("Struct-meta-id-error " + x + ' ' + y + ' ' + z + " / " + a + ' ' + b + ' ' + c + " / " + world.getBlockMetadata(x, y, z) + ' ' + blockMeta[pointer]); - } - return false; - } - } - } else if (forceCheck) { - return false; - } - a++;//block in horizontal layer - } - } - b--;//horizontal layer - } - c++;//depth - } - return true; - } - - //Check Machine Structure based on string[][] (effectively char[][][]), ond offset of the controller - //This only checks for REGULAR BLOCKS! - public static boolean StructureCheckerAdvanced( - String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR-1 blocks - Block[] blockType,//use numbers 0-9 for casing types - byte[] blockMeta,//use numbers 0-9 for casing types - Method adder, - String[] addingMethods, - short[] casingTextures, - Block[] blockTypeFallback,//use numbers 0-9 for casing types - byte[] blockMetaFallback,//use numbers 0-9 for casing types - int horizontalOffset, int verticalOffset, int depthOffset, - IGregTechTileEntity aBaseMetaTileEntity, - boolean forceCheck) { - World world = aBaseMetaTileEntity.getWorld(); - if (world.isRemote) { - return false; - } - //TE Rotation - byte facing = aBaseMetaTileEntity.getFrontFacing(); - - IGregTechTileEntity igt; - IMetaTileEntity imt = aBaseMetaTileEntity.getMetaTileEntity(); - - int x, y, z, a, b, c, pointer; - int baseX=aBaseMetaTileEntity.getXCoord(), - baseZ=aBaseMetaTileEntity.getZCoord(), - baseY=aBaseMetaTileEntity.getYCoord(); - //a,b,c - relative to block face! - //x,y,z - relative to block position on map! - //yPos - absolute height of checked block - - //perform your duties - c = -depthOffset; - for (String[] _structure : structure) {//front to back - b = verticalOffset; - for (String __structure : _structure) {//top to bottom - a = -horizontalOffset; - for (char block : __structure.toCharArray()) {//left to right - if (block < ' ') {//Control chars allow skipping - b -= block; - break; - } else if (block > '@') //characters allow to skip check A-1 skip, B-2 skips etc. - { - a += block - '@'; - }//else if (block < '+')//used to mark THINGS - // a++; - else if (block=='.') { - a++; - } else { - //get x y z from rotation - switch (facing) {//translation - case 4: - x = baseX + c; - z = baseZ + a; - y = baseY + b; - break; - case 3: - x = baseX + a; - z = baseZ - c; - y = baseY + b; - break; - case 5: - x = baseX - c; - z = baseZ - a; - y = baseY + b; - break; - case 2: - x = baseX - a; - z = baseZ + c; - y = baseY + b; - break; - //Things get odd if the block faces up or down... - case 1: - x = baseX + a; - z = baseZ + b; - y = baseY - c; - break;//similar to 3 - case 0: - x = baseX - a; - z = baseZ - b; - y = baseY + c; - break;//similar to 2 - default: - return false; - } - - //that must be here since in some cases other axis (b,c) controls y - if (y < 0 || y >= 256) { - return false; - } - - //Check block - if (world.blockExists(x, y, z)) {//this actually checks if the chunk is loaded at this pos - switch (block) { - case '-'://must be air - if (world.getBlock(x, y, z).getMaterial() != Material.air) { - return false; - } - break; - case '+'://must not be air - if (world.getBlock(x, y, z).getMaterial() == Material.air) { - return false; - } - break; - default://check for block (countable) - if ((pointer = block - '0') >= 0) { - //countable air -> net.minecraft.block.BlockAir - if (world.getBlock(x, y, z) != blockType[pointer]) { - if (DEBUG_MODE) { - TecTech.LOGGER.info("Struct-block-error " + x + ' ' + y + ' ' + z + " / " + a + ' ' + b + ' ' + c + " / " + world.getBlock(x, y, z).getUnlocalizedName() + ' ' + blockType[pointer].getUnlocalizedName()); - } - return false; - } - if (world.getBlockMetadata(x, y, z) != blockMeta[pointer]) { - if (DEBUG_MODE) { - TecTech.LOGGER.info("Struct-meta-id-error " + x + ' ' + y + ' ' + z + " / " + a + ' ' + b + ' ' + c + " / " + world.getBlockMetadata(x, y, z) + ' ' + blockMeta[pointer]); - } - return false; - } - } else if ((pointer = block - ' ') >= 0) { - igt = aBaseMetaTileEntity.getIGregTechTileEntity(x, y, z); - try { - if (igt == null || !(boolean) adder.invoke(imt, addingMethods[pointer], igt, casingTextures[pointer])) { - if (world.getBlock(x, y, z) != blockTypeFallback[pointer]) { - if (DEBUG_MODE) { - TecTech.LOGGER.info("Fallback-struct-block-error " + x + ' ' + y + ' ' + z + " / " + a + ' ' + b + ' ' + c + " / " + world.getBlock(x, y, z).getUnlocalizedName() + ' ' + (blockTypeFallback[pointer] == null ? "null" : blockTypeFallback[pointer].getUnlocalizedName())); - } - return false; - } - if (world.getBlockMetadata(x, y, z) != blockMetaFallback[pointer]) { - if (DEBUG_MODE) { - TecTech.LOGGER.info("Fallback-Struct-meta-id-error " + x + ' ' + y + ' ' + z + " / " + a + ' ' + b + ' ' + c + " / " + world.getBlockMetadata(x, y, z) + ' ' + blockMetaFallback[pointer]); - } - return false; - } - } - } catch (InvocationTargetException | IllegalAccessException e) { - if (DEBUG_MODE) { - e.printStackTrace(); - } - return false; - } - } - } - } else if (forceCheck) { - return false; - } - a++;//block in horizontal layer - } - } - b--;//horizontal layer - } - c++;//depth - } - return true; - } - */ - //endregion - - //Check Machine Structure based on string[][] (effectively char[][][]), ond offset of the controller - //This only checks for REGULAR BLOCKS! - public static boolean StructureCheckerExtreme( - String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR-1 blocks - Block[] blockType,//use numbers 0-9 for casing types - byte[] blockMeta,//use numbers 0-9 for casing types - IHatchAdder[] addingMethods, - short[] casingTextures, - Block[] blockTypeFallback,//use numbers 0-9 for casing types - byte[] blockMetaFallback,//use numbers 0-9 for casing types - int horizontalOffset, int verticalOffset, int depthOffset, - IGregTechTileEntity aBaseMetaTileEntity, - IFrontRotation frontRotation, - boolean forceCheck) { - World world = aBaseMetaTileEntity.getWorld(); - if (world.isRemote) { - return false; - } - //TE Rotation - int facingAndRotation = aBaseMetaTileEntity.getFrontFacing() + (frontRotation == null ? 0 : (frontRotation.getFrontRotation() << 3)); - - IGregTechTileEntity igt; - IMetaTileEntity imt = aBaseMetaTileEntity.getMetaTileEntity(); - - int x, y, z, a, b, c, pointer; - int baseX = aBaseMetaTileEntity.getXCoord(), - baseZ = aBaseMetaTileEntity.getZCoord(), - baseY = aBaseMetaTileEntity.getYCoord(); - //a,b,c - relative to block face! - //x,y,z - relative to block position on map! - //yPos - absolute height of checked block - - //perform your duties - c = -depthOffset; - for (String[] _structure : structure) {//front to back - b = verticalOffset; - for (String __structure : _structure) {//top to bottom - a = -horizontalOffset; - for (char block : __structure.toCharArray()) {//left to right - if (block < ' ') {//Control chars allow skipping - b -= block; - break; - } else if (block > '@') {//characters allow to skip check A-1 skip, B-2 skips etc. - a += block - '@'; - }//else if (block < '+')//used to mark THINGS - // a++; - else if (block == '.') { - a++; - } else { - //get x y z from rotation - switch (facingAndRotation) {//translation - case 4: - x = baseX + c; - z = baseZ + a; - y = baseY + b; - break; - case 12: - x = baseX + c; - y = baseY - a; - z = baseZ + b; - break; - case 20: - x = baseX + c; - z = baseZ - a; - y = baseY - b; - break; - case 28: - x = baseX + c; - y = baseY + a; - z = baseZ - b; - break; - - case 3: - x = baseX + a; - z = baseZ - c; - y = baseY + b; - break; - case 11: - y = baseY - a; - z = baseZ - c; - x = baseX + b; - break; - case 19: - x = baseX - a; - z = baseZ - c; - y = baseY - b; - break; - case 27: - y = baseY + a; - z = baseZ - c; - x = baseX - b; - break; - - case 5: - x = baseX - c; - z = baseZ - a; - y = baseY + b; - break; - case 13: - x = baseX - c; - y = baseY - a; - z = baseZ - b; - break; - case 21: - x = baseX - c; - z = baseZ + a; - y = baseY - b; - break; - case 29: - x = baseX - c; - y = baseY + a; - z = baseZ + b; - break; - - case 2: - x = baseX - a; - z = baseZ + c; - y = baseY + b; - break; - case 10: - y = baseY - a; - z = baseZ + c; - x = baseX - b; - break; - case 18: - x = baseX + a; - z = baseZ + c; - y = baseY - b; - break; - case 26: - y = baseY + a; - z = baseZ + c; - x = baseX + b; - break; - //Things get odd if the block faces up or down... - case 1: - x = baseX + a; - z = baseZ - b; - y = baseY - c; - break;//similar to 3 - case 9: - z = baseZ + a; - x = baseX + b; - y = baseY - c; - break;//similar to 3 - case 17: - x = baseX - a; - z = baseZ + b; - y = baseY - c; - break;//similar to 3 - case 25: - z = baseZ - a; - x = baseX - b; - y = baseY - c; - break;//similar to 3 - - case 0: - x = baseX - a; - z = baseZ - b; - y = baseY + c; - break;//similar to 2 - case 8: - z = baseZ + a; - x = baseX - b; - y = baseY + c; - break; - case 16: - x = baseX + a; - z = baseZ + b; - y = baseY + c; - break; - case 24: - z = baseZ - a; - x = baseX + b; - y = baseY + c; - break; - default: - if (DEBUG_MODE) { - TecTech.LOGGER.info("facing = " + facingAndRotation); - } - return false; - } - - //that must be here since in some cases other axis (b,c) controls y - if (y < 0 || y >= 256) { - return false; - } - - //Check block - if (world.blockExists(x, y, z)) {//this actually checks if the chunk is loaded at this pos - switch (block) { - case '-'://must be air - if (world.getBlock(x, y, z).getMaterial() != Material.air) { - return false; - } - break; - case '+'://must not be air - if (world.getBlock(x, y, z).getMaterial() == Material.air) { - return false; - } - break; - default://check for block (countable) - if ((pointer = block - '0') >= 0) { - //countable air -> net.minecraft.block.BlockAir - if (world.getBlock(x, y, z) != blockType[pointer]) { - if (DEBUG_MODE) { - TecTech.LOGGER.info("Struct-block-error " + x + ' ' + y + ' ' + z + " / " + a + ' ' + b + ' ' + c + " / " + world.getBlock(x, y, z).getUnlocalizedName() + ' ' + blockType[pointer].getUnlocalizedName()); - } - return false; - } - if (world.getBlockMetadata(x, y, z) != blockMeta[pointer]) { - if (DEBUG_MODE) { - TecTech.LOGGER.info("Struct-meta-id-error " + x + ' ' + y + ' ' + z + " / " + a + ' ' + b + ' ' + c + " / " + world.getBlockMetadata(x, y, z) + ' ' + blockMeta[pointer]); - } - return false; - } - } else //noinspection ConstantConditions - if ((pointer = block - ' ') >= 0) { - igt = aBaseMetaTileEntity.getIGregTechTileEntity(x, y, z); - if (igt == null || !addingMethods[pointer].apply(igt, casingTextures[pointer])) { - if (world.getBlock(x, y, z) != blockTypeFallback[pointer]) { - if (DEBUG_MODE) { - TecTech.LOGGER.info("Fallback-struct-block-error " + x + ' ' + y + ' ' + z + " / " + a + ' ' + b + ' ' + c + " / " + world.getBlock(x, y, z).getUnlocalizedName() + ' ' + (blockTypeFallback[pointer] == null ? "null" : blockTypeFallback[pointer].getUnlocalizedName())); - } - return false; - } - if (world.getBlockMetadata(x, y, z) != blockMetaFallback[pointer]) { - if (DEBUG_MODE) { - TecTech.LOGGER.info("Fallback-Struct-meta-id-error " + x + ' ' + y + ' ' + z + " / " + a + ' ' + b + ' ' + c + " / " + world.getBlockMetadata(x, y, z) + ' ' + blockMetaFallback[pointer]); - } - return false; - } - } - } - } - } else if (forceCheck) { - return false; - } - a++;//block in horizontal layer - } - } - b--;//horizontal layer - } - c++;//depth - } - return true; - } - - public static boolean StructureBuilder(String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR+1 blocks - Block[] blockType,//use numbers 0-9 for casing types - byte[] blockMeta,//use numbers 0-9 for casing types - int horizontalOffset, int verticalOffset, int depthOffset, - IGregTechTileEntity aBaseMetaTileEntity, boolean hintsOnly) { - byte facing = aBaseMetaTileEntity.getFrontFacing(); - return StructureBuilderExtreme(structure, blockType, blockMeta, - horizontalOffset, verticalOffset, depthOffset, - aBaseMetaTileEntity.getWorld().getTileEntity(aBaseMetaTileEntity.getXCoord(), aBaseMetaTileEntity.getYCoord(), aBaseMetaTileEntity.getZCoord()), null, - facing, hintsOnly); - } - - public static boolean StructureBuilderExtreme(String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR+1 blocks - Block[] blockType,//use numbers 0-9 for casing types - byte[] blockMeta,//use numbers 0-9 for casing types - int horizontalOffset, int verticalOffset, int depthOffset, - IGregTechTileEntity aBaseMetaTileEntity, IFrontRotation frontRotation, boolean hintsOnly) { - byte facing = aBaseMetaTileEntity.getFrontFacing(); - return StructureBuilderExtreme(structure, blockType, blockMeta, - horizontalOffset, verticalOffset, depthOffset, - aBaseMetaTileEntity.getWorld().getTileEntity(aBaseMetaTileEntity.getXCoord(), aBaseMetaTileEntity.getYCoord(), aBaseMetaTileEntity.getZCoord()), frontRotation, - facing, hintsOnly); - } - - public static boolean StructureBuilder(String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR+1 blocks - Block[] blockType,//use numbers 0-9 for casing types - byte[] blockMeta,//use numbers 0-9 for casing types - int horizontalOffset, int verticalOffset, int depthOffset, - TileEntity tileEntity, int facing, boolean hintsOnly) { - return StructureBuilderExtreme(structure, blockType, blockMeta, horizontalOffset, verticalOffset, depthOffset, tileEntity, null, facing, hintsOnly); - } - - public static boolean StructureBuilderExtreme(String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR+1 blocks - Block[] blockType,//use numbers 0-9 for casing types - byte[] blockMeta,//use numbers 0-9 for casing types - int horizontalOffset, int verticalOffset, int depthOffset, - TileEntity tileEntity, IFrontRotation frontRotation, int facing, boolean hintsOnly) { - if (!tileEntity.hasWorldObj()) { - return false; - } - World world = tileEntity.getWorldObj(); - if (!world.isRemote && hintsOnly) { - return false; - } - - //TE Rotation - - int x, y, z, a, b, c, pointer; - int - baseX = tileEntity.xCoord, - baseZ = tileEntity.zCoord, - baseY = tileEntity.yCoord; - //a,b,c - relative to block face! - //x,y,z - relative to block position on map! - if (frontRotation != null) { - facing += frontRotation.getFrontRotation() << 3; - } - - //perform your duties - c = -depthOffset; - for (String[] _structure : structure) {//front to back - b = verticalOffset; - for (String __structure : _structure) {//top to bottom - a = -horizontalOffset; - for (char block : __structure.toCharArray()) {//left to right - if (block < ' ') {//Control chars allow skipping - b -= block; - break; - } - if (block > '@')//characters allow to skip check a-1 skip, b-2 skips etc. - { - a += block - '@'; - }//else if (block < '+')//used to mark THINGS - // a++; - else if (block == '.')// this TE - { - a++; - } else { - //get x y z from rotation - switch (facing) { - case 4: - x = baseX + c; - z = baseZ + a; - y = baseY + b; - break; - case 12: - x = baseX + c; - y = baseY - a; - z = baseZ + b; - break; - case 20: - x = baseX + c; - z = baseZ - a; - y = baseY - b; - break; - case 28: - x = baseX + c; - y = baseY + a; - z = baseZ - b; - break; - - case 3: - x = baseX + a; - z = baseZ - c; - y = baseY + b; - break; - case 11: - y = baseY - a; - z = baseZ - c; - x = baseX + b; - break; - case 19: - x = baseX - a; - z = baseZ - c; - y = baseY - b; - break; - case 27: - y = baseY + a; - z = baseZ - c; - x = baseX - b; - break; - - case 5: - x = baseX - c; - z = baseZ - a; - y = baseY + b; - break; - case 13: - x = baseX - c; - y = baseY - a; - z = baseZ - b; - break; - case 21: - x = baseX - c; - z = baseZ + a; - y = baseY - b; - break; - case 29: - x = baseX - c; - y = baseY + a; - z = baseZ + b; - break; - - case 2: - x = baseX - a; - z = baseZ + c; - y = baseY + b; - break; - case 10: - y = baseY - a; - z = baseZ + c; - x = baseX - b; - break; - case 18: - x = baseX + a; - z = baseZ + c; - y = baseY - b; - break; - case 26: - y = baseY + a; - z = baseZ + c; - x = baseX + b; - break; - //Things get odd if the block faces up or down... - case 1: - x = baseX + a; - z = baseZ - b; - y = baseY - c; - break;//similar to 3 - case 9: - z = baseZ + a; - x = baseX + b; - y = baseY - c; - break;//similar to 3 - case 17: - x = baseX - a; - z = baseZ + b; - y = baseY - c; - break;//similar to 3 - case 25: - z = baseZ - a; - x = baseX - b; - y = baseY - c; - break;//similar to 3 - - case 0: - x = baseX - a; - z = baseZ - b; - y = baseY + c; - break;//similar to 2 - case 8: - z = baseZ + a; - x = baseX - b; - y = baseY + c; - break; - case 16: - x = baseX + a; - z = baseZ + b; - y = baseY + c; - break; - case 24: - z = baseZ - a; - x = baseX + b; - y = baseY + c; - break; - default: - if (DEBUG_MODE) { - TecTech.LOGGER.info("facing = " + facing); - } - return false; - } - - //that must be here since in some cases other axis (b,c) controls y - if (y < 0 || y >= 256) { - return false; - } - - //Check block - if (world.blockExists(x, y, z)) {//this actually checks if the chunk is loaded - if (hintsOnly) { - switch (block) { - case '-'://must be air - TecTech.proxy.hint_particle(world, x, y, z, TT_Container_Casings.sHintCasingsTT, 13); - break; - case '+'://must not be air - TecTech.proxy.hint_particle(world, x, y, z, TT_Container_Casings.sHintCasingsTT, 14); - break; - default: //check for block - if ((pointer = block - '0') >= 0) { - if (world.getBlock(x, y, z) != blockType[pointer] || world.getBlockMetadata(x, y, z) != blockMeta[pointer]) { - TecTech.proxy.hint_particle(world, x, y, z, blockType[pointer], blockMeta[pointer]); - } - } else if ((pointer = block - ' ') >= 0) { - if (pointer >= 0 && pointer < 12) { - TecTech.proxy.hint_particle(world, x, y, z, TT_Container_Casings.sHintCasingsTT, pointer); - } else { - TecTech.proxy.hint_particle(world, x, y, z, TT_Container_Casings.sHintCasingsTT, 12); - } - } else { - TecTech.proxy.hint_particle(world, x, y, z, TT_Container_Casings.sHintCasingsTT, 15); - } - } - } else { - switch (block) { - case '-'://must be air - world.setBlock(x, y, z, Blocks.air, 0, 2); - break; - case '+'://must not be air - world.setBlock(x, y, z, TT_Container_Casings.sBlockCasingsTT, 14, 2); - break; - default: //check for block - if ((pointer = block - '0') >= 0) { - world.setBlock(x, y, z, blockType[pointer], blockMeta[pointer], 2); - } else if (block - ' ' < 0) { - world.setBlock(x, y, z, TT_Container_Casings.sHintCasingsTT, 15, 2); - } //else { - //switch(pointer){ - // case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: - // world.setBlock(x, y, z, TT_Container_Casings.sHintCasingsTT, pointer, 2); break; - // default:world.setBlock(x, y, z, TT_Container_Casings.sHintCasingsTT, 12, 2); - //} - //} - } - } - } - a++;//block in horizontal layer - } - } - b--;//horizontal layer - } - c++;//depth - } - return true; - } - - - public static String[] StructureWriter(IGregTechTileEntity aBaseMetaTileEntity, - int horizontalOffset, int verticalOffset, int depthOffset, - int horizontalSize, int verticalSize, int depthSize, boolean ignoreAir) { - //TE Rotation - byte facing = aBaseMetaTileEntity.getFrontFacing(); - World world = aBaseMetaTileEntity.getWorld(); - if (world.isRemote) { - return new String[]{"Not at Client m8"}; - } - - ItemStack[] array = new ItemStack[10]; - - int x, y, z, a, b, c; - int - baseX = aBaseMetaTileEntity.getXCoord(), - baseZ = aBaseMetaTileEntity.getZCoord(), - baseY = aBaseMetaTileEntity.getYCoord(); - //a,b,c - relative to block face! - //x,y,z - relative to block position on map! - //yPos - absolute height of checked block - - //perform your duties - #1 - count block types - c = -depthOffset; - for (int cz = 0; cz < depthSize; cz++) {//front to back - b = verticalOffset; - for (int by = 0; by < verticalSize; by++) {//top to bottom - a = -horizontalOffset; - for (int az = 0; az < horizontalSize; az++) {//left to right - //get x y z from rotation - switch (facing) {//translation - case 4: - x = baseX + c; - z = baseZ + a; - y = baseY + b; - break; - case 3: - x = baseX + a; - z = baseZ - c; - y = baseY + b; - break; - case 5: - x = baseX - c; - z = baseZ - a; - y = baseY + b; - break; - case 2: - x = baseX - a; - z = baseZ + c; - y = baseY + b; - break; - //Things get odd if the block faces up or down... - case 1: - x = baseX + a; - z = baseZ + b; - y = baseY - c; - break;//similar to 3 - case 0: - x = baseX - a; - z = baseZ - b; - y = baseY + c; - break;//similar to 2 - default: - return new String[]{"Invalid rotation"}; - } - - //that must be here since in some cases other axis (b,c) controls y - if (y < 0 || y >= 256) { - return new String[]{"Invalid position"}; - } - - //Check block - Block block = world.getBlock(x, y, z); - int meta = world.getBlockMetadata(x, y, z); - - if (!block.hasTileEntity(meta) && block.getMaterial() != Material.air) { - boolean err = true; - ItemStack is = new ItemStack(block, 1, meta); - for (int i = 0; i < array.length; i++) { - if (array[i] == null) { - array[i] = is; - err = false; - break; - } else if (is.getItem() == array[i].getItem() && is.getItemDamage() == array[i].getItemDamage()) { - err = false; - break; - } - } - if (err) { - return new String[]{"Too much different blocks"}; - } - } - - a++;//block in horizontal layer - } - b--;//horizontal layer - } - c++;//depth - } - - List output = new ArrayList<>(); - - output.add("Offsets: " + horizontalOffset + ' ' + verticalOffset + ' ' + depthOffset); - output.add("Sizes: " + horizontalSize + ' ' + verticalSize + ' ' + depthSize); - output.add(""); - - output.add("ID[]: Name[]"); - output.add(""); - for (int i = 0; i < array.length; i++) { - if (array[i] != null) { - output.add(i + ": " + array[i].getDisplayName()); - } - } - output.add(""); - output.add("ID[]: Block[] BlockMetaID[]"); - output.add(""); - for (int i = 0; i < array.length; i++) { - if (array[i] != null) { - output.add(i + ": " + array[i].getItem().getUnlocalizedName() + ' ' + array[i].getItemDamage()); - } - } - output.add(""); - output.add("String[][]"); - //perform your duties - #2 - write strings - output.add("{"); - c = -depthOffset; - for (int cz = 0; cz < depthSize; cz++) {//front to back - b = verticalOffset; - StringBuilder addMe = new StringBuilder().append('{'); - for (int by = 0; by < verticalSize; by++) {//top to bottom - a = -horizontalOffset; - StringBuilder line = new StringBuilder(); - for (int az = 0; az < horizontalSize; az++) {//left to right - //get x y z from rotation - switch (facing) {//translation - case 4: - x = baseX + c; - z = baseZ + a; - y = baseY + b; - break; - case 3: - x = baseX + a; - z = baseZ - c; - y = baseY + b; - break; - case 5: - x = baseX - c; - z = baseZ - a; - y = baseY + b; - break; - case 2: - x = baseX - a; - z = baseZ + c; - y = baseY + b; - break; - //Things get odd if the block faces up or down... - case 1: - x = baseX + a; - z = baseZ + b; - y = baseY - c; - break;//similar to 3 - case 0: - x = baseX - a; - z = baseZ - b; - y = baseY + c; - break;//similar to 2 - default: - return new String[]{"Invalid rotation"}; - } - - //Check block - Block block = world.getBlock(x, y, z); - int meta = world.getBlockMetadata(x, y, z); - - if (a == 0 && b == 0 && c == 0) { - line.append('.'); - } else if (block.getMaterial() == Material.air) { - line.append('-'); - } else if (block.hasTileEntity(meta)) { - line.append('*'); - } else { - ItemStack stack = new ItemStack(block, 1, meta); - String str = "?";//OH YEAH NPEs - for (int i = 0; i < array.length; i++) { - if (array[i] != null && stack.getItem() == array[i].getItem() && stack.getItemDamage() == array[i].getItemDamage()) { - str = Integer.toString(i); - break; - } - } - line.append(str); - } - a++;//block in horizontal layer - } - if (ignoreAir) { - StringBuilder builder = new StringBuilder(); - char temp = '@'; - for (char ch : line.toString().toCharArray()) { - if (ch == '-') { - temp += 1; - if (temp == '~') { - builder.append('~'); - temp = '@'; - } - } else { - if (temp > '@') { - builder.append(temp); - temp = '@'; - } - builder.append(ch); - } - } - while (builder.length() > 0 && builder.charAt(builder.length() - 1) == '~') { - builder.deleteCharAt(builder.length() - 1); - } - if (builder.length() == 0) { - builder.append("E,"); - } else { - builder.insert(0, '"'); - builder.append('"').append(','); - } - addMe.append(builder); - } else { - if (line.length() == 0) { - line.append("E,"); - } else { - line.insert(0, '"'); - line.append('"').append(','); - } - addMe.append(line); - } - b--;//horizontal layer - } - //region less verbose - addMe.append('}').append(','); - String builtStr = addMe.toString().replaceAll("(E,)+(?=})", E/*Remove Empty strings at end*/); - Matcher matcher = matchE_.matcher(builtStr); - while (matcher.find()) { - byte lenEE = (byte) (matcher.group(1).length() >> 1); - builtStr = builtStr.replaceFirst("E,(E,)+", "\"\\\\u00" + String.format("%02X", lenEE - 1) + "\","); - //builtStr=builtStr.replaceFirst("E,(E,)+\"","\"\\\\u00"+String.format("%02X", lenEE)); - } - //endregion - output.add(builtStr); - c++;//depth - } - output.add("}"); - return output.toArray(new String[0]); - } - - private static final Pattern matchE_ = Pattern.compile("(E,(E,)+)"); - - public static boolean isInputEqual(boolean aDecreaseStacksizeBySuccess, boolean aDontCheckStackSizes, FluidStack[] requiredFluidInputs, ItemStack[] requiredInputs, FluidStack[] givenFluidInputs, ItemStack... givenInputs) { - if (!GregTech_API.sPostloadFinished) { - return false; - } - if (requiredFluidInputs.length > 0 && givenFluidInputs == null) { - return false; - } - int amt; - for (FluidStack tFluid : requiredFluidInputs) { - if (tFluid != null) { - boolean temp = true; - amt = tFluid.amount; - for (FluidStack aFluid : givenFluidInputs) { - if (aFluid != null && aFluid.isFluidEqual(tFluid)) { - if (aDontCheckStackSizes) { - temp = false; - break; - } - amt -= aFluid.amount; - if (amt < 1) { - temp = false; - break; - } - } - } - if (temp) { - return false; - } - } - } - - if (requiredInputs.length > 0 && givenInputs == null) { - return false; - } - for (ItemStack tStack : requiredInputs) { - if (tStack != null) { - amt = tStack.stackSize; - boolean temp = true; - for (ItemStack aStack : givenInputs) { - if (GT_Utility.areUnificationsEqual(aStack, tStack, true) || GT_Utility.areUnificationsEqual(GT_OreDictUnificator.get(false, aStack), tStack, true)) { - if (aDontCheckStackSizes) { - temp = false; - break; - } - amt -= aStack.stackSize; - if (amt < 1) { - temp = false; - break; - } - } - } - if (temp) { - return false; - } - } - } - - if (aDecreaseStacksizeBySuccess) { - if (givenFluidInputs != null) { - for (FluidStack tFluid : requiredFluidInputs) { - if (tFluid != null) { - amt = tFluid.amount; - for (FluidStack aFluid : givenFluidInputs) { - if (aFluid != null && aFluid.isFluidEqual(tFluid)) { - if (aDontCheckStackSizes) { - aFluid.amount -= amt; - break; - } - if (aFluid.amount < amt) { - amt -= aFluid.amount; - aFluid.amount = 0; - } else { - aFluid.amount -= amt; - break; - } - } - } - } - } - } - - if (givenInputs != null) { - for (ItemStack tStack : requiredInputs) { - if (tStack != null) { - amt = tStack.stackSize; - for (ItemStack aStack : givenInputs) { - if (GT_Utility.areUnificationsEqual(aStack, tStack, true) || GT_Utility.areUnificationsEqual(GT_OreDictUnificator.get(false, aStack), tStack, true)) { - if (aDontCheckStackSizes) { - aStack.stackSize -= amt; - break; - } - if (aStack.stackSize < amt) { - amt -= aStack.stackSize; - aStack.stackSize = 0; - } else { - aStack.stackSize -= amt; - break; - } - } - } - } - } - } - } - - return true; - } - - public static String getUniqueIdentifier(ItemStack is) { - return GameRegistry.findUniqueIdentifierFor(is.getItem()).modId + ':' + is.getUnlocalizedName(); - } - - public static byte getTier(long l) { - byte b = -1; - - do { - ++b; - if (b >= CommonValues.V.length) { - return b; - } - } while (l > CommonValues.V[b]); - - return b; - } - - public static String[] splitButDifferent(String string, String delimiter) { - String[] strings = new String[StringUtils.countMatches(string, delimiter) + 1]; - int lastEnd = 0; - for (int i = 0; i < strings.length - 1; i++) { - int nextEnd = string.indexOf(delimiter, lastEnd); - strings[i] = string.substring(lastEnd, nextEnd); - lastEnd = nextEnd + delimiter.length(); - } - strings[strings.length - 1] = string.substring(lastEnd); - return strings; - } - - public static String[] infoFromNBT(NBTTagCompound nbt) { - String[] strings = new String[nbt.getInteger("i")]; - for (int i = 0; i < strings.length; i++) { - strings[i] = nbt.getString(Integer.toString(i)); - } - return strings; - } - - public static boolean areBitsSet(int setBits, int testedValue) { - return (testedValue & setBits) == setBits; - } - - public static class ItemStack_NoNBT implements Comparable { - public final Item mItem; - public final int mStackSize; - public final int mMetaData; - - public ItemStack_NoNBT(Item aItem, long aStackSize, long aMetaData) { - this.mItem = aItem; - this.mStackSize = (byte) ((int) aStackSize); - this.mMetaData = (short) ((int) aMetaData); - } - - public ItemStack_NoNBT(ItemStack aStack) { - if (aStack == null) { - mItem = null; - mStackSize = mMetaData = 0; - } else { - mItem = aStack.getItem(); - mStackSize = aStack.stackSize; - mMetaData = Items.feather.getDamage(aStack); - } - } - - @Override - public int compareTo(ItemStack_NoNBT o) { - if (mMetaData > o.mMetaData) return 1; - if (mMetaData < o.mMetaData) return -1; - if (mStackSize > o.mStackSize) return 1; - if (mStackSize < o.mStackSize) return -1; - if (mItem != null && o.mItem != null) - return mItem.getUnlocalizedName().compareTo(o.mItem.getUnlocalizedName()); - if (mItem == null && o.mItem == null) return 0; - if (mItem != null) return 1; - return -1; - } - - @Override - public boolean equals(Object aStack) { - return aStack == this || - (aStack instanceof ItemStack_NoNBT && - ((mItem == ((ItemStack_NoNBT) aStack).mItem) || ((ItemStack_NoNBT) aStack).mItem.getUnlocalizedName().equals(this.mItem.getUnlocalizedName())) && - ((ItemStack_NoNBT) aStack).mStackSize == this.mStackSize && - ((ItemStack_NoNBT) aStack).mMetaData == this.mMetaData); - } - - @Override - public int hashCode() { - return (mItem != null ? mItem.getUnlocalizedName().hashCode() : 0) ^ (mMetaData << 16) ^ (mStackSize << 24); - } - - @Override - public String toString() { - return Integer.toString(hashCode()) + ' ' + (mItem == null ? "null" : mItem.getUnlocalizedName()) + ' ' + mMetaData + ' ' + mStackSize; - } - } - - public static void setTier(int tier,Object me){ - try{ - Field field=GT_MetaTileEntity_TieredMachineBlock.class.getField("mTier"); - field.setAccessible(true); - field.set(me,(byte)tier); - }catch (Exception e){ - //e.printStackTrace(); - } - } - - public static StringBuilder receiveString(StringBuilder previousValue, int startIndex, int index, int value){ - int sizeReq=index-startIndex; - if(value==0){ - previousValue.setLength(Math.min(previousValue.length(),sizeReq)); - }else { - previousValue.setLength(Math.max(previousValue.length(),sizeReq)); - previousValue.setCharAt(sizeReq,(char)value); - } - return previousValue; - } - - @Deprecated - public static double receiveDouble(double previousValue, int startIndex, int index, int value){ - return Double.longBitsToDouble(receiveLong(Double.doubleToLongBits(previousValue),startIndex,index,value)); - } - - public static long receiveLong(long previousValue, int startIndex, int index, int value){ - value &=0xFFFF; - switch (index-startIndex){ - case 0: - previousValue&= 0xFFFF_FFFF_FFFF_0000L; - previousValue|=value; - break; - case 1: - previousValue&=0xFFFF_FFFF_0000_FFFFL; - previousValue|=value<<16; - break; - case 2: - previousValue&=0xFFFF_0000_FFFF_FFFFL; - previousValue|=(long)value<<32; - break; - case 3: - previousValue&=0x0000_FFFF_FFFF_FFFFL; - previousValue|=(long)value<<48; - break; - } - return previousValue; - } - - public static void sendString(StringBuilder string,Container container, ICrafting crafter,int startIndex){ - for (int i = 0; i < string.length(); i++) { - crafter.sendProgressBarUpdate(container,startIndex++,string.charAt(i)); - } - crafter.sendProgressBarUpdate(container,startIndex,0); - } - - public static void sendDouble(double value,Container container, ICrafting crafter,int startIndex){ - sendLong(Double.doubleToLongBits(value),container,crafter,startIndex); - } - - public static void sendLong(long value,Container container, ICrafting crafter,int startIndex){ - crafter.sendProgressBarUpdate(container, startIndex++, (int)(value & 0xFFFFL)); - crafter.sendProgressBarUpdate(container, startIndex++, (int)((value & 0xFFFF0000L)>>>16)); - crafter.sendProgressBarUpdate(container, startIndex++, (int)((value & 0xFFFF00000000L)>>>32)); - crafter.sendProgressBarUpdate(container, startIndex, (int)((value & 0xFFFF000000000000L)>>>48)); - } - - @Deprecated - public static float receiveFloat(float previousValue, int startIndex, int index, int value){ - return Float.intBitsToFloat(receiveInteger(Float.floatToIntBits(previousValue),startIndex,index,value)); - } - - public static int receiveInteger(int previousValue, int startIndex, int index, int value){ - value &=0xFFFF; - switch (index-startIndex){ - case 0: - previousValue&= 0xFFFF_0000; - previousValue|=value; - break; - case 1: - previousValue&=0x0000_FFFF; - previousValue|=value<<16; - break; - } - return previousValue; - } - - public static void sendFloat(float value,Container container, ICrafting crafter,int startIndex){ - sendInteger(Float.floatToIntBits(value),container,crafter,startIndex); - } - - public static void sendInteger(int value,Container container, ICrafting crafter,int startIndex){ - crafter.sendProgressBarUpdate(container, startIndex++, (int)(value & 0xFFFFL)); - crafter.sendProgressBarUpdate(container, startIndex, (value & 0xFFFF0000)>>>16); - } - - public static String doubleToString(double value){ - if(value==(long)value){ - return Long.toString((long)value); - } - return Double.toString(value); - } - - public static boolean checkChunkExist(World world, ChunkCoordIntPair chunk){ - int x=chunk.getCenterXPos(); - int z=chunk.getCenterZPosition(); - return world.checkChunksExist(x, 0, z, x, 0, z); - } - - public static NBTTagCompound getPlayerData(UUID uuid1,UUID uuid2,String extension) { - try { - if (FMLCommonHandler.instance().getEffectiveSide().isServer()) { - if (uuid1 != null && uuid2!=null) { - IPlayerFileData playerNBTManagerObj = MinecraftServer.getServer().worldServerForDimension(0).getSaveHandler().getSaveHandler(); - SaveHandler sh = (SaveHandler)playerNBTManagerObj; - File dir = ObfuscationReflectionHelper.getPrivateValue(SaveHandler.class, sh, new String[]{"playersDirectory", "field_75771_c"}); - String id1=uuid1.toString(); - NBTTagCompound tagCompound=read(new File(dir, id1 + "."+extension)); - if(tagCompound!=null){ - return tagCompound; - } - tagCompound=readBackup(new File(dir, id1 + "."+extension+"_bak")); - if(tagCompound!=null){ - return tagCompound; - } - String id2=uuid2.toString(); - tagCompound=read(new File(dir, id2 + "."+extension)); - if(tagCompound!=null){ - return tagCompound; - } - tagCompound=readBackup(new File(dir, id2 + "."+extension+"_bak")); - if(tagCompound!=null){ - return tagCompound; - } - } - } - } catch (Exception ignored) {} - return new NBTTagCompound(); - } - - public static void savePlayerFile(EntityPlayer player,String extension, NBTTagCompound data) { - try { - if (FMLCommonHandler.instance().getEffectiveSide().isServer()) { - if (player != null) { - IPlayerFileData playerNBTManagerObj = MinecraftServer.getServer().worldServerForDimension(0).getSaveHandler().getSaveHandler(); - SaveHandler sh = (SaveHandler)playerNBTManagerObj; - File dir = ObfuscationReflectionHelper.getPrivateValue(SaveHandler.class, sh, new String[]{"playersDirectory", "field_75771_c"}); - String id1=player.getUniqueID().toString(); - write(new File(dir, id1 + "."+extension),data); - write(new File(dir, id1 + "."+extension+"_bak"),data); - String id2=UUID.nameUUIDFromBytes(player.getCommandSenderName().getBytes(forName("UTF-8"))).toString(); - write(new File(dir, id2 + "."+extension),data); - write(new File(dir, id2 + "."+extension+"_bak"),data); - } - } - } catch (Exception ignored) {} - } - - private static NBTTagCompound read(File file){ - if (file != null && file.exists()) { - try(FileInputStream fileInputStream= new FileInputStream(file)) { - return CompressedStreamTools.readCompressed(fileInputStream); - } catch (Exception var9) { - TecTech.LOGGER.error("Cannot read NBT File: "+file.getAbsolutePath()); - } - } - return null; - } - - private static NBTTagCompound readBackup(File file){ - if (file != null && file.exists()) { - try(FileInputStream fileInputStream= new FileInputStream(file)) { - return CompressedStreamTools.readCompressed(fileInputStream); - } catch (Exception var9) { - TecTech.LOGGER.error("Cannot read NBT File: "+file.getAbsolutePath()); - return new NBTTagCompound(); - } - } - return null; - } - - private static void write(File file,NBTTagCompound tagCompound){ - if (file != null) { - if(tagCompound==null){ - if(file.exists()) file.delete(); - }else { - try(FileOutputStream fileOutputStream= new FileOutputStream(file)) { - CompressedStreamTools.writeCompressed(tagCompound,fileOutputStream); - } catch (Exception var9) { - TecTech.LOGGER.error("Cannot write NBT File: "+file.getAbsolutePath()); - } - } - } - } - - public static AxisAlignedBB fromChunkCoordIntPair(ChunkCoordIntPair chunkCoordIntPair){ - int x=chunkCoordIntPair.chunkXPos<<4; - int z=chunkCoordIntPair.chunkZPos<<4; - return AxisAlignedBB.getBoundingBox(x,-128,z,x+16,512,z+16); - } - - public static AxisAlignedBB fromChunk(Chunk chunk){ - int x=chunk.xPosition<<4; - int z=chunk.zPosition<<4; - return AxisAlignedBB.getBoundingBox(x,-128,z,x+16,512,z+16); - } -} diff --git a/src/main/java/com/github/technus/tectech/Vec3pos.java b/src/main/java/com/github/technus/tectech/Vec3pos.java deleted file mode 100644 index eb694813da..0000000000 --- a/src/main/java/com/github/technus/tectech/Vec3pos.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.github.technus.tectech; - -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; - -/** - * Created by Tec on 05.04.2017. - */ -public class Vec3pos implements Comparable { - public final int x, z; - public final short y; - - public Vec3pos(int x, short y, int z) { - this.x = x; - this.y = y; - this.z = z; - } - - public Vec3pos(IGregTechTileEntity te) { - x = te.getXCoord(); - y = te.getYCoord(); - z = te.getZCoord(); - } - - @Override - public int compareTo(Vec3pos o) { - int tmp=y-o.y; - if (tmp!=0) { - return tmp; - } - tmp=x-o.x; - if (tmp!=0) { - return tmp; - } - return z-o.z; - } - - @Override - public boolean equals(Object obj) { - if(obj instanceof Vec3pos){ - Vec3pos v=(Vec3pos) obj; - return x==v.x && z==v.z && y==v.y; - } - return false; - } - - @Override - public int hashCode() { - return x*524288+z*256+y; - } -} diff --git a/src/main/java/com/github/technus/tectech/XSTR.java b/src/main/java/com/github/technus/tectech/XSTR.java deleted file mode 100644 index f5ff457fe1..0000000000 --- a/src/main/java/com/github/technus/tectech/XSTR.java +++ /dev/null @@ -1,278 +0,0 @@ -package com.github.technus.tectech; -/* - A subclass of java.util.random that implements the Xorshift random number - generator -

- - it is 30% faster than the generator from Java's library - it produces - random sequences of higher quality than java.util.Random - this class also - provides a clone() function -

- Usage: XSRandom rand = new XSRandom(); //Instantiation x = rand.nextInt(); - //pull a random number -

- To use the class in legacy code, you may also instantiate an XSRandom object - and assign it to a java.util.Random object: java.util.Random rand = new - XSRandom(); -

- for an explanation of the algorithm, see - http://demesos.blogspot.com/2011/09/pseudo-random-number-generators.html - - @author Wilfried Elmenreich University of Klagenfurt/Lakeside Labs - * http://www.elmenreich.tk - *

- * This code is released under the GNU Lesser General Public License Version 3 - * http://www.gnu.org/licenses/lgpl-3.0.txt - */ - -import java.util.Random; -import java.util.concurrent.atomic.AtomicLong; - -/** - * XSTR - Xorshift ThermiteRandom - * Modified by Bogdan-G - * 03.06.2016 - * version 0.0.4 - */ -public class XSTR extends Random { - - private static final long serialVersionUID = 6208727693524452904L; - private long seed; - private static final long GAMMA = 0x9e3779b97f4a7c15L; - private static final int PROBE_INCREMENT = 0x9e3779b9; - private static final long SEEDER_INCREMENT = 0xbb67ae8584caa73bL; - private static final double DOUBLE_UNIT = 0x1.0p-53; // 1.0 / (1L << 53) - private static final float FLOAT_UNIT = 0x1.0p-24f; // 1.0f / (1 << 24) - private static final AtomicLong seedUniquifier = new AtomicLong(8682522807148012L); - public static final XSTR XSTR_INSTANCE=new XSTR(){ - @Override - public synchronized void setSeed(long seed) { - if(!Thread.currentThread().getStackTrace()[2].getClassName().equals(Random.class.getName())) { - throw new NoSuchMethodError("This is meant to be shared!, leave seed state alone!"); - } - } - }; - - /* - MODIFIED BY: Robotia - Modification: Implemented Random class seed generator - */ - - /** - * Creates a new pseudo random number generator. The seed is initialized to - * the current time, as if by - * setSeed(System.currentTimeMillis());. - */ - public XSTR() { - this(seedUniquifier() ^ System.nanoTime()); - } - - private static long seedUniquifier() { - // L'Ecuyer, "Tables of Linear Congruential Generators of - // Different Sizes and Good Lattice Structure", 1999 - while (true) { - long current = seedUniquifier.get(); - long next = current * 181783497276652981L; - if (seedUniquifier.compareAndSet(current, next)) { - return next; - } - } - } - - /** - * Creates a new pseudo random number generator, starting with the specified - * seed, using setSeed(seed);. - * - * @param seed the initial seed - */ - public XSTR(long seed) { - this.seed = seed; - } - - @Override - public boolean nextBoolean() { - return next(1) != 0; - } - - @Override - public double nextDouble() { - return (((long) next(26) << 27) + next(27)) * DOUBLE_UNIT; - } - - /** - * Returns the current state of the seed, can be used to clone the object - * - * @return the current seed - */ - public synchronized long getSeed() { - return seed; - } - - /** - * Sets the seed for this pseudo random number generator. As described - * above, two instances of the same random class, starting with the same - * seed, produce the same results, if the same methods are called. - * - * @param seed the new seed - */ - @Override - public synchronized void setSeed(long seed) { - this.seed = seed; - } - - /** - * @return Returns an XSRandom object with the same state as the original - */ - @Override - public XSTR clone() { - return new XSTR(getSeed()); - } - - /** - * Implementation of George Marsaglia's elegant Xorshift random generator - * 30% faster and better quality than the built-in java.util.random see also - * see http://www.javamex.com/tutorials/random_numbers/xorshift.shtml - * - * @param nbits will shift nbits bits - * @return next seed - */ - @Override - public int next(int nbits) { - long x = seed; - x ^= x << 21; - x ^= x >>> 35; - x ^= x << 4; - seed = x; - x &= (1L << nbits) - 1; - return (int) x; - } - - private boolean haveNextNextGaussian = false; - private double nextNextGaussian = 0; - - @Override - public synchronized double nextGaussian() { - // See Knuth, ACP, Section 3.4.1 Algorithm C. - if (haveNextNextGaussian) { - haveNextNextGaussian = false; - return nextNextGaussian; - } else { - double v1, v2, vs; - do { - v1 = 2 * nextDouble() - 1; // between -1 and 1 - v2 = 2 * nextDouble() - 1; // between -1 and 1 - vs = v1 * v1 + v2 * v2; - } while (vs >= 1 || vs == 0); - double multiplier = StrictMath.sqrt(-2 * StrictMath.log(vs) / vs); - nextNextGaussian = v2 * multiplier; - haveNextNextGaussian = true; - return v1 * multiplier; - } - } - - /** - * Returns a pseudorandom, uniformly distributed {@code int} value between 0 - * (inclusive) and the specified value (exclusive), drawn from this random - * number generator's sequence. The general contract of {@code nextInt} is - * that one {@code int} value in the specified range is pseudorandomly - * generated and returned. All {@code bound} possible {@code int} values are - * produced with (approximately) equal probability. The method - * {@code nextInt(int bound)} is implemented by class {@code Random} as if - * by: - *

 {@code
-     * public int nextInt(int bound) {
-     *   if (bound <= 0)
-     *     throw new IllegalArgumentException("bound must be positive");
-     *
-     *   if ((bound & -bound) == bound)  // i.e., bound is a power of 2
-     *     return (int)((bound * (long)next(31)) >> 31);
-     *
-     *   int bits, val;
-     *   do {
-     *       bits = next(31);
-     *       val = bits % bound;
-     *   } while (bits - val + (bound-1) < 0);
-     *   return val;
-     * }}
- * - *

The hedge "approx - * imately" is used in the foregoing description only because the next - * method is only approximately an unbiased source of independently chosen - * bits. If it were a perfect source of randomly chosen bits, then the - * algorithm shown would choose {@code int} values from the stated range - * with perfect uniformity. - *

- * The algorithm is slightly tricky. It rejects values that would result in - * an uneven distribution (due to the fact that 2^31 is not divisible by n). - * The probability of a value being rejected depends on n. The worst case is - * n=2^30+1, for which the probability of a reject is 1/2, and the expected - * number of iterations before the loop terminates is 2. - *

- * The algorithm treats the case where n is a power of two specially: it - * returns the correct number of high-order bits from the underlying - * pseudo-random number generator. In the absence of special treatment, the - * correct number of low-order bits would be returned. Linear - * congruential pseudo-random number generators such as the one implemented - * by this class are known to have short periods in the sequence of values - * of their low-order bits. Thus, this special case greatly increases the - * length of the sequence of values returned by successive calls to this - * method if n is a small power of two. - * - * @param bound the upper bound (exclusive). Must be positive. - * @return the next pseudorandom, uniformly distributed {@code int} value - * between zero (inclusive) and {@code bound} (exclusive) from this random - * number generator's sequence - * @throws IllegalArgumentException if bound is not positive - * @since 1.2 - */ - @Override - public int nextInt(int bound) { - //if (bound <= 0) { - //throw new RuntimeException("BadBound"); - //} - - /*int r = next(31); - int m = bound - 1; - if ((bound & m) == 0) // i.e., bound is a power of 2 - { - r = (int) ((bound * (long) r) >> 31); - } else { - for (int u = r; - u - (r = u % bound) + m < 0; - u = next(31)) - ; - } - return r;*/ - //speedup, new nextInt ~+40% - long last = seed ^ seed << 21; - last ^= last >>> 35; - last ^= last << 4; - seed = last; - int out = (int) last % bound; - return out < 0 ? -out : out; - } - - @Override - public int nextInt() { - return next(32); - } - - @Override - public float nextFloat() { - return next(24) * FLOAT_UNIT; - } - - @Override - public long nextLong() { - // it's okay that the bottom word remains signed. - return ((long) next(32) << 32) + next(32); - } - - @Override - public void nextBytes(byte[] bytes_arr) { - for (int iba = 0, lenba = bytes_arr.length; iba < lenba; ) { - for (int rndba = nextInt(), nba = Math.min(lenba - iba, Integer.SIZE / Byte.SIZE); nba-- > 0; rndba >>= Byte.SIZE) { - bytes_arr[iba++] = (byte) rndba; - } - } - } -} \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/NoDreamCraftMachineLoader.java b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/NoDreamCraftMachineLoader.java index adf5d37876..798ffec36c 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/NoDreamCraftMachineLoader.java +++ b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/NoDreamCraftMachineLoader.java @@ -2,7 +2,7 @@ package com.github.technus.tectech.compatibility.dreamcraft; import com.github.technus.tectech.Reference; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.thing.CustomItemList; import com.github.technus.tectech.thing.metaTileEntity.single.GT_MetaTileEntity_TT_Transformer; import com.github.technus.tectech.thing.metaTileEntity.single.GT_MetaTileEntity_WetTransformer; diff --git a/src/main/java/com/github/technus/tectech/compatibility/openComputers/AvrArchitecture.java b/src/main/java/com/github/technus/tectech/compatibility/openComputers/AvrArchitecture.java index fcbb65d609..2842a71df3 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/openComputers/AvrArchitecture.java +++ b/src/main/java/com/github/technus/tectech/compatibility/openComputers/AvrArchitecture.java @@ -8,7 +8,7 @@ import com.github.technus.avrClone.instructions.exceptions.DelayEvent; import com.github.technus.avrClone.memory.EepromMemory; import com.github.technus.avrClone.memory.RemovableMemory; import com.github.technus.avrClone.memory.program.ProgramMemory; -import com.github.technus.tectech.Converter; +import com.github.technus.tectech.util.Converter; import com.github.technus.tectech.TecTech; import li.cil.oc.Settings; import li.cil.oc.api.Driver; diff --git a/src/main/java/com/github/technus/tectech/compatibility/openmodularturrets/blocks/turretbases/TurretBaseItemEM.java b/src/main/java/com/github/technus/tectech/compatibility/openmodularturrets/blocks/turretbases/TurretBaseItemEM.java index 97fc8132a2..ed4b72f094 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/openmodularturrets/blocks/turretbases/TurretBaseItemEM.java +++ b/src/main/java/com/github/technus/tectech/compatibility/openmodularturrets/blocks/turretbases/TurretBaseItemEM.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.compatibility.openmodularturrets.blocks.turretbases; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemBlock; diff --git a/src/main/java/com/github/technus/tectech/compatibility/openmodularturrets/blocks/turretheads/TurretHeadItemEM.java b/src/main/java/com/github/technus/tectech/compatibility/openmodularturrets/blocks/turretheads/TurretHeadItemEM.java index 422b931df5..f4ad25f053 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/openmodularturrets/blocks/turretheads/TurretHeadItemEM.java +++ b/src/main/java/com/github/technus/tectech/compatibility/openmodularturrets/blocks/turretheads/TurretHeadItemEM.java @@ -10,7 +10,7 @@ import openmodularturrets.handler.ConfigHandler; import java.text.DecimalFormat; import java.util.List; -import static com.github.technus.tectech.CommonValues.TEC_MARK_EM; +import static com.github.technus.tectech.util.CommonValues.TEC_MARK_EM; import static net.minecraft.util.StatCollector.translateToLocal; /** diff --git a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/elementalMatter/definitions/dComplexAspectDefinition.java b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/elementalMatter/definitions/dComplexAspectDefinition.java index 8961215354..070a05d7e9 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/elementalMatter/definitions/dComplexAspectDefinition.java +++ b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/elementalMatter/definitions/dComplexAspectDefinition.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.definitions; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalDecay; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalDefinitionStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalDefinitionStack; diff --git a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaDequantizer.java b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaDequantizer.java index 4074f2d6db..ab6b723e09 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaDequantizer.java +++ b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaDequantizer.java @@ -1,13 +1,13 @@ package com.github.technus.tectech.compatibility.thaumcraft.thing.metaTileEntity.multi; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.definitions.ePrimalAspectDefinition; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.thing.casing.TT_Container_Casings; -import com.github.technus.tectech.thing.metaTileEntity.IConstructable; +import com.github.technus.tectech.mechanics.constructible.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_quantizer; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; @@ -23,8 +23,8 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.util.ForgeDirection; -import static com.github.technus.tectech.CommonValues.V; -import static com.github.technus.tectech.Util.StructureBuilderExtreme; +import static com.github.technus.tectech.util.CommonValues.V; +import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.compatibility.thaumcraft.thing.metaTileEntity.multi.EssentiaCompat.essentiaContainerCompat; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -139,7 +139,7 @@ public class GT_MetaTileEntity_EM_essentiaDequantizer extends GT_MetaTileEntity_ iGregTechTileEntity.getWorld().setBlock(iGregTechTileEntity.getXCoord() + xDir, iGregTechTileEntity.getYCoord() + yDir, iGregTechTileEntity.getZCoord() + zDir, TT_Container_Casings.sHintCasingsTT, 12, 2); } } - StructureBuilderExtreme(shape, blockType, blockMeta, 1, 1, 0, iGregTechTileEntity, this, hintsOnly); + StructureBuilderExtreme(shape, blockType, blockMeta, 1, 1, 0, iGregTechTileEntity, getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaQuantizer.java b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaQuantizer.java index 0caf4be6d6..309d029b8e 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaQuantizer.java +++ b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaQuantizer.java @@ -1,13 +1,13 @@ package com.github.technus.tectech.compatibility.thaumcraft.thing.metaTileEntity.multi; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.definitions.ePrimalAspectDefinition; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.thing.casing.TT_Container_Casings; -import com.github.technus.tectech.thing.metaTileEntity.IConstructable; +import com.github.technus.tectech.mechanics.constructible.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_quantizer; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; @@ -23,8 +23,8 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.util.ForgeDirection; -import static com.github.technus.tectech.CommonValues.V; -import static com.github.technus.tectech.Util.StructureBuilderExtreme; +import static com.github.technus.tectech.util.CommonValues.V; +import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.compatibility.thaumcraft.thing.metaTileEntity.multi.EssentiaCompat.essentiaContainerCompat; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -143,7 +143,7 @@ public class GT_MetaTileEntity_EM_essentiaQuantizer extends GT_MetaTileEntity_Mu iGregTechTileEntity.getWorld().setBlock(iGregTechTileEntity.getXCoord() + xDir, iGregTechTileEntity.getYCoord() + yDir, iGregTechTileEntity.getZCoord() + zDir, TT_Container_Casings.sHintCasingsTT, 12, 2); } } - StructureBuilderExtreme(shape, blockType, blockMeta, 1, 1, 0, iGregTechTileEntity, this, hintsOnly); + StructureBuilderExtreme(shape, blockType, blockMeta, 1, 1, 0, iGregTechTileEntity, getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/loader/MainLoader.java b/src/main/java/com/github/technus/tectech/loader/MainLoader.java index a2384eac61..f7bec9adc0 100644 --- a/src/main/java/com/github/technus/tectech/loader/MainLoader.java +++ b/src/main/java/com/github/technus/tectech/loader/MainLoader.java @@ -38,7 +38,7 @@ import java.util.Collection; import java.util.HashMap; import java.util.HashSet; -import static com.github.technus.tectech.CommonValues.*; +import static com.github.technus.tectech.util.CommonValues.*; import static com.github.technus.tectech.TecTech.*; import static com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.definitions.AspectDefinitionCompat.aspectDefinitionCompat; import static com.github.technus.tectech.compatibility.thaumcraft.thing.metaTileEntity.multi.EssentiaCompat.essentiaContainerCompat; @@ -126,7 +126,7 @@ public final class MainLoader { progressBarPostLoad.step("Dreamcraft Compatibility"); if(Loader.isModLoaded(Reference.DREAMCRAFT)){ try { - Class clazz = Class.forName("com.dreammaster.gthandler.casings.GT_Container_CasingsNH"); + Class clazz = Class.forName("com.dreammaster.gthandler.casings.GT_Container_CasingsNH"); TT_Container_Casings.sBlockCasingsNH = (Block)clazz.getField("sBlockCasingsNH").get(null); if(TT_Container_Casings.sBlockCasingsNH==null){ diff --git a/src/main/java/com/github/technus/tectech/loader/NetworkDispatcher.java b/src/main/java/com/github/technus/tectech/loader/NetworkDispatcher.java index 88b237c003..7d35a216f0 100644 --- a/src/main/java/com/github/technus/tectech/loader/NetworkDispatcher.java +++ b/src/main/java/com/github/technus/tectech/loader/NetworkDispatcher.java @@ -3,9 +3,9 @@ package com.github.technus.tectech.loader; import com.github.technus.tectech.mechanics.data.ChunkDataMessage; import com.github.technus.tectech.mechanics.data.PlayerDataMessage; import com.github.technus.tectech.mechanics.data.RendererMessage; -import com.github.technus.tectech.thing.metaTileEntity.RotationMessage; +import com.github.technus.tectech.mechanics.alignment.AlignmentMessage; import com.github.technus.tectech.thing.metaTileEntity.hatch.TextParametersMessage; -import com.github.technus.tectech.thing.metaTileEntity.pipe.PipeActivityMessage; +import com.github.technus.tectech.mechanics.pipe.PipeActivityMessage; import static com.github.technus.tectech.Reference.MODID; @@ -23,8 +23,8 @@ public class NetworkDispatcher extends eu.usrv.yamcore.network.PacketDispatcher registerMessage(PipeActivityMessage.ServerHandler.class, PipeActivityMessage.PipeActivityQuery.class); registerMessage(PipeActivityMessage.ClientHandler.class, PipeActivityMessage.PipeActivityData.class); - registerMessage(RotationMessage.ServerHandler.class, RotationMessage.RotationQuery.class); - registerMessage(RotationMessage.ClientHandler.class, RotationMessage.RotationData.class); + registerMessage(AlignmentMessage.ServerHandler.class, AlignmentMessage.AlignmentQuery.class); + registerMessage(AlignmentMessage.ClientHandler.class, AlignmentMessage.AlignmentData.class); registerMessage(ChunkDataMessage.ServerHandler.class, ChunkDataMessage.ChunkDataQuery.class); registerMessage(ChunkDataMessage.ClientHandler.class, ChunkDataMessage.ChunkDataData.class); diff --git a/src/main/java/com/github/technus/tectech/loader/recipe/BloodyRecipeLoader.java b/src/main/java/com/github/technus/tectech/loader/recipe/BloodyRecipeLoader.java index a1d400ed54..70f64d3719 100644 --- a/src/main/java/com/github/technus/tectech/loader/recipe/BloodyRecipeLoader.java +++ b/src/main/java/com/github/technus/tectech/loader/recipe/BloodyRecipeLoader.java @@ -165,32 +165,32 @@ public class BloodyRecipeLoader implements Runnable { GT_ModHandler.addCraftingRecipe(CustomItemList.tM_TeslaPrimary_0.get(1), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[]{"WWW", "WwW", "WWW", - 'W', OrePrefixes.wireGt02.get(Materials.RedstoneAlloy)}); + 'W', OrePrefixes.wireGt02.get(Materials.Tin)}); //Tesla Primary Coils T1 GT_ModHandler.addCraftingRecipe(CustomItemList.tM_TeslaPrimary_1.get(1), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[]{"WWW", "WwW", "WWW", - 'W', OrePrefixes.wireGt02.get(Materials.SuperconductorMV)}); + 'W', OrePrefixes.wireGt02.get(Materials.Copper)}); //Tesla Primary Coils T2 GT_ModHandler.addCraftingRecipe(CustomItemList.tM_TeslaPrimary_2.get(1), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[]{"WWW", "WwW", "WWW", - 'W', OrePrefixes.wireGt02.get(Materials.SuperconductorHV)}); + 'W', OrePrefixes.wireGt02.get(Materials.Silver)}); //Tesla Primary Coils T3 GT_ModHandler.addCraftingRecipe(CustomItemList.tM_TeslaPrimary_3.get(1), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[]{"WWW", "WwW", "WWW", - 'W', OrePrefixes.wireGt02.get(Materials.SuperconductorEV)}); + 'W', OrePrefixes.wireGt02.get(Materials.Aluminium)}); //Tesla Primary Coils T4 GT_ModHandler.addCraftingRecipe(CustomItemList.tM_TeslaPrimary_4.get(1), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[]{"WWW", "WwW", "WWW", - 'W', OrePrefixes.wireGt02.get(Materials.SuperconductorIV)}); + 'W', OrePrefixes.wireGt02.get(Materials.Platinum)}); //Tesla Primary Coils T5 GT_ModHandler.addCraftingRecipe(CustomItemList.tM_TeslaPrimary_5.get(1), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[]{"WWW", "WwW", "WWW", - 'W', OrePrefixes.wireGt02.get(Materials.SuperconductorLuV)}); + 'W', OrePrefixes.wireGt02.get(Materials.Superconductor)}); //endregion @@ -1114,7 +1114,7 @@ public class BloodyRecipeLoader implements Runnable { }, Materials.Epoxid.getMolten(288), CustomItemList.teslaComponent.getWithDamage(1, 0), 320, 30); //Tesla Winding Components Ultimate GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorLuV, 16), + GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Superconductor, 16), GT_OreDictUnificator.get(OrePrefixes.ring, Materials.NickelZincFerrite, 8), }, Materials.Epoxid.getMolten(576), CustomItemList.teslaComponent.getWithDamage(1, 1), 320, 7680); @@ -1125,35 +1125,35 @@ public class BloodyRecipeLoader implements Runnable { //LV Tesla Capacitor GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Tin, 4), - GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 4), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BatteryAlloy, 4), GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 8), GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Silicone, 8), }, Materials.Epoxid.getMolten(72), CustomItemList.teslaCapacitor.getWithDamage(1, 0), 320, 30); //MV Tesla Capacitor GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Copper, 4), - GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 6), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BatteryAlloy, 6), GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 12), GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Silicone, 12), }, Materials.Epoxid.getMolten(144), CustomItemList.teslaCapacitor.getWithDamage(1, 1), 320, 120); //HV Tesla Capacitor GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Gold, 4), - GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 8), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BatteryAlloy, 8), GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 16), GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Silicone, 16), }, Materials.Epoxid.getMolten(216), CustomItemList.teslaCapacitor.getWithDamage(1, 2), 320, 480); //EV Tesla Capacitor GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Aluminium, 4), - GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 10), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BatteryAlloy, 10), GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 20), GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Silicone, 20), }, Materials.Epoxid.getMolten(288), CustomItemList.teslaCapacitor.getWithDamage(1, 3), 320, 1920); //IV Tesla Capacitor GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Tungsten, 4), - GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 12), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BatteryAlloy, 12), GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 24), GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Silicone, 24), }, Materials.Epoxid.getMolten(360), CustomItemList.teslaCapacitor.getWithDamage(1, 4), 320, 7680); @@ -1208,19 +1208,19 @@ public class BloodyRecipeLoader implements Runnable { //LV Tesla Capacitor GT_Values.RA.addExtractorRecipe(CustomItemList.teslaCapacitor.getWithDamage(1, 0), - GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 4), 300, 2); + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BatteryAlloy, 4), 300, 2); //MV Tesla Capacitor GT_Values.RA.addExtractorRecipe(CustomItemList.teslaCapacitor.getWithDamage(1, 1), - GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 6), 300, 2); + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BatteryAlloy, 6), 300, 2); //HV Tesla Capacitor GT_Values.RA.addExtractorRecipe(CustomItemList.teslaCapacitor.getWithDamage(1, 2), - GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 8), 300, 2); + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BatteryAlloy, 8), 300, 2); //EV Tesla Capacitor GT_Values.RA.addExtractorRecipe(CustomItemList.teslaCapacitor.getWithDamage(1, 3), - GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 10), 300, 2); + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BatteryAlloy, 10), 300, 2); //IV Tesla Capacitor GT_Values.RA.addExtractorRecipe(CustomItemList.teslaCapacitor.getWithDamage(1, 4), - GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 12), 300, 2); + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BatteryAlloy, 12), 300, 2); //endregion diff --git a/src/main/java/com/github/technus/tectech/loader/thing/MachineLoader.java b/src/main/java/com/github/technus/tectech/loader/thing/MachineLoader.java index 9f87428bb5..9dd71df9eb 100644 --- a/src/main/java/com/github/technus/tectech/loader/thing/MachineLoader.java +++ b/src/main/java/com/github/technus/tectech/loader/thing/MachineLoader.java @@ -15,7 +15,7 @@ import cpw.mods.fml.common.Loader; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; -import static com.github.technus.tectech.CommonValues.V; +import static com.github.technus.tectech.util.CommonValues.V; import static com.github.technus.tectech.thing.CustomItemList.*; /** diff --git a/src/main/java/com/github/technus/tectech/loader/thing/ThingsLoader.java b/src/main/java/com/github/technus/tectech/loader/thing/ThingsLoader.java index 4596e8a2c8..7b432dbcb4 100644 --- a/src/main/java/com/github/technus/tectech/loader/thing/ThingsLoader.java +++ b/src/main/java/com/github/technus/tectech/loader/thing/ThingsLoader.java @@ -24,11 +24,11 @@ public class ThingsLoader implements Runnable { if(Textures.BlockIcons.casingTexturePages[tectechTexturePage1]==null) { Textures.BlockIcons.casingTexturePages[tectechTexturePage1] = new ITexture[128]; } + TecTech.LOGGER.info("Added texture page if was null"); if(!Loader.isModLoaded(Reference.DREAMCRAFT)){ - TecTech.LOGGER.info("Adding basic casings"); TT_Container_Casings.sBlockCasingsNH = new GT_Block_CasingsNH(); + TecTech.LOGGER.info("Adding basic casings"); } - TecTech.LOGGER.info("Added texture page if was null"); TT_Container_Casings.sBlockCasingsTT = new GT_Block_CasingsTT(); TecTech.LOGGER.info("Elemental Casing registered"); TT_Container_Casings.sBlockCasingsBA0 = new GT_Block_CasingsBA0(); diff --git a/src/main/java/com/github/technus/tectech/mechanics/alignment/AlignmentLimits.java b/src/main/java/com/github/technus/tectech/mechanics/alignment/AlignmentLimits.java new file mode 100644 index 0000000000..26a6d80dd8 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/alignment/AlignmentLimits.java @@ -0,0 +1,183 @@ +package com.github.technus.tectech.mechanics.alignment; + +import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; +import com.github.technus.tectech.mechanics.alignment.enumerable.Flip; +import com.github.technus.tectech.mechanics.alignment.enumerable.Rotation; +import net.minecraftforge.common.util.ForgeDirection; + +import java.util.Arrays; +import java.util.Optional; +import java.util.Random; +import java.util.function.Function; + +import static com.github.technus.tectech.mechanics.alignment.IAlignment.STATES_COUNT; + +public class AlignmentLimits implements IAlignmentLimits { + + protected final boolean[] validStates=new boolean[STATES_COUNT]; + + public AlignmentLimits() { + allowAll(); + } + + AlignmentLimits allowAll(){ + Arrays.fill(validStates,true); + return this; + } + + AlignmentLimits denyAll(){ + Arrays.fill(validStates,false); + return this; + } + + AlignmentLimits randomAll(Random random){ + for (int i = 0; i < validStates.length; i++) { + validStates[i]=random.nextBoolean(); + } + return this; + } + + AlignmentLimits deny(ExtendedFacing... deny){ + if(deny!=null){ + for (ExtendedFacing extendedFacing : deny) { + validStates[extendedFacing.getIndex()]=false; + } + } + return this; + } + + AlignmentLimits allow(ExtendedFacing... allow){ + if(allow!=null){ + for (ExtendedFacing extendedFacing : allow) { + validStates[extendedFacing.getIndex()]=false; + } + } + return this; + } + + AlignmentLimits deny(ForgeDirection... deny){ + if(deny!=null){ + for (ExtendedFacing value : ExtendedFacing.VALUES) { + for (ForgeDirection direction : deny) { + if (value.getDirection() == direction) { + validStates[value.getIndex()] = false; + break; + } + } + } + } + return this; + } + + AlignmentLimits allow(ForgeDirection... allow){ + if(allow!=null){ + for (ExtendedFacing value : ExtendedFacing.VALUES) { + for (ForgeDirection direction : allow) { + if (value.getDirection() == direction) { + validStates[value.getIndex()] = true; + break; + } + } + } + } + return this; + } + + AlignmentLimits deny(Rotation... deny){ + if(deny!=null){ + for (ExtendedFacing value : ExtendedFacing.VALUES) { + for (Rotation rotation : deny) { + if (value.getRotation() == rotation) { + validStates[value.getIndex()] = false; + break; + } + } + } + } + return this; + } + + AlignmentLimits allow(Rotation... allow){ + if(allow!=null){ + for (ExtendedFacing value : ExtendedFacing.VALUES) { + for (Rotation rotation : allow) { + if (value.getRotation() == rotation) { + validStates[value.getIndex()] = true; + break; + } + } + } + } + return this; + } + + AlignmentLimits deny(Flip... deny){ + if(deny!=null){ + for (ExtendedFacing value : ExtendedFacing.VALUES) { + for (Flip flip : deny) { + if (value.getFlip() == flip) { + validStates[value.getIndex()] = false; + break; + } + } + } + } + return this; + } + + AlignmentLimits allow(Flip... allow){ + if(allow!=null){ + for (ExtendedFacing value : ExtendedFacing.VALUES) { + for (Flip flip : allow) { + if (value.getFlip() == flip) { + validStates[value.getIndex()] = true; + break; + } + } + } + } + return this; + } + + AlignmentLimits predicateApply(Function> predicate){ + for (ExtendedFacing value : ExtendedFacing.VALUES) { + predicate.apply(value).ifPresent(bool->validStates[value.getIndex()]=bool); + } + return this; + } + + AlignmentLimits ensureDuplicates(){ + for (ExtendedFacing value : ExtendedFacing.VALUES) { + if(validStates[value.getIndex()]){ + validStates[value.getDuplicate().getIndex()]=true; + } + } + return this; + } + + /** + * Prefers rotation over flip, so both flip will get translated to opposite rotation and no flip + * @param flip the preferred flip to be used Horizontal or vertical + * @return this + */ + AlignmentLimits ensureNoDuplicates(Flip flip){ + if(flip==Flip.BOTH||flip==Flip.NONE){ + throw new IllegalArgumentException("Preffered Flip must be Horizontal or Vertical"); + } + flip=flip.getOpposite(); + for (ExtendedFacing value : ExtendedFacing.VALUES) { + if(validStates[value.getIndex()]){ + if(value.getFlip()==Flip.BOTH || value.getFlip()==flip){ + validStates[value.getIndex()]=false; + validStates[value.getDuplicate().getIndex()]=true; + } + } + } + return this; + } + + @Override + public boolean isNewExtendedFacingValid(ForgeDirection direction, Rotation rotation, Flip flip) { + return validStates[IAlignment.getAlignmentIndex(direction,rotation,flip)]; + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/alignment/AlignmentMessage.java b/src/main/java/com/github/technus/tectech/mechanics/alignment/AlignmentMessage.java new file mode 100644 index 0000000000..07a3e02c1f --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/alignment/AlignmentMessage.java @@ -0,0 +1,140 @@ +package com.github.technus.tectech.mechanics.alignment; + +import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; +import cpw.mods.fml.common.network.ByteBufUtils; +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import eu.usrv.yamcore.network.client.AbstractClientMessageHandler; +import eu.usrv.yamcore.network.server.AbstractServerMessageHandler; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.DimensionManager; + +public class AlignmentMessage implements IMessage { + int mPosX; + int mPosY; + int mPosZ; + int mPosD; + int mAlign; + + public AlignmentMessage() { + } + + private AlignmentMessage(GT_MetaTileEntity_MultiblockBase_EM metaTile) { + IGregTechTileEntity base=metaTile.getBaseMetaTileEntity(); + mPosX=base.getXCoord(); + mPosY=base.getYCoord(); + mPosZ=base.getZCoord(); + mPosD=base.getWorld().provider.dimensionId; + mAlign =metaTile.getExtendedFacing().getIndex(); + } + + private AlignmentMessage(World world, int x, int y, int z, IAlignment front) { + mPosX=x; + mPosY=y; + mPosZ=z; + mPosD=world.provider.dimensionId; + mAlign =front.getExtendedFacing().getIndex(); + } + + @Override + public void fromBytes(ByteBuf pBuffer) { + NBTTagCompound tTag = ByteBufUtils.readTag(pBuffer); + mPosX = tTag.getInteger("posx"); + mPosY = tTag.getInteger("posy"); + mPosZ = tTag.getInteger("posz"); + mPosD = tTag.getInteger("posd"); + mAlign = tTag.getInteger("rotf"); + } + + @Override + public void toBytes(ByteBuf pBuffer) { + NBTTagCompound tFXTag = new NBTTagCompound(); + tFXTag.setInteger("posx", mPosX); + tFXTag.setInteger("posy", mPosY); + tFXTag.setInteger("posz", mPosZ); + tFXTag.setInteger("posd", mPosD); + tFXTag.setInteger("rotf", mAlign); + + ByteBufUtils.writeTag(pBuffer, tFXTag); + } + + public static class AlignmentQuery extends AlignmentMessage { + public AlignmentQuery() { + } + + public AlignmentQuery(GT_MetaTileEntity_MultiblockBase_EM metaTile) { + super(metaTile); + } + + public AlignmentQuery(World world, int x, int y, int z, IAlignment front) { + super(world,x,y,z,front); + } + } + + public static class AlignmentData extends AlignmentMessage { + public AlignmentData() { + } + + private AlignmentData(AlignmentQuery query){ + mPosX=query.mPosX; + mPosY=query.mPosY; + mPosZ=query.mPosZ; + mPosD=query.mPosD; + mAlign =query.mAlign; + } + + public AlignmentData(GT_MetaTileEntity_MultiblockBase_EM metaTile) { + super(metaTile); + } + + public AlignmentData(World world, int x, int y, int z, IAlignment front) { + super(world,x,y,z,front); + } + } + + public static class ClientHandler extends AbstractClientMessageHandler { + @Override + public IMessage handleClientMessage(EntityPlayer pPlayer, AlignmentData pMessage, MessageContext pCtx) { + if(pPlayer.worldObj.provider.dimensionId==pMessage.mPosD){ + TileEntity te=pPlayer.worldObj.getTileEntity(pMessage.mPosX,pMessage.mPosY,pMessage.mPosZ); + if(te instanceof IGregTechTileEntity){ + IMetaTileEntity meta = ((IGregTechTileEntity) te).getMetaTileEntity(); + if(meta instanceof IAlignment){ + ((IAlignment) meta).setExtendedFacing(ExtendedFacing.byIndex(pMessage.mAlign)); + } + }else if (te instanceof IAlignment){ + ((IAlignment) te).setExtendedFacing(ExtendedFacing.byIndex(pMessage.mAlign)); + } + } + return null; + } + } + + public static class ServerHandler extends AbstractServerMessageHandler { + @Override + public IMessage handleServerMessage(EntityPlayer pPlayer, AlignmentQuery pMessage, MessageContext pCtx) { + World world= DimensionManager.getWorld(pMessage.mPosD); + if(world!=null) { + TileEntity te = world.getTileEntity(pMessage.mPosX, pMessage.mPosY, pMessage.mPosZ); + if (te instanceof IGregTechTileEntity) { + IMetaTileEntity meta = ((IGregTechTileEntity) te).getMetaTileEntity(); + if (meta instanceof IAlignment) { + pMessage.mAlign =((IAlignment) meta).getExtendedFacing().getIndex(); + return new AlignmentData(pMessage); + } + } else if (te instanceof IAlignment) { + pMessage.mAlign =((IAlignment) te).getExtendedFacing().getIndex(); + return new AlignmentData(pMessage); + } + } + return null; + } + } +} \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/mechanics/alignment/IAlignment.java b/src/main/java/com/github/technus/tectech/mechanics/alignment/IAlignment.java new file mode 100644 index 0000000000..d7b48f8865 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/alignment/IAlignment.java @@ -0,0 +1,173 @@ +package com.github.technus.tectech.mechanics.alignment; + +import com.github.technus.tectech.mechanics.alignment.enumerable.Direction; +import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; +import com.github.technus.tectech.mechanics.alignment.enumerable.Flip; +import com.github.technus.tectech.mechanics.alignment.enumerable.Rotation; +import net.minecraftforge.common.util.ForgeDirection; + +import java.util.Arrays; + +public interface IAlignment extends IAlignmentLimits { + int DIRECTIONS_COUNT= Direction.VALUES.length; + int ROTATIONS_COUNT= Rotation.VALUES.length; + int FLIPS_COUNT= Flip.VALUES.length; + int STATES_COUNT = ExtendedFacing.VALUES.length; + + static int getAlignmentIndex(ForgeDirection direction, Rotation rotation, Flip flip){ + return (direction.ordinal()*ROTATIONS_COUNT+rotation.getIndex())*FLIPS_COUNT+flip.getIndex(); + } + + default ForgeDirection getDirection(){ + return getExtendedFacing().getDirection(); + } + + default void setDirection(ForgeDirection direction){ + setExtendedFacing(getExtendedFacing().with(direction)); + } + + default Rotation getRotation(){ + return getExtendedFacing().getRotation(); + } + + default void setRotation(Rotation rotation){ + setExtendedFacing(getExtendedFacing().with(rotation)); + } + + default Flip getFlip(){ + return getExtendedFacing().getFlip(); + } + + default void setFlip(Flip flip){ + setExtendedFacing(getExtendedFacing().with(flip)); + } + + ExtendedFacing getExtendedFacing(); + + void setExtendedFacing(ExtendedFacing alignment); + + IAlignmentLimits getAlignmentLimits(); + + void setAlignmentLimits(IAlignmentLimits limits); + + default boolean toolSetDirection(ForgeDirection direction){ + if(direction==null || direction==ForgeDirection.UNKNOWN){ + for (int i = 0,j=getDirection().ordinal()+1, valuesLength = Direction.VALUES.length; i < valuesLength; i++) { + if(toolSetDirection(Direction.VALUES[j%valuesLength].getForgeDirection())){ + return true; + } + } + }else { + for (ExtendedFacing extendedFacing : ExtendedFacing.FOR_FACING.get(direction)) { + if(checkedSetExtendedFacing(extendedFacing)){ + return true; + } + } + } + return false; + } + + default boolean checkedSetDirection(ForgeDirection direction){ + if (isNewDirectionValid(direction)){ + setDirection(direction); + return true; + } + return false; + } + + default boolean toolSetRotation(Rotation rotation) { + if(rotation==null){ + int flips = Flip.VALUES.length; + int rotations = Rotation.VALUES.length; + for (int ii = 0,jj=getFlip().ordinal(); ii < flips; ii++) { + for (int i = 0,j=getRotation().ordinal()+1; i < rotations; i++) { + if(checkedSetExtendedFacing(ExtendedFacing.of(getDirection(),Rotation.VALUES[j%rotations],Flip.VALUES[jj%flips]))){ + return true; + } + } + } + return false; + }else { + return checkedSetRotation(rotation); + } + } + + default boolean checkedSetRotation(Rotation rotation){ + if (isNewRotationValid(rotation)){ + setRotation(rotation); + return true; + } + return false; + } + + default boolean toolSetFlip(Flip flip){ + if(flip==null){ + for (int i = 0,j=getFlip().ordinal()+1, valuesLength = Flip.VALUES.length; i < valuesLength; i++) { + if(toolSetFlip(Flip.VALUES[j%valuesLength])){ + return true; + } + } + return false; + }else { + return checkedSetFlip(flip); + } + } + + default boolean checkedSetFlip(Flip flip){ + if (isNewFlipValid(flip)){ + setFlip(flip); + return true; + } + return false; + } + + default boolean toolSetExtendedFacing(ExtendedFacing extendedFacing){ + if(extendedFacing==null){ + for (int i = 0,j=getExtendedFacing().ordinal()+1, valuesLength = ExtendedFacing.VALUES.length; i < valuesLength; i++) { + if(toolSetExtendedFacing(ExtendedFacing.VALUES[j%valuesLength])){ + return true; + } + } + return false; + }else { + return checkedSetExtendedFacing(extendedFacing); + } + } + + default boolean checkedSetExtendedFacing(ExtendedFacing alignment){ + if (isNewExtendedFacingValid(alignment)){ + setExtendedFacing(alignment); + return true; + } + return false; + } + + default boolean isNewDirectionValid(ForgeDirection direction) { + return isNewExtendedFacingValid(direction,getRotation(),getFlip()); + } + + default boolean isNewRotationValid(Rotation rotation){ + return isNewExtendedFacingValid(getDirection(),rotation,getFlip()); + } + + default boolean isNewFlipValid(Flip flip){ + return isNewExtendedFacingValid(getDirection(),getRotation(),flip); + } + + default boolean isExtendedFacingValid() { + return isNewExtendedFacingValid(getDirection(),getRotation(),getFlip()); + } + + @Override + default boolean isNewExtendedFacingValid(ForgeDirection direction, Rotation rotation, Flip flip){ + return getAlignmentLimits().isNewExtendedFacingValid(direction, rotation, flip); + } + + @Override + default boolean isNewExtendedFacingValid(ExtendedFacing alignment){ + return getAlignmentLimits().isNewExtendedFacingValid( + alignment.getDirection(), + alignment.getRotation(), + alignment.getFlip()); + } +} \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/mechanics/alignment/IAlignmentLimits.java b/src/main/java/com/github/technus/tectech/mechanics/alignment/IAlignmentLimits.java new file mode 100644 index 0000000000..68b4d84dab --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/alignment/IAlignmentLimits.java @@ -0,0 +1,19 @@ +package com.github.technus.tectech.mechanics.alignment; +import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; +import com.github.technus.tectech.mechanics.alignment.enumerable.Flip; +import com.github.technus.tectech.mechanics.alignment.enumerable.Rotation; +import net.minecraftforge.common.util.ForgeDirection; + +public interface IAlignmentLimits { + + IAlignmentLimits UNLIMITED= (direction, rotation, flip) -> true; + + boolean isNewExtendedFacingValid(ForgeDirection direction, Rotation rotation, Flip flip); + + default boolean isNewExtendedFacingValid(ExtendedFacing alignment){ + return isNewExtendedFacingValid( + alignment.getDirection(), + alignment.getRotation(), + alignment.getFlip()); + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/alignment/IntegerAxisSwap.java b/src/main/java/com/github/technus/tectech/mechanics/alignment/IntegerAxisSwap.java new file mode 100644 index 0000000000..40cb6c3220 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/alignment/IntegerAxisSwap.java @@ -0,0 +1,67 @@ +package com.github.technus.tectech.mechanics.alignment; + +import com.github.technus.tectech.util.Vec3Impl; +import net.minecraftforge.common.util.ForgeDirection; + +import static com.github.technus.tectech.mechanics.alignment.enumerable.Direction.getAxisVector; +import static java.lang.Math.abs; + +public class IntegerAxisSwap { + private final Vec3Impl forFirstAxis; + private final Vec3Impl forSecondAxis; + private final Vec3Impl forThirdAxis; + + public IntegerAxisSwap(ForgeDirection forFirstAxis, ForgeDirection forSecondAxis, ForgeDirection forThirdAxis) { + this.forFirstAxis = getAxisVector(forFirstAxis); + this.forSecondAxis = getAxisVector(forSecondAxis); + this.forThirdAxis = getAxisVector(forThirdAxis); + if(abs(this.forFirstAxis.get0())+abs(this.forSecondAxis.get0())+abs(this.forThirdAxis.get0())!=1 || + abs(this.forFirstAxis.get1())+abs(this.forSecondAxis.get1())+abs(this.forThirdAxis.get1())!=1 || + abs(this.forFirstAxis.get2())+abs(this.forSecondAxis.get2())+abs(this.forThirdAxis.get2())!=1){ + throw new IllegalArgumentException("Axis are overlapping/missing! "+ + forFirstAxis.name()+" "+ + forSecondAxis.name()+" "+ + forThirdAxis.name()); + } + } + + public Vec3Impl translate(Vec3Impl point){ + return new Vec3Impl( + forFirstAxis.get0()*point.get0() +forFirstAxis.get1()*point.get1() +forFirstAxis.get2()*point.get2(), + forSecondAxis.get0()*point.get0()+forSecondAxis.get1()*point.get1()+forSecondAxis.get2()*point.get2(), + forThirdAxis.get0()*point.get0() +forThirdAxis.get1()*point.get1() +forThirdAxis.get2()*point.get2() + ); + } + + public Vec3Impl inverseTranslate(Vec3Impl point){ + return new Vec3Impl( + forFirstAxis.get0()*point.get0()+forSecondAxis.get0()*point.get1()+forThirdAxis.get0()*point.get2(), + forFirstAxis.get1()*point.get0()+forSecondAxis.get1()*point.get1()+forThirdAxis.get1()*point.get2(), + forFirstAxis.get2()*point.get0()+forSecondAxis.get2()*point.get1()+forThirdAxis.get2()*point.get2() + ); + } + + public void translate(int[] point,int[] out){ + out[0]=forFirstAxis.get0()*point[0] +forFirstAxis.get1()*point[1] +forFirstAxis.get2()*point[2]; + out[1]=forSecondAxis.get0()*point[0]+forSecondAxis.get1()*point[1]+forSecondAxis.get2()*point[2]; + out[2]=forThirdAxis.get0()*point[0] +forThirdAxis.get1()*point[1] +forThirdAxis.get2()*point[2]; + } + + public void inverseTranslate(int[] point,int[] out){ + out[0]=forFirstAxis.get0()*point[0]+forSecondAxis.get0()*point[1]+forThirdAxis.get0()*point[2]; + out[1]=forFirstAxis.get1()*point[0]+forSecondAxis.get1()*point[1]+forThirdAxis.get1()*point[2]; + out[2]=forFirstAxis.get2()*point[0]+forSecondAxis.get2()*point[1]+forThirdAxis.get2()*point[2]; + } + + public void translate(double[] point,double[] out){ + out[0]=forFirstAxis.get0()*point[0] +forFirstAxis.get1()*point[1] +forFirstAxis.get2()*point[2]; + out[1]=forSecondAxis.get0()*point[0]+forSecondAxis.get1()*point[1]+forSecondAxis.get2()*point[2]; + out[2]=forThirdAxis.get0()*point[0] +forThirdAxis.get1()*point[1] +forThirdAxis.get2()*point[2]; + } + + public void inverseTranslate(double[] point,double[] out){ + out[0]=forFirstAxis.get0()*point[0]+forSecondAxis.get0()*point[1]+forThirdAxis.get0()*point[2]; + out[1]=forFirstAxis.get1()*point[0]+forSecondAxis.get1()*point[1]+forThirdAxis.get1()*point[2]; + out[2]=forFirstAxis.get2()*point[0]+forSecondAxis.get2()*point[1]+forThirdAxis.get2()*point[2]; + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/alignment/enumerable/Direction.java b/src/main/java/com/github/technus/tectech/mechanics/alignment/enumerable/Direction.java new file mode 100644 index 0000000000..cc3971fedb --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/alignment/enumerable/Direction.java @@ -0,0 +1,34 @@ +package com.github.technus.tectech.mechanics.alignment.enumerable; + +import com.github.technus.tectech.util.Vec3Impl; +import net.minecraftforge.common.util.ForgeDirection; + +public enum Direction { + DOWN(ForgeDirection.DOWN), + UP(ForgeDirection.UP), + NORTH(ForgeDirection.NORTH), + SOUTH(ForgeDirection.SOUTH), + WEST(ForgeDirection.WEST), + EAST(ForgeDirection.EAST); + + private final ForgeDirection forgeDirection; + private final Vec3Impl axisVector; + public static final Direction[] VALUES=values(); + + Direction(ForgeDirection forgeDirection) { + this.forgeDirection = forgeDirection; + axisVector=new Vec3Impl(forgeDirection.offsetX,forgeDirection.offsetY,forgeDirection.offsetZ); + } + + public ForgeDirection getForgeDirection() { + return forgeDirection; + } + + public Vec3Impl getAxisVector() { + return axisVector; + } + + public static Vec3Impl getAxisVector(ForgeDirection forgeDirection){ + return VALUES[forgeDirection.ordinal()].axisVector; + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/alignment/enumerable/ExtendedFacing.java b/src/main/java/com/github/technus/tectech/mechanics/alignment/enumerable/ExtendedFacing.java new file mode 100644 index 0000000000..68cc50a5ee --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/alignment/enumerable/ExtendedFacing.java @@ -0,0 +1,324 @@ +package com.github.technus.tectech.mechanics.alignment.enumerable; + +import com.github.technus.tectech.mechanics.alignment.IAlignment; +import com.github.technus.tectech.mechanics.alignment.IntegerAxisSwap; +import com.github.technus.tectech.util.Vec3Impl; +import net.minecraftforge.common.util.ForgeDirection; + +import java.util.*; + +import static com.github.technus.tectech.mechanics.alignment.IAlignment.FLIPS_COUNT; +import static com.github.technus.tectech.mechanics.alignment.IAlignment.ROTATIONS_COUNT; +import static java.lang.Math.abs; +import static java.util.Arrays.stream; +import static java.util.stream.Collectors.reducing; +import static java.util.stream.Collectors.toMap; + +public enum ExtendedFacing { + DOWN_NORMAL_NONE("down normal none"), + DOWN_NORMAL_HORIZONTAL("down normal horizontal"), + DOWN_NORMAL_VERTICAL("down normal vertical"), + DOWN_NORMAL_BOTH("down normal both"), + DOWN_CLOCKWISE_NONE("down clockwise none"), + DOWN_CLOCKWISE_HORIZONTAL("down clockwise horizontal"), + DOWN_CLOCKWISE_VERTICAL("down clockwise vertical"), + DOWN_CLOCKWISE_BOTH("down clockwise both"), + DOWN_UPSIDE_DOWN_NONE("down upside down none"), + DOWN_UPSIDE_DOWN_HORIZONTAL("down upside down horizontal"), + DOWN_UPSIDE_DOWN_VERTICAL("down upside down vertical"), + DOWN_UPSIDE_DOWN_BOTH("down upside down both"), + DOWN_COUNTER_CLOCKWISE_NONE("down counter clockwise none"), + DOWN_COUNTER_CLOCKWISE_HORIZONTAL("down counter clockwise horizontal"), + DOWN_COUNTER_CLOCKWISE_VERTICAL("down counter clockwise vertical"), + DOWN_COUNTER_CLOCKWISE_BOTH("down counter clockwise both"), + UP_NORMAL_NONE("up normal none"), + UP_NORMAL_HORIZONTAL("up normal horizontal"), + UP_NORMAL_VERTICAL("up normal vertical"), + UP_NORMAL_BOTH("up normal both"), + UP_CLOCKWISE_NONE("up clockwise none"), + UP_CLOCKWISE_HORIZONTAL("up clockwise horizontal"), + UP_CLOCKWISE_VERTICAL("up clockwise vertical"), + UP_CLOCKWISE_BOTH("up clockwise both"), + UP_UPSIDE_DOWN_NONE("up upside down none"), + UP_UPSIDE_DOWN_HORIZONTAL("up upside down horizontal"), + UP_UPSIDE_DOWN_VERTICAL("up upside down vertical"), + UP_UPSIDE_DOWN_BOTH("up upside down both"), + UP_COUNTER_CLOCKWISE_NONE("up counter clockwise none"), + UP_COUNTER_CLOCKWISE_HORIZONTAL("up counter clockwise horizontal"), + UP_COUNTER_CLOCKWISE_VERTICAL("up counter clockwise vertical"), + UP_COUNTER_CLOCKWISE_BOTH("up counter clockwise both"), + NORTH_NORMAL_NONE("north normal none"), + NORTH_NORMAL_HORIZONTAL("north normal horizontal"), + NORTH_NORMAL_VERTICAL("north normal vertical"), + NORTH_NORMAL_BOTH("north normal both"), + NORTH_CLOCKWISE_NONE("north clockwise none"), + NORTH_CLOCKWISE_HORIZONTAL("north clockwise horizontal"), + NORTH_CLOCKWISE_VERTICAL("north clockwise vertical"), + NORTH_CLOCKWISE_BOTH("north clockwise both"), + NORTH_UPSIDE_DOWN_NONE("north upside down none"), + NORTH_UPSIDE_DOWN_HORIZONTAL("north upside down horizontal"), + NORTH_UPSIDE_DOWN_VERTICAL("north upside down vertical"), + NORTH_UPSIDE_DOWN_BOTH("north upside down both"), + NORTH_COUNTER_CLOCKWISE_NONE("north counter clockwise none"), + NORTH_COUNTER_CLOCKWISE_HORIZONTAL("north counter clockwise horizontal"), + NORTH_COUNTER_CLOCKWISE_VERTICAL("north counter clockwise vertical"), + NORTH_COUNTER_CLOCKWISE_BOTH("north counter clockwise both"), + SOUTH_NORMAL_NONE("south normal none"), + SOUTH_NORMAL_HORIZONTAL("south normal horizontal"), + SOUTH_NORMAL_VERTICAL("south normal vertical"), + SOUTH_NORMAL_BOTH("south normal both"), + SOUTH_CLOCKWISE_NONE("south clockwise none"), + SOUTH_CLOCKWISE_HORIZONTAL("south clockwise horizontal"), + SOUTH_CLOCKWISE_VERTICAL("south clockwise vertical"), + SOUTH_CLOCKWISE_BOTH("south clockwise both"), + SOUTH_UPSIDE_DOWN_NONE("south upside down none"), + SOUTH_UPSIDE_DOWN_HORIZONTAL("south upside down horizontal"), + SOUTH_UPSIDE_DOWN_VERTICAL("south upside down vertical"), + SOUTH_UPSIDE_DOWN_BOTH("south upside down both"), + SOUTH_COUNTER_CLOCKWISE_NONE("south counter clockwise none"), + SOUTH_COUNTER_CLOCKWISE_HORIZONTAL("south counter clockwise horizontal"), + SOUTH_COUNTER_CLOCKWISE_VERTICAL("south counter clockwise vertical"), + SOUTH_COUNTER_CLOCKWISE_BOTH("south counter clockwise both"), + WEST_NORMAL_NONE("west normal none"), + WEST_NORMAL_HORIZONTAL("west normal horizontal"), + WEST_NORMAL_VERTICAL("west normal vertical"), + WEST_NORMAL_BOTH("west normal both"), + WEST_CLOCKWISE_NONE("west clockwise none"), + WEST_CLOCKWISE_HORIZONTAL("west clockwise horizontal"), + WEST_CLOCKWISE_VERTICAL("west clockwise vertical"), + WEST_CLOCKWISE_BOTH("west clockwise both"), + WEST_UPSIDE_DOWN_NONE("west upside down none"), + WEST_UPSIDE_DOWN_HORIZONTAL("west upside down horizontal"), + WEST_UPSIDE_DOWN_VERTICAL("west upside down vertical"), + WEST_UPSIDE_DOWN_BOTH("west upside down both"), + WEST_COUNTER_CLOCKWISE_NONE("west counter clockwise none"), + WEST_COUNTER_CLOCKWISE_HORIZONTAL("west counter clockwise horizontal"), + WEST_COUNTER_CLOCKWISE_VERTICAL("west counter clockwise vertical"), + WEST_COUNTER_CLOCKWISE_BOTH("west counter clockwise both"), + EAST_NORMAL_NONE("east normal none"), + EAST_NORMAL_HORIZONTAL("east normal horizontal"), + EAST_NORMAL_VERTICAL("east normal vertical"), + EAST_NORMAL_BOTH("east normal both"), + EAST_CLOCKWISE_NONE("east clockwise none"), + EAST_CLOCKWISE_HORIZONTAL("east clockwise horizontal"), + EAST_CLOCKWISE_VERTICAL("east clockwise vertical"), + EAST_CLOCKWISE_BOTH("east clockwise both"), + EAST_UPSIDE_DOWN_NONE("east upside down none"), + EAST_UPSIDE_DOWN_HORIZONTAL("east upside down horizontal"), + EAST_UPSIDE_DOWN_VERTICAL("east upside down vertical"), + EAST_UPSIDE_DOWN_BOTH("east upside down both"), + EAST_COUNTER_CLOCKWISE_NONE("east counter clockwise none"), + EAST_COUNTER_CLOCKWISE_HORIZONTAL("east counter clockwise horizontal"), + EAST_COUNTER_CLOCKWISE_VERTICAL("east counter clockwise vertical"), + EAST_COUNTER_CLOCKWISE_BOTH("east counter clockwise both"); + + public static final ExtendedFacing DEFAULT=NORTH_NORMAL_NONE; + public static final ExtendedFacing[] VALUES = values(); + public static final Map> FOR_FACING=new HashMap<>(); + static { + stream(values()).forEach(extendedFacing -> + FOR_FACING.compute(extendedFacing.direction,((forgeDirection, extendedFacings) -> { + if(extendedFacings==null){ + extendedFacings = new ArrayList<>(); + } + extendedFacings.add(extendedFacing); + return extendedFacings; + }))); + } + private static final Map NAME_LOOKUP = stream(VALUES).collect(toMap(ExtendedFacing::getName2, (extendedFacing) -> extendedFacing)); + + private final ForgeDirection direction; + private final Rotation rotation; + private final Flip flip; + + private final String name; + private final IntegerAxisSwap integerAxisSwap; + + ExtendedFacing(String name) { + this.name = name; + direction= Direction.VALUES[ordinal()/(ROTATIONS_COUNT*FLIPS_COUNT)].getForgeDirection(); + rotation=Rotation.VALUES[ordinal()/FLIPS_COUNT-direction.ordinal()*ROTATIONS_COUNT]; + flip=Flip.VALUES[ordinal()%FLIPS_COUNT]; + ForgeDirection a,b,c; + switch (direction){ + case DOWN: + a= ForgeDirection.WEST; + b= ForgeDirection.NORTH; + c= ForgeDirection.UP; + break; + case UP: + a= ForgeDirection.EAST; + b= ForgeDirection.NORTH; + c= ForgeDirection.DOWN; + break; + case NORTH: + a= ForgeDirection.WEST; + b= ForgeDirection.UP; + c= ForgeDirection.SOUTH; + break; + case SOUTH: + a= ForgeDirection.EAST; + b= ForgeDirection.UP; + c= ForgeDirection.NORTH; + break; + case WEST: + a= ForgeDirection.SOUTH; + b= ForgeDirection.UP; + c= ForgeDirection.EAST; + break; + case EAST: + a= ForgeDirection.NORTH; + b= ForgeDirection.UP; + c= ForgeDirection.WEST; + break; + default:throw new RuntimeException("Is impossible..."); + } + switch (flip){//This duplicates some axis swaps since flip boolean would do, but seems more convenient to use + case HORIZONTAL: + a=a.getOpposite(); + break; + case BOTH: + a=a.getOpposite(); + case VERTICAL: + b=b.getOpposite(); + break; + case NONE: break; + default:throw new RuntimeException("Even more impossible..."); + } + switch (rotation) { + case COUNTER_CLOCKWISE: { + ForgeDirection _a=a; + a =b; + b =_a.getOpposite(); + break; + } + case UPSIDE_DOWN: + a=a.getOpposite(); + b=b.getOpposite(); + break; + case CLOCKWISE: { + ForgeDirection _a=a; + a =b.getOpposite(); + b =_a; + break; + } + case NORMAL: break; + default: + throw new RuntimeException("More impossible..."); + } + integerAxisSwap =new IntegerAxisSwap(a,b,c); + } + + public static ExtendedFacing of(ForgeDirection direction, Rotation rotation, Flip flip){ + if(direction==ForgeDirection.UNKNOWN){ + return VALUES[IAlignment.getAlignmentIndex(ForgeDirection.NORTH, rotation, flip)]; + } + return VALUES[IAlignment.getAlignmentIndex(direction, rotation, flip)]; + } + + public static ExtendedFacing of(ForgeDirection direction){ + if(direction==ForgeDirection.UNKNOWN){ + return DEFAULT; + } + return VALUES[IAlignment.getAlignmentIndex(direction, Rotation.NORMAL, Flip.NONE)]; + } + + public ExtendedFacing with(ForgeDirection direction){ + return of(direction,rotation,flip); + } + + public ExtendedFacing with(Rotation rotation){ + return of(direction,rotation,flip); + } + + public ExtendedFacing with(Flip flip){ + return of(direction,rotation,flip); + } + + public ExtendedFacing getOppositeDirection() { + return of(direction.getOpposite(),rotation,flip); + } + + public ExtendedFacing getOppositeRotation() { + return of(direction,rotation.getOpposite(),flip); + } + + public ExtendedFacing getOppositeFlip() { + return of(direction,rotation,flip.getOpposite()); + } + + /** + * Gets the same effective facing achieved by different rot/flip combo + * @return same effective facing, but different enum value + */ + public ExtendedFacing getDuplicate(){ + return of(direction,rotation.getOpposite(),flip.getOpposite()); + } + + public int getIndex(){ + return ordinal(); + } + + public String getName2() { + return this.name; + } + + public static ExtendedFacing byName(String name) { + return name == null ? null : NAME_LOOKUP.get(name.toLowerCase(Locale.ROOT)); + } + + public static ExtendedFacing byIndex(int index) { + return VALUES[abs(index % VALUES.length)]; + } + + public static ExtendedFacing random(Random rand) { + return VALUES[rand.nextInt(VALUES.length)]; + } + + public ForgeDirection getDirection() { + return direction; + } + + public Rotation getRotation() { + return rotation; + } + + public Flip getFlip() { + return flip; + } + + /** + * Translates relative to front facing offset to world offset + * @param abcOffset A,B,C offset (facing relative L-->R,U-->D,F-->B) + * @return X,Y,Z offset in world + */ + public Vec3Impl getWorldOffset(Vec3Impl abcOffset) { + return integerAxisSwap.inverseTranslate(abcOffset); + } + public void getWorldOffset(int[] point,int[] out){ + integerAxisSwap.inverseTranslate(point,out); + } + public void getWorldOffset(double[] point,double[] out){ + integerAxisSwap.inverseTranslate(point,out); + } + + + /** + * Translates world offset to relative front facing offset + * @param xyzOffset X,Y,Z offset in world + * @return A,B,C offset (facing relative L-->R,U-->D,F-->B) + */ + public Vec3Impl getOffsetABC(Vec3Impl xyzOffset){ + return integerAxisSwap.translate(xyzOffset); + } + public void getOffsetABC(int[] point,int[] out){ + integerAxisSwap.translate(point,out); + } + public void getOffsetABC(double[] point,double[] out){ + integerAxisSwap.translate(point,out); + } + + public IntegerAxisSwap getIntegerAxisSwap() { + return integerAxisSwap; + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/alignment/enumerable/Flip.java b/src/main/java/com/github/technus/tectech/mechanics/alignment/enumerable/Flip.java new file mode 100644 index 0000000000..4b1dff70ec --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/alignment/enumerable/Flip.java @@ -0,0 +1,76 @@ +package com.github.technus.tectech.mechanics.alignment.enumerable; + +import javax.annotation.Nonnull; +import java.util.Locale; +import java.util.Map; +import java.util.Random; + +import static java.lang.Math.abs; +import static java.util.Arrays.stream; +import static java.util.stream.Collectors.toMap; + +public enum Flip { + NONE(3, "none"), + HORIZONTAL(2, "horizontal"), + VERTICAL(1, "vertical"), + BOTH(0, "both"); + + private final int opposite; + private final String name; + + public static final Flip[] VALUES = values(); + private static final Map NAME_LOOKUP = stream(VALUES).collect(toMap(Flip::getName2, (flip) -> flip)); + + Flip(int oppositeIn, String nameIn) { + this.opposite = oppositeIn; + this.name = nameIn; + } + + public int getIndex(){ + return ordinal(); + } + + public Flip getOpposite() { + return VALUES[opposite]; + } + + public String getName2() { + return this.name; + } + + public static Flip byName(String name) { + return name == null ? null : NAME_LOOKUP.get(name.toLowerCase(Locale.ROOT)); + } + + public static Flip byIndex(int index) { + return VALUES[abs(index % VALUES.length)]; + } + + public static Flip random(@Nonnull Random rand) { + return VALUES[rand.nextInt(VALUES.length)]; + } + + public String toString() { + return this.name; + } + + public String getName() { + return this.name; + } + + public boolean isNotFlipped(){ + return this==NONE; + } + + public boolean isBothFlipped(){ + return this==BOTH; + } + + public boolean isHorizontallyFlipped() { + return this==HORIZONTAL || isBothFlipped(); + } + + public boolean isVerticallyFliped() { + return this==VERTICAL || isBothFlipped(); + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/alignment/enumerable/Rotation.java b/src/main/java/com/github/technus/tectech/mechanics/alignment/enumerable/Rotation.java new file mode 100644 index 0000000000..5d41f54a11 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/alignment/enumerable/Rotation.java @@ -0,0 +1,76 @@ +package com.github.technus.tectech.mechanics.alignment.enumerable; + +import javax.annotation.Nonnull; +import java.util.Locale; +import java.util.Map; +import java.util.Random; + +import static java.lang.Math.abs; +import static java.util.Arrays.stream; +import static java.util.stream.Collectors.toMap; + +public enum Rotation { + NORMAL(2, "normal"), + CLOCKWISE(3, "clockwise"), + UPSIDE_DOWN(0, "upside down"), + COUNTER_CLOCKWISE(1, "counter clockwise"); + + private final int opposite; + private final String name; + + public static final Rotation[] VALUES = values(); + private static final Map NAME_LOOKUP = stream(VALUES).collect(toMap(Rotation::getName2, (rotation) -> rotation)); + + Rotation(int oppositeIn, String nameIn) { + this.opposite = oppositeIn; + this.name = nameIn; + } + + public int getIndex(){ + return ordinal(); + } + + public Rotation getOpposite() { + return VALUES[opposite]; + } + + public String getName2() { + return this.name; + } + + public static Rotation byName(String name) { + return name == null ? null : NAME_LOOKUP.get(name.toLowerCase(Locale.ROOT)); + } + + public static Rotation byIndex(int index) { + return VALUES[abs(index % VALUES.length)]; + } + + public static Rotation random(@Nonnull Random rand) { + return VALUES[rand.nextInt(VALUES.length)]; + } + + public String toString() { + return this.name; + } + + public String getName() { + return this.name; + } + + public boolean isNotRotated(){ + return this==NORMAL; + } + + public boolean isClockwise(){ + return this==CLOCKWISE; + } + + public boolean isCounterClockwise(){ + return this==COUNTER_CLOCKWISE; + } + + public boolean isUpsideDown(){ + return this==UPSIDE_DOWN; + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/anomaly/AnomalyHandler.java b/src/main/java/com/github/technus/tectech/mechanics/anomaly/AnomalyHandler.java index 2a770ea332..a3fa341697 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/anomaly/AnomalyHandler.java +++ b/src/main/java/com/github/technus/tectech/mechanics/anomaly/AnomalyHandler.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.mechanics.anomaly; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.loader.MainLoader; import com.github.technus.tectech.loader.NetworkDispatcher; import com.github.technus.tectech.mechanics.data.ChunkDataHandler; diff --git a/src/main/java/com/github/technus/tectech/mechanics/commands/ConvertFloat.java b/src/main/java/com/github/technus/tectech/mechanics/commands/ConvertFloat.java index 61fa56f93a..5885226f6f 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/commands/ConvertFloat.java +++ b/src/main/java/com/github/technus/tectech/mechanics/commands/ConvertFloat.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.mechanics.commands; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import net.minecraft.command.ICommand; import net.minecraft.command.ICommandSender; import net.minecraft.util.ChatComponentText; diff --git a/src/main/java/com/github/technus/tectech/mechanics/commands/ConvertInteger.java b/src/main/java/com/github/technus/tectech/mechanics/commands/ConvertInteger.java index c9767560c3..41edd66684 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/commands/ConvertInteger.java +++ b/src/main/java/com/github/technus/tectech/mechanics/commands/ConvertInteger.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.mechanics.commands; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import net.minecraft.command.ICommand; import net.minecraft.command.ICommandSender; import net.minecraft.util.ChatComponentText; diff --git a/src/main/java/com/github/technus/tectech/mechanics/constructible/IConstructable.java b/src/main/java/com/github/technus/tectech/mechanics/constructible/IConstructable.java new file mode 100644 index 0000000000..fdfa2904fb --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/constructible/IConstructable.java @@ -0,0 +1,15 @@ +package com.github.technus.tectech.mechanics.constructible; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +/** + * Created by Tec on 24.03.2017. + */ +public interface IConstructable { + void construct(int stackSize, boolean hintsOnly); + + @SideOnly(Side.CLIENT) + String[] getStructureDescription(int stackSize); +} + diff --git a/src/main/java/com/github/technus/tectech/mechanics/data/ChunkDataMessage.java b/src/main/java/com/github/technus/tectech/mechanics/data/ChunkDataMessage.java index 0a086384bc..6094d08ba4 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/data/ChunkDataMessage.java +++ b/src/main/java/com/github/technus/tectech/mechanics/data/ChunkDataMessage.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.mechanics.data; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import cpw.mods.fml.common.network.ByteBufUtils; import cpw.mods.fml.common.network.simpleimpl.IMessage; import cpw.mods.fml.common.network.simpleimpl.MessageContext; diff --git a/src/main/java/com/github/technus/tectech/mechanics/data/PlayerPersistence.java b/src/main/java/com/github/technus/tectech/mechanics/data/PlayerPersistence.java index 0a829de3e9..f69bccc871 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/data/PlayerPersistence.java +++ b/src/main/java/com/github/technus/tectech/mechanics/data/PlayerPersistence.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.mechanics.data; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.loader.NetworkDispatcher; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.PlayerEvent; diff --git a/src/main/java/com/github/technus/tectech/mechanics/dataTransport/DataPacket.java b/src/main/java/com/github/technus/tectech/mechanics/dataTransport/DataPacket.java index 82234e4c75..990a48ac70 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/dataTransport/DataPacket.java +++ b/src/main/java/com/github/technus/tectech/mechanics/dataTransport/DataPacket.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.mechanics.dataTransport; -import com.github.technus.tectech.Vec3pos; +import com.github.technus.tectech.util.Vec3Impl; import net.minecraft.nbt.NBTTagCompound; import java.util.Collections; @@ -12,7 +12,7 @@ import java.util.Set; */ public abstract class DataPacket{ private static final byte MAX_HISTORY = 64; - private Set trace = new LinkedHashSet<>(); + private Set trace = new LinkedHashSet<>(); protected T content; @@ -23,9 +23,9 @@ public abstract class DataPacket{ protected DataPacket(NBTTagCompound nbt) { content = contentFromNBT(nbt.getCompoundTag("qContent")); for (int i = 0; i < nbt.getByte("qHistory"); i++) { - trace.add(new Vec3pos( + trace.add(new Vec3Impl( nbt.getInteger("qX" + i), - nbt.getShort("qY" + i), + nbt.getInteger("qY" + i), nbt.getInteger("qZ" + i) )); } @@ -39,10 +39,10 @@ public abstract class DataPacket{ } nbt.setByte("qHistory", (byte) trace.size()); int i = 0; - for (Vec3pos v : trace) { - nbt.setInteger("qX" + i, v.x); - nbt.setShort("qY" + i, v.y); - nbt.setInteger("qZ" + i, v.z); + for (Vec3Impl v : trace) { + nbt.setInteger("qX" + i, v.get0()); + nbt.setInteger("qY" + i, v.get1()); + nbt.setInteger("qZ" + i, v.get2()); i++; } return nbt; @@ -54,7 +54,7 @@ public abstract class DataPacket{ protected abstract T unifyContentWith(T content); - public final boolean contains(Vec3pos v) { + public final boolean contains(Vec3Impl v) { return trace.contains(v); } @@ -64,7 +64,7 @@ public abstract class DataPacket{ public abstract boolean extraCheck(); - protected final DataPacket unifyTrace(Vec3pos... positions) { + protected final DataPacket unifyTrace(Vec3Impl... positions) { Collections.addAll(trace,positions); return (check() && extraCheck()) ? this : null; } @@ -85,7 +85,7 @@ public abstract class DataPacket{ return null; } - public final T contentIfNotInTrace(Vec3pos pos) { + public final T contentIfNotInTrace(Vec3Impl pos) { if (trace.contains(pos)) { return null; } diff --git a/src/main/java/com/github/technus/tectech/mechanics/dataTransport/QuantumDataPacket.java b/src/main/java/com/github/technus/tectech/mechanics/dataTransport/QuantumDataPacket.java index 9661d8d315..268de6f71c 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/dataTransport/QuantumDataPacket.java +++ b/src/main/java/com/github/technus/tectech/mechanics/dataTransport/QuantumDataPacket.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.mechanics.dataTransport; -import com.github.technus.tectech.Vec3pos; +import com.github.technus.tectech.util.Vec3Impl; import net.minecraft.nbt.NBTTagCompound; public class QuantumDataPacket extends DataPacket { @@ -34,7 +34,7 @@ public class QuantumDataPacket extends DataPacket { return this.content+content; } - public QuantumDataPacket unifyTraceWith(Vec3pos... positions) { + public QuantumDataPacket unifyTraceWith(Vec3Impl... positions) { return (QuantumDataPacket) super.unifyTrace(positions); } diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/stacks/cElementalInstanceStack.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/stacks/cElementalInstanceStack.java index ba3c8f909c..c108d8c8ae 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/stacks/cElementalInstanceStack.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/stacks/cElementalInstanceStack.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.mechanics.elementalMatter.core.stacks; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalDecay; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalDefinitionStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/templates/cElementalPrimitive.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/templates/cElementalPrimitive.java index 24033ba945..701682cdaa 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/templates/cElementalPrimitive.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/templates/cElementalPrimitive.java @@ -15,7 +15,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.Map; -import static com.github.technus.tectech.Util.areBitsSet; +import static com.github.technus.tectech.util.Util.areBitsSet; import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; import static com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.cPrimitiveDefinition.null__; import static com.github.technus.tectech.thing.item.DebugElementalInstanceContainer_EM.STACKS_REGISTERED; diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dAtomDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dAtomDefinition.java index ea8f6bc201..205851c61b 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dAtomDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dAtomDefinition.java @@ -2,8 +2,8 @@ package com.github.technus.tectech.mechanics.elementalMatter.definitions.complex import com.github.technus.tectech.Reference; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.Util; -import com.github.technus.tectech.XSTR; +import com.github.technus.tectech.util.Util; +import com.github.technus.tectech.util.XSTR; import com.github.technus.tectech.compatibility.gtpp.GtppAtomLoader; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalDecay; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalDefinitionStackMap; @@ -25,7 +25,7 @@ import net.minecraft.nbt.NBTTagCompound; import java.util.*; -import static com.github.technus.tectech.XSTR.XSTR_INSTANCE; +import static com.github.technus.tectech.util.XSTR.XSTR_INSTANCE; import static com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.definitions.dComplexAspectDefinition.getNbtTagCompound; import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; import static com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.eBosonDefinition.boson_Y__; diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dHadronDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dHadronDefinition.java index 04a1eab490..96ee5cc3db 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dHadronDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dHadronDefinition.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.mechanics.elementalMatter.definitions.complex; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalDecay; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalDefinitionStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalMutableDefinitionStackMap; diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/iaeaNuclide.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/iaeaNuclide.java index 8b54bdd306..87a71b684f 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/iaeaNuclide.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/iaeaNuclide.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.mechanics.elementalMatter.definitions.complex; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import java.io.BufferedReader; import java.io.InputStreamReader; diff --git a/src/main/java/com/github/technus/tectech/mechanics/pipe/IActivePipe.java b/src/main/java/com/github/technus/tectech/mechanics/pipe/IActivePipe.java new file mode 100644 index 0000000000..4f244c804b --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/pipe/IActivePipe.java @@ -0,0 +1,9 @@ +package com.github.technus.tectech.mechanics.pipe; + +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; + +public interface IActivePipe extends IMetaTileEntity { + void setActive(boolean active); + boolean getActive(); + void markUsed(); +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/pipe/IConnectsToDataPipe.java b/src/main/java/com/github/technus/tectech/mechanics/pipe/IConnectsToDataPipe.java new file mode 100644 index 0000000000..a775321df2 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/pipe/IConnectsToDataPipe.java @@ -0,0 +1,14 @@ +package com.github.technus.tectech.mechanics.pipe; + +/** + * Created by Tec on 26.02.2017. + */ +public interface IConnectsToDataPipe { + boolean canConnectData(byte side); + + IConnectsToDataPipe getNext(IConnectsToDataPipe source); + + boolean isDataInputFacing(byte side); + + byte getColorization(); +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/pipe/IConnectsToElementalPipe.java b/src/main/java/com/github/technus/tectech/mechanics/pipe/IConnectsToElementalPipe.java new file mode 100644 index 0000000000..ea444a0678 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/pipe/IConnectsToElementalPipe.java @@ -0,0 +1,8 @@ +package com.github.technus.tectech.mechanics.pipe; + +/** + * Created by Tec on 26.02.2017. + */ +public interface IConnectsToElementalPipe { + boolean canConnect(byte side); +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/pipe/IConnectsToEnergyTunnel.java b/src/main/java/com/github/technus/tectech/mechanics/pipe/IConnectsToEnergyTunnel.java new file mode 100644 index 0000000000..3a1d24305e --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/pipe/IConnectsToEnergyTunnel.java @@ -0,0 +1,8 @@ +package com.github.technus.tectech.mechanics.pipe; + +/** + * Created by Tec on 26.02.2017. + */ +public interface IConnectsToEnergyTunnel { + boolean canConnect(byte side); +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/pipe/PipeActivityMessage.java b/src/main/java/com/github/technus/tectech/mechanics/pipe/PipeActivityMessage.java new file mode 100644 index 0000000000..abde23f33e --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/pipe/PipeActivityMessage.java @@ -0,0 +1,133 @@ +package com.github.technus.tectech.mechanics.pipe; + +import cpw.mods.fml.common.network.ByteBufUtils; +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import eu.usrv.yamcore.network.client.AbstractClientMessageHandler; +import eu.usrv.yamcore.network.server.AbstractServerMessageHandler; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.DimensionManager; + +public class PipeActivityMessage implements IMessage { + int mPosX; + int mPosY; + int mPosZ; + int mPosD; + int mActive; + + public PipeActivityMessage() { + } + + private PipeActivityMessage(IActivePipe metaTile) { + IGregTechTileEntity base=metaTile.getBaseMetaTileEntity(); + mPosX=base.getXCoord(); + mPosY=base.getYCoord(); + mPosZ=base.getZCoord(); + mPosD=base.getWorld().provider.dimensionId; + mActive=metaTile.getActive()?1:0; + } + + private PipeActivityMessage(World world, int x, int y, int z, boolean active) { + mPosX=x; + mPosY=y; + mPosZ=z; + mPosD=world.provider.dimensionId; + mActive=active?1:0; + } + + @Override + public void fromBytes(ByteBuf pBuffer) { + NBTTagCompound tTag = ByteBufUtils.readTag(pBuffer); + mPosX = tTag.getInteger("posx"); + mPosY = tTag.getInteger("posy"); + mPosZ = tTag.getInteger("posz"); + mPosD = tTag.getInteger("posd"); + mActive = tTag.getInteger("active"); + } + + @Override + public void toBytes(ByteBuf pBuffer) { + NBTTagCompound tFXTag = new NBTTagCompound(); + tFXTag.setInteger("posx", mPosX); + tFXTag.setInteger("posy", mPosY); + tFXTag.setInteger("posz", mPosZ); + tFXTag.setInteger("posd", mPosD); + tFXTag.setInteger("active", mActive); + + ByteBufUtils.writeTag(pBuffer, tFXTag); + } + + public static class PipeActivityQuery extends PipeActivityMessage { + public PipeActivityQuery() { + } + + public PipeActivityQuery(IActivePipe metaTile) { + super(metaTile); + } + + public PipeActivityQuery(World world, int x,int y,int z, boolean active) { + super(world,x,y,z,active); + } + } + + public static class PipeActivityData extends PipeActivityMessage { + public PipeActivityData() { + } + + private PipeActivityData(PipeActivityQuery query){ + mPosX=query.mPosX; + mPosY=query.mPosY; + mPosZ=query.mPosZ; + mPosD=query.mPosD; + mActive=query.mActive; + } + + public PipeActivityData(IActivePipe metaTile) { + super(metaTile); + } + + public PipeActivityData(World world, int x,int y,int z, boolean active) { + super(world,x,y,z,active); + } + } + + public static class ClientHandler extends AbstractClientMessageHandler { + @Override + public IMessage handleClientMessage(EntityPlayer pPlayer, PipeActivityData pMessage, MessageContext pCtx) { + if(pPlayer.worldObj.provider.dimensionId==pMessage.mPosD){ + TileEntity te=pPlayer.worldObj.getTileEntity(pMessage.mPosX,pMessage.mPosY,pMessage.mPosZ); + if(te instanceof IGregTechTileEntity){ + IMetaTileEntity meta = ((IGregTechTileEntity) te).getMetaTileEntity(); + if(meta instanceof IActivePipe){ + ((IActivePipe) meta).setActive(pMessage.mActive==1); + } + } + } + return null; + } + } + + public static class ServerHandler extends AbstractServerMessageHandler { + @Override + public IMessage handleServerMessage(EntityPlayer pPlayer, PipeActivityQuery pMessage, MessageContext pCtx) { + World world= DimensionManager.getWorld(pMessage.mPosD); + if(world!=null) { + TileEntity te = world.getTileEntity(pMessage.mPosX, pMessage.mPosY, pMessage.mPosZ); + if (te instanceof IGregTechTileEntity) { + IMetaTileEntity meta = ((IGregTechTileEntity) te).getMetaTileEntity(); + if (meta instanceof IActivePipe) { + pMessage.mActive=((IActivePipe) meta).getActive()?1:0; + return new PipeActivityData(pMessage); + } + } + } + return null; + } + } +} \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/block/QuantumGlassItem.java b/src/main/java/com/github/technus/tectech/thing/block/QuantumGlassItem.java index 05cbca7990..3f42bdbbc4 100644 --- a/src/main/java/com/github/technus/tectech/thing/block/QuantumGlassItem.java +++ b/src/main/java/com/github/technus/tectech/thing/block/QuantumGlassItem.java @@ -8,7 +8,7 @@ import net.minecraft.util.EnumChatFormatting; import java.util.List; -import static com.github.technus.tectech.CommonValues.TEC_MARK_EM; +import static com.github.technus.tectech.util.CommonValues.TEC_MARK_EM; import static net.minecraft.util.StatCollector.translateToLocal; /** diff --git a/src/main/java/com/github/technus/tectech/thing/block/ReactorSimItem.java b/src/main/java/com/github/technus/tectech/thing/block/ReactorSimItem.java index 14cb682c6f..d659a05005 100644 --- a/src/main/java/com/github/technus/tectech/thing/block/ReactorSimItem.java +++ b/src/main/java/com/github/technus/tectech/thing/block/ReactorSimItem.java @@ -8,7 +8,7 @@ import net.minecraft.util.EnumChatFormatting; import java.util.List; -import static com.github.technus.tectech.CommonValues.TEC_MARK_GENERAL; +import static com.github.technus.tectech.util.CommonValues.TEC_MARK_GENERAL; import static net.minecraft.util.StatCollector.translateToLocal; /** diff --git a/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_CasingsBA0.java b/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_CasingsBA0.java index 31ad485306..56fdfd22bb 100644 --- a/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_CasingsBA0.java +++ b/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_CasingsBA0.java @@ -8,7 +8,7 @@ import net.minecraft.util.EnumChatFormatting; import java.util.List; -import static com.github.technus.tectech.CommonValues.*; +import static com.github.technus.tectech.util.CommonValues.*; import static net.minecraft.util.StatCollector.translateToLocal; public class GT_Item_CasingsBA0 extends GT_Item_Casings_Abstract { diff --git a/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_CasingsTT.java b/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_CasingsTT.java index 23e9c7026f..5c93841d9a 100644 --- a/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_CasingsTT.java +++ b/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_CasingsTT.java @@ -8,8 +8,8 @@ import net.minecraft.util.EnumChatFormatting; import java.util.List; -import static com.github.technus.tectech.CommonValues.COSMIC_MARK; -import static com.github.technus.tectech.CommonValues.TEC_MARK_EM; +import static com.github.technus.tectech.util.CommonValues.COSMIC_MARK; +import static com.github.technus.tectech.util.CommonValues.TEC_MARK_EM; import static net.minecraft.util.StatCollector.translateToLocal; /** diff --git a/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_HintTT.java b/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_HintTT.java index 186510ff14..426e7d569b 100644 --- a/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_HintTT.java +++ b/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_HintTT.java @@ -8,7 +8,7 @@ import net.minecraft.util.EnumChatFormatting; import java.util.List; -import static com.github.technus.tectech.CommonValues.TEC_MARK_GENERAL; +import static com.github.technus.tectech.util.CommonValues.TEC_MARK_GENERAL; import static net.minecraft.util.StatCollector.translateToLocal; /** diff --git a/src/main/java/com/github/technus/tectech/thing/item/ConstructableTriggerItem.java b/src/main/java/com/github/technus/tectech/thing/item/ConstructableTriggerItem.java index c578f322f6..4af6b53658 100644 --- a/src/main/java/com/github/technus/tectech/thing/item/ConstructableTriggerItem.java +++ b/src/main/java/com/github/technus/tectech/thing/item/ConstructableTriggerItem.java @@ -1,8 +1,8 @@ package com.github.technus.tectech.thing.item; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.thing.metaTileEntity.IConstructable; +import com.github.technus.tectech.mechanics.constructible.IConstructable; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -23,7 +23,7 @@ import java.util.HashMap; import java.util.List; import static com.github.technus.tectech.Reference.MODID; -import static com.github.technus.tectech.Util.StructureBuilder; +import static com.github.technus.tectech.util.Util.StructureBuilder; import static com.github.technus.tectech.loader.gui.CreativeTabTecTech.creativeTabTecTech; import static gregtech.api.GregTech_API.sBlockCasings1; import static net.minecraft.util.StatCollector.translateToLocal; diff --git a/src/main/java/com/github/technus/tectech/thing/item/DebugElementalInstanceContainer_EM.java b/src/main/java/com/github/technus/tectech/thing/item/DebugElementalInstanceContainer_EM.java index 6ebfce328e..b23a580bbf 100644 --- a/src/main/java/com/github/technus/tectech/thing/item/DebugElementalInstanceContainer_EM.java +++ b/src/main/java/com/github/technus/tectech/thing/item/DebugElementalInstanceContainer_EM.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.thing.item; -import com.github.technus.tectech.CommonValues; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.CommonValues; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.font.TecTechFontRender; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.iElementalInstanceContainer; diff --git a/src/main/java/com/github/technus/tectech/thing/item/ElementalDefinitionContainer_EM.java b/src/main/java/com/github/technus/tectech/thing/item/ElementalDefinitionContainer_EM.java index 5cb84505bd..fa1c25cbf5 100644 --- a/src/main/java/com/github/technus/tectech/thing/item/ElementalDefinitionContainer_EM.java +++ b/src/main/java/com/github/technus/tectech/thing/item/ElementalDefinitionContainer_EM.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.thing.item; -import com.github.technus.tectech.CommonValues; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.CommonValues; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.font.TecTechFontRender; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalDefinitionStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.tElementalException; diff --git a/src/main/java/com/github/technus/tectech/thing/item/ElementalDefinitionScanStorage_EM.java b/src/main/java/com/github/technus/tectech/thing/item/ElementalDefinitionScanStorage_EM.java index 7e7c2eb625..c951229c92 100644 --- a/src/main/java/com/github/technus/tectech/thing/item/ElementalDefinitionScanStorage_EM.java +++ b/src/main/java/com/github/technus/tectech/thing/item/ElementalDefinitionScanStorage_EM.java @@ -1,8 +1,8 @@ package com.github.technus.tectech.thing.item; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.font.TecTechFontRender; import com.github.technus.tectech.loader.gui.ModGuiHandler; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; diff --git a/src/main/java/com/github/technus/tectech/thing/item/EuMeterGT.java b/src/main/java/com/github/technus/tectech/thing/item/EuMeterGT.java index 8f113c008b..8e3d770da1 100644 --- a/src/main/java/com/github/technus/tectech/thing/item/EuMeterGT.java +++ b/src/main/java/com/github/technus/tectech/thing/item/EuMeterGT.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.thing.item; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.Reference; import cpw.mods.fml.common.registry.GameRegistry; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; diff --git a/src/main/java/com/github/technus/tectech/thing/item/FrontRotationTriggerItem.java b/src/main/java/com/github/technus/tectech/thing/item/FrontRotationTriggerItem.java index e678dbd6cb..efcfcfb7a3 100644 --- a/src/main/java/com/github/technus/tectech/thing/item/FrontRotationTriggerItem.java +++ b/src/main/java/com/github/technus/tectech/thing/item/FrontRotationTriggerItem.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.thing.item; -import com.github.technus.tectech.CommonValues; -import com.github.technus.tectech.thing.metaTileEntity.IFrontRotation; +import com.github.technus.tectech.mechanics.alignment.IAlignment; +import com.github.technus.tectech.util.CommonValues; import cpw.mods.fml.common.registry.GameRegistry; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; @@ -42,12 +42,20 @@ public final class FrontRotationTriggerItem extends Item { if (aPlayer instanceof EntityPlayerMP) { if (tTileEntity instanceof IGregTechTileEntity) { IMetaTileEntity metaTE = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity(); - if (metaTE instanceof IFrontRotation) { - ((IFrontRotation) metaTE).rotateAroundFrontPlane(!aPlayer.isSneaking()); + if (metaTE instanceof IAlignment) { + if(aPlayer.isSneaking()){ + ((IAlignment) metaTE).toolSetFlip(null); + }else { + ((IAlignment) metaTE).toolSetRotation(null); + } return true; } - } else if (tTileEntity instanceof IFrontRotation) { - ((IFrontRotation) tTileEntity).rotateAroundFrontPlane(!aPlayer.isSneaking()); + } else if (tTileEntity instanceof IAlignment) { + if(aPlayer.isSneaking()){ + ((IAlignment) tTileEntity).toolSetFlip(null); + }else { + ((IAlignment) tTileEntity).toolSetRotation(null); + } return true; } } diff --git a/src/main/java/com/github/technus/tectech/thing/item/ParametrizerMemoryCard.java b/src/main/java/com/github/technus/tectech/thing/item/ParametrizerMemoryCard.java index e64ab1eaa6..1d1da74a7a 100644 --- a/src/main/java/com/github/technus/tectech/thing/item/ParametrizerMemoryCard.java +++ b/src/main/java/com/github/technus/tectech/thing/item/ParametrizerMemoryCard.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.thing.item; -import com.github.technus.tectech.CommonValues; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.CommonValues; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Param; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_ParamText; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; diff --git a/src/main/java/com/github/technus/tectech/thing/item/TeslaCoilCapacitor.java b/src/main/java/com/github/technus/tectech/thing/item/TeslaCoilCapacitor.java index 8767982898..6e7e8c426d 100644 --- a/src/main/java/com/github/technus/tectech/thing/item/TeslaCoilCapacitor.java +++ b/src/main/java/com/github/technus/tectech/thing/item/TeslaCoilCapacitor.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.thing.item; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -14,7 +14,7 @@ import net.minecraft.util.IIcon; import java.util.List; -import static com.github.technus.tectech.CommonValues.V; +import static com.github.technus.tectech.util.CommonValues.V; import static com.github.technus.tectech.Reference.MODID; import static com.github.technus.tectech.thing.CustomItemList.teslaCapacitor; import static net.minecraft.util.StatCollector.translateToLocal; diff --git a/src/main/java/com/github/technus/tectech/thing/item/TeslaCoilComponent.java b/src/main/java/com/github/technus/tectech/thing/item/TeslaCoilComponent.java index 2ba984c9cc..cc77b7a26c 100644 --- a/src/main/java/com/github/technus/tectech/thing/item/TeslaCoilComponent.java +++ b/src/main/java/com/github/technus/tectech/thing/item/TeslaCoilComponent.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.thing.item; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/github/technus/tectech/thing/item/TeslaCoilCover.java b/src/main/java/com/github/technus/tectech/thing/item/TeslaCoilCover.java index cf08c03f38..20417ebe71 100644 --- a/src/main/java/com/github/technus/tectech/thing/item/TeslaCoilCover.java +++ b/src/main/java/com/github/technus/tectech/thing/item/TeslaCoilCover.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.thing.item; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/github/technus/tectech/thing/item/TeslaStaff.java b/src/main/java/com/github/technus/tectech/thing/item/TeslaStaff.java index 03afa1b66b..9d998953e8 100644 --- a/src/main/java/com/github/technus/tectech/thing/item/TeslaStaff.java +++ b/src/main/java/com/github/technus/tectech/thing/item/TeslaStaff.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.thing.item; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.Reference; import cpw.mods.fml.common.registry.GameRegistry; import gregtech.api.util.GT_Utility; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/IConstructable.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/IConstructable.java deleted file mode 100644 index 096eab8f58..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/IConstructable.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -/** - * Created by Tec on 24.03.2017. - */ -public interface IConstructable { - void construct(int stackSize, boolean hintsOnly); - - @SideOnly(Side.CLIENT) - String[] getStructureDescription(int stackSize); -} - diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/IFrontRotation.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/IFrontRotation.java deleted file mode 100644 index 7ac296e41f..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/IFrontRotation.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity; - -public interface IFrontRotation { - boolean isFrontRotationValid(byte frontRotation, byte frontFacing); - - void rotateAroundFrontPlane(boolean direction); - - void forceSetRotationDoRender(byte frontRotation); - - byte getFrontRotation(); -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/RotationMessage.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/RotationMessage.java deleted file mode 100644 index 92b38e68ea..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/RotationMessage.java +++ /dev/null @@ -1,139 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity; - -import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import cpw.mods.fml.common.network.ByteBufUtils; -import cpw.mods.fml.common.network.simpleimpl.IMessage; -import cpw.mods.fml.common.network.simpleimpl.MessageContext; -import eu.usrv.yamcore.network.client.AbstractClientMessageHandler; -import eu.usrv.yamcore.network.server.AbstractServerMessageHandler; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import io.netty.buffer.ByteBuf; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.common.DimensionManager; - -public class RotationMessage implements IMessage { - int mPosX; - int mPosY; - int mPosZ; - int mPosD; - int mRotF; - - public RotationMessage() { - } - - private RotationMessage(GT_MetaTileEntity_MultiblockBase_EM metaTile) { - IGregTechTileEntity base=metaTile.getBaseMetaTileEntity(); - mPosX=base.getXCoord(); - mPosY=base.getYCoord(); - mPosZ=base.getZCoord(); - mPosD=base.getWorld().provider.dimensionId; - mRotF=metaTile.getFrontRotation(); - } - - private RotationMessage(World world, int x,int y,int z, IFrontRotation front) { - mPosX=x; - mPosY=y; - mPosZ=z; - mPosD=world.provider.dimensionId; - mRotF=front.getFrontRotation(); - } - - @Override - public void fromBytes(ByteBuf pBuffer) { - NBTTagCompound tTag = ByteBufUtils.readTag(pBuffer); - mPosX = tTag.getInteger("posx"); - mPosY = tTag.getInteger("posy"); - mPosZ = tTag.getInteger("posz"); - mPosD = tTag.getInteger("posd"); - mRotF = tTag.getInteger("rotf"); - } - - @Override - public void toBytes(ByteBuf pBuffer) { - NBTTagCompound tFXTag = new NBTTagCompound(); - tFXTag.setInteger("posx", mPosX); - tFXTag.setInteger("posy", mPosY); - tFXTag.setInteger("posz", mPosZ); - tFXTag.setInteger("posd", mPosD); - tFXTag.setInteger("rotf", mRotF); - - ByteBufUtils.writeTag(pBuffer, tFXTag); - } - - public static class RotationQuery extends RotationMessage{ - public RotationQuery() { - } - - public RotationQuery(GT_MetaTileEntity_MultiblockBase_EM metaTile) { - super(metaTile); - } - - public RotationQuery(World world, int x,int y,int z, IFrontRotation front) { - super(world,x,y,z,front); - } - } - - public static class RotationData extends RotationMessage{ - public RotationData() { - } - - private RotationData(RotationQuery query){ - mPosX=query.mPosX; - mPosY=query.mPosY; - mPosZ=query.mPosZ; - mPosD=query.mPosD; - mRotF=query.mRotF; - } - - public RotationData(GT_MetaTileEntity_MultiblockBase_EM metaTile) { - super(metaTile); - } - - public RotationData(World world, int x,int y,int z, IFrontRotation front) { - super(world,x,y,z,front); - } - } - - public static class ClientHandler extends AbstractClientMessageHandler { - @Override - public IMessage handleClientMessage(EntityPlayer pPlayer, RotationData pMessage, MessageContext pCtx) { - if(pPlayer.worldObj.provider.dimensionId==pMessage.mPosD){ - TileEntity te=pPlayer.worldObj.getTileEntity(pMessage.mPosX,pMessage.mPosY,pMessage.mPosZ); - if(te instanceof IGregTechTileEntity){ - IMetaTileEntity meta = ((IGregTechTileEntity) te).getMetaTileEntity(); - if(meta instanceof IFrontRotation){ - ((IFrontRotation) meta).forceSetRotationDoRender((byte)pMessage.mRotF); - } - }else if (te instanceof IFrontRotation){ - ((IFrontRotation) te).forceSetRotationDoRender((byte)pMessage.mRotF); - } - } - return null; - } - } - - public static class ServerHandler extends AbstractServerMessageHandler { - @Override - public IMessage handleServerMessage(EntityPlayer pPlayer, RotationQuery pMessage, MessageContext pCtx) { - World world= DimensionManager.getWorld(pMessage.mPosD); - if(world!=null) { - TileEntity te = world.getTileEntity(pMessage.mPosX, pMessage.mPosY, pMessage.mPosZ); - if (te instanceof IGregTechTileEntity) { - IMetaTileEntity meta = ((IGregTechTileEntity) te).getMetaTileEntity(); - if (meta instanceof IFrontRotation) { - pMessage.mRotF=((IFrontRotation) meta).getFrontRotation(); - return new RotationData(pMessage); - } - } else if (te instanceof IFrontRotation) { - pMessage.mRotF=((IFrontRotation) te).getFrontRotation(); - return new RotationData(pMessage); - } - } - return null; - } - } -} \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Capacitor.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Capacitor.java index 4527a9d6ff..b4e8f03a74 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Capacitor.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Capacitor.java @@ -1,9 +1,9 @@ package com.github.technus.tectech.thing.metaTileEntity.hatch; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.Reference; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.thing.metaTileEntity.hatch.gui.GT_Container_Capacitor; import com.github.technus.tectech.thing.metaTileEntity.hatch.gui.GT_GUIContainer_Capacitor; import cpw.mods.fml.relauncher.Side; @@ -23,8 +23,8 @@ import net.minecraft.util.EnumChatFormatting; import java.util.HashMap; import java.util.Map; -import static com.github.technus.tectech.CommonValues.V; -import static com.github.technus.tectech.Util.getUniqueIdentifier; +import static com.github.technus.tectech.util.CommonValues.V; +import static com.github.technus.tectech.util.Util.getUniqueIdentifier; import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; import static net.minecraft.util.StatCollector.translateToLocal; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_CreativeData.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_CreativeData.java index 3d18550d09..815f8006c4 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_CreativeData.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_CreativeData.java @@ -1,10 +1,10 @@ package com.github.technus.tectech.thing.metaTileEntity.hatch; -import com.github.technus.tectech.CommonValues; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.CommonValues; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.mechanics.dataTransport.QuantumDataPacket; import com.github.technus.tectech.thing.metaTileEntity.pipe.GT_MetaTileEntity_Pipe_Data; -import com.github.technus.tectech.thing.metaTileEntity.pipe.IConnectsToDataPipe; +import com.github.technus.tectech.mechanics.pipe.IConnectsToDataPipe; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; @@ -13,7 +13,7 @@ import gregtech.api.util.GT_Utility; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; -import static com.github.technus.tectech.CommonValues.MOVE_AT; +import static com.github.technus.tectech.util.CommonValues.MOVE_AT; import static net.minecraft.util.StatCollector.translateToLocal; /** diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_CreativeMaintenance.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_CreativeMaintenance.java index 6f5a9b377c..4e719f8ec8 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_CreativeMaintenance.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_CreativeMaintenance.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.hatch; -import com.github.technus.tectech.CommonValues; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.CommonValues; +import com.github.technus.tectech.util.Util; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.MetaTileEntity; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DataConnector.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DataConnector.java index 6d0706971d..6cbf1e801b 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DataConnector.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DataConnector.java @@ -1,9 +1,9 @@ package com.github.technus.tectech.thing.metaTileEntity.hatch; -import com.github.technus.tectech.CommonValues; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.CommonValues; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.mechanics.dataTransport.DataPacket; -import com.github.technus.tectech.thing.metaTileEntity.pipe.IConnectsToDataPipe; +import com.github.technus.tectech.mechanics.pipe.IConnectsToDataPipe; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Dyes; @@ -21,7 +21,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraftforge.fluids.FluidStack; import org.apache.commons.lang3.reflect.FieldUtils; -import static com.github.technus.tectech.CommonValues.MOVE_AT; +import static com.github.technus.tectech.util.CommonValues.MOVE_AT; import static gregtech.api.enums.Dyes.MACHINE_METAL; import static net.minecraft.util.StatCollector.translateToLocalFormatted; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DynamoMulti.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DynamoMulti.java index aeaa54d241..bbc11f10fe 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DynamoMulti.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DynamoMulti.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.hatch; -import com.github.technus.tectech.CommonValues; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.CommonValues; +import com.github.technus.tectech.util.Util; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.MetaTileEntity; @@ -9,7 +9,7 @@ import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; -import static com.github.technus.tectech.CommonValues.V; +import static com.github.technus.tectech.util.CommonValues.V; import static com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_IN_POWER_TT; import static net.minecraft.util.StatCollector.translateToLocal; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DynamoTunnel.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DynamoTunnel.java index 60a663e0c7..fb3487bc09 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DynamoTunnel.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DynamoTunnel.java @@ -1,9 +1,9 @@ package com.github.technus.tectech.thing.metaTileEntity.hatch; -import com.github.technus.tectech.CommonValues; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.CommonValues; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.thing.metaTileEntity.pipe.GT_MetaTileEntity_Pipe_Energy; -import com.github.technus.tectech.thing.metaTileEntity.pipe.IConnectsToEnergyTunnel; +import com.github.technus.tectech.mechanics.pipe.IConnectsToEnergyTunnel; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; @@ -13,8 +13,8 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; -import static com.github.technus.tectech.CommonValues.TRANSFER_AT; -import static com.github.technus.tectech.CommonValues.V; +import static com.github.technus.tectech.util.CommonValues.TRANSFER_AT; +import static com.github.technus.tectech.util.CommonValues.V; import static com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_OUT_LASER_TT; import static net.minecraft.util.StatCollector.translateToLocal; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ElementalContainer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ElementalContainer.java index 682c7536bf..d0b9411773 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ElementalContainer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ElementalContainer.java @@ -1,11 +1,11 @@ package com.github.technus.tectech.thing.metaTileEntity.hatch; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.iElementalInstanceContainer; import com.github.technus.tectech.mechanics.elementalMatter.core.tElementalException; -import com.github.technus.tectech.thing.metaTileEntity.pipe.IConnectsToElementalPipe; +import com.github.technus.tectech.mechanics.pipe.IConnectsToElementalPipe; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Dyes; @@ -23,7 +23,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraftforge.fluids.FluidStack; import org.apache.commons.lang3.reflect.FieldUtils; -import static com.github.technus.tectech.CommonValues.*; +import static com.github.technus.tectech.util.CommonValues.*; import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; import static gregtech.api.enums.Dyes.MACHINE_METAL; import static gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase.isValidMetaTileEntity; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_EnergyMulti.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_EnergyMulti.java index 9a16aa1339..4410372d47 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_EnergyMulti.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_EnergyMulti.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.hatch; -import com.github.technus.tectech.CommonValues; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.CommonValues; +import com.github.technus.tectech.util.Util; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.MetaTileEntity; @@ -10,7 +10,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; -import static com.github.technus.tectech.CommonValues.V; +import static com.github.technus.tectech.util.CommonValues.V; import static com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_IN_POWER_TT; import static net.minecraft.util.StatCollector.translateToLocal; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_EnergyTunnel.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_EnergyTunnel.java index 6034e51a98..2407f2ab0a 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_EnergyTunnel.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_EnergyTunnel.java @@ -1,18 +1,17 @@ package com.github.technus.tectech.thing.metaTileEntity.hatch; -import com.github.technus.tectech.CommonValues; -import com.github.technus.tectech.Util; -import com.github.technus.tectech.thing.metaTileEntity.pipe.IConnectsToEnergyTunnel; +import com.github.technus.tectech.util.CommonValues; +import com.github.technus.tectech.util.Util; +import com.github.technus.tectech.mechanics.pipe.IConnectsToEnergyTunnel; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.MetaTileEntity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; -import static com.github.technus.tectech.CommonValues.TRANSFER_AT; -import static com.github.technus.tectech.CommonValues.V; +import static com.github.technus.tectech.util.CommonValues.TRANSFER_AT; +import static com.github.technus.tectech.util.CommonValues.V; import static com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_IN_LASER_TT; import static net.minecraft.util.StatCollector.translateToLocal; @@ -39,16 +38,6 @@ public class GT_MetaTileEntity_Hatch_EnergyTunnel extends GT_MetaTileEntity_Hatc return new ITexture[]{aBaseTexture, OVERLAYS_ENERGY_IN_LASER_TT[mTier]}; } - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - } - @Override public boolean isSimpleMachine() { return true; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Holder.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Holder.java index c7b0eb983e..3bbd6b9d54 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Holder.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Holder.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.hatch; -import com.github.technus.tectech.CommonValues; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.CommonValues; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.thing.metaTileEntity.hatch.gui.GT_Container_Holder; import com.github.technus.tectech.thing.metaTileEntity.hatch.gui.GT_GUIContainer_Holder; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_InputData.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_InputData.java index c628a92cb4..386a08b790 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_InputData.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_InputData.java @@ -1,9 +1,9 @@ package com.github.technus.tectech.thing.metaTileEntity.hatch; -import com.github.technus.tectech.CommonValues; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.CommonValues; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.mechanics.dataTransport.QuantumDataPacket; -import com.github.technus.tectech.thing.metaTileEntity.pipe.IConnectsToDataPipe; +import com.github.technus.tectech.mechanics.pipe.IConnectsToDataPipe; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.MetaTileEntity; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_InputDataItems.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_InputDataItems.java index e54f4f3354..f270971f4d 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_InputDataItems.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_InputDataItems.java @@ -1,9 +1,9 @@ package com.github.technus.tectech.thing.metaTileEntity.hatch; -import com.github.technus.tectech.CommonValues; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.CommonValues; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.mechanics.dataTransport.InventoryDataPacket; -import com.github.technus.tectech.thing.metaTileEntity.pipe.IConnectsToDataPipe; +import com.github.technus.tectech.mechanics.pipe.IConnectsToDataPipe; import gregtech.api.enums.Dyes; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; @@ -20,7 +20,7 @@ import org.apache.commons.lang3.reflect.FieldUtils; import java.util.ArrayList; -import static com.github.technus.tectech.CommonValues.MOVE_AT; +import static com.github.technus.tectech.util.CommonValues.MOVE_AT; import static com.github.technus.tectech.recipe.TT_recipeAdder.nullItem; import static com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DataConnector.*; import static gregtech.api.enums.Dyes.MACHINE_METAL; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_InputElemental.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_InputElemental.java index cfa15b4cf3..b0f71aab24 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_InputElemental.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_InputElemental.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.thing.metaTileEntity.hatch; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.MetaTileEntity; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_OutputData.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_OutputData.java index 083a8ee1f1..87a9c93785 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_OutputData.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_OutputData.java @@ -1,10 +1,10 @@ package com.github.technus.tectech.thing.metaTileEntity.hatch; -import com.github.technus.tectech.CommonValues; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.CommonValues; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.mechanics.dataTransport.QuantumDataPacket; import com.github.technus.tectech.thing.metaTileEntity.pipe.GT_MetaTileEntity_Pipe_Data; -import com.github.technus.tectech.thing.metaTileEntity.pipe.IConnectsToDataPipe; +import com.github.technus.tectech.mechanics.pipe.IConnectsToDataPipe; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_OutputDataItems.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_OutputDataItems.java index d98675d0f2..385de4343c 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_OutputDataItems.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_OutputDataItems.java @@ -1,10 +1,10 @@ package com.github.technus.tectech.thing.metaTileEntity.hatch; -import com.github.technus.tectech.CommonValues; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.CommonValues; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.mechanics.dataTransport.InventoryDataPacket; import com.github.technus.tectech.thing.metaTileEntity.pipe.GT_MetaTileEntity_Pipe_Data; -import com.github.technus.tectech.thing.metaTileEntity.pipe.IConnectsToDataPipe; +import com.github.technus.tectech.mechanics.pipe.IConnectsToDataPipe; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_OutputElemental.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_OutputElemental.java index d826daf355..a1e4f5a8a5 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_OutputElemental.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_OutputElemental.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.thing.metaTileEntity.hatch; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.thing.metaTileEntity.pipe.GT_MetaTileEntity_Pipe_EM; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_OverflowElemental.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_OverflowElemental.java index 362ba9f3c5..ad7f1fe159 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_OverflowElemental.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_OverflowElemental.java @@ -1,8 +1,8 @@ package com.github.technus.tectech.thing.metaTileEntity.hatch; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Dyes; @@ -28,8 +28,8 @@ import org.apache.commons.lang3.reflect.FieldUtils; import java.util.Locale; -import static com.github.technus.tectech.CommonValues.DISPERSE_AT; -import static com.github.technus.tectech.CommonValues.V; +import static com.github.technus.tectech.util.CommonValues.DISPERSE_AT; +import static com.github.technus.tectech.util.CommonValues.V; import static com.github.technus.tectech.loader.MainLoader.elementalPollution; import static gregtech.api.enums.Dyes.MACHINE_METAL; import static gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase.isValidMetaTileEntity; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Param.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Param.java index 7bcc796e9d..7b8a488e57 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Param.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Param.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.hatch; -import com.github.technus.tectech.CommonValues; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.CommonValues; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.thing.metaTileEntity.hatch.gui.GT_Container_Param; import com.github.technus.tectech.thing.metaTileEntity.hatch.gui.GT_Container_ParamAdv; import com.github.technus.tectech.thing.metaTileEntity.hatch.gui.GT_GUIContainer_Param; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ParamText.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ParamText.java index 09f11710da..bc4562307b 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ParamText.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ParamText.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.thing.metaTileEntity.hatch; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.loader.NetworkDispatcher; import com.github.technus.tectech.thing.metaTileEntity.hatch.gui.GT_Container_ParamText; import com.github.technus.tectech.thing.metaTileEntity.hatch.gui.GT_GUIContainer_ParamText; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Rack.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Rack.java index 47d7037946..d9d5f90593 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Rack.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Rack.java @@ -1,9 +1,9 @@ package com.github.technus.tectech.thing.metaTileEntity.hatch; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.Reference; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.thing.metaTileEntity.hatch.gui.GT_Container_Rack; import com.github.technus.tectech.thing.metaTileEntity.hatch.gui.GT_GUIContainer_Rack; import cpw.mods.fml.common.Loader; @@ -28,8 +28,8 @@ import org.apache.commons.lang3.reflect.FieldUtils; import java.util.HashMap; import java.util.Map; -import static com.github.technus.tectech.CommonValues.MULTI_CHECK_AT; -import static com.github.technus.tectech.Util.getUniqueIdentifier; +import static com.github.technus.tectech.util.CommonValues.MULTI_CHECK_AT; +import static com.github.technus.tectech.util.Util.getUniqueIdentifier; import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; import static net.minecraft.util.StatCollector.translateToLocal; import static net.minecraft.util.StatCollector.translateToLocalFormatted; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Uncertainty.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Uncertainty.java index 80b7185ba4..d723dd908c 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Uncertainty.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Uncertainty.java @@ -1,8 +1,8 @@ package com.github.technus.tectech.thing.metaTileEntity.hatch; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.thing.metaTileEntity.hatch.gui.GT_Container_Uncertainty; import com.github.technus.tectech.thing.metaTileEntity.hatch.gui.GT_GUIContainer_Uncertainty; import com.github.technus.tectech.thing.metaTileEntity.hatch.gui.GT_GUIContainer_UncertaintyAdv; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/TextParametersMessage.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/TextParametersMessage.java index d206143700..b0b53f6c79 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/TextParametersMessage.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/TextParametersMessage.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.hatch; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.thing.metaTileEntity.hatch.gui.GT_GUIContainer_ParamText; import cpw.mods.fml.common.network.ByteBufUtils; import cpw.mods.fml.common.network.simpleimpl.IMessage; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/gui/GT_Container_Param.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/gui/GT_Container_Param.java index cb189538d8..da067078c9 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/gui/GT_Container_Param.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/gui/GT_Container_Param.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.hatch.gui; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Param; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/gui/GT_Container_ParamAdv.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/gui/GT_Container_ParamAdv.java index b3b720732d..c8fa85996a 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/gui/GT_Container_ParamAdv.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/gui/GT_Container_ParamAdv.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.hatch.gui; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Param; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/gui/GT_Container_ParamText.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/gui/GT_Container_ParamText.java index 7b6f97981f..9c0e08948f 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/gui/GT_Container_ParamText.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/gui/GT_Container_ParamText.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.hatch.gui; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.loader.NetworkDispatcher; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_ParamText; import com.github.technus.tectech.thing.metaTileEntity.hatch.TextParametersMessage; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/gui/GT_GUIContainer_Param.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/gui/GT_GUIContainer_Param.java index b094cd2d93..7eb71651bb 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/gui/GT_GUIContainer_Param.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/gui/GT_GUIContainer_Param.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.thing.metaTileEntity.hatch.gui; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.font.TecTechFontRender; import gregtech.api.gui.GT_GUIContainerMetaTile_Machine; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/gui/GT_GUIContainer_ParamAdv.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/gui/GT_GUIContainer_ParamAdv.java index 45e4f1fb65..4346118619 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/gui/GT_GUIContainer_ParamAdv.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/gui/GT_GUIContainer_ParamAdv.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.thing.metaTileEntity.hatch.gui; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.font.TecTechFontRender; import gregtech.api.gui.GT_GUIContainerMetaTile_Machine; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/gui/GT_GUIContainer_ParamText.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/gui/GT_GUIContainer_ParamText.java index 2b17563db0..50e608294e 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/gui/GT_GUIContainer_ParamText.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/gui/GT_GUIContainer_ParamText.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.thing.metaTileEntity.hatch.gui; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.font.TecTechFontRender; import com.github.technus.tectech.loader.NetworkDispatcher; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_ParamText; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_annihilation.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_annihilation.java index 21e020be01..d52a3c23f7 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_annihilation.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_annihilation.java @@ -1,11 +1,11 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.thing.block.QuantumGlassBlock; -import com.github.technus.tectech.thing.metaTileEntity.IConstructable; +import com.github.technus.tectech.mechanics.constructible.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedTexture; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; @@ -17,7 +17,7 @@ import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; -import static com.github.technus.tectech.Util.StructureBuilderExtreme; +import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -97,14 +97,14 @@ public class GT_MetaTileEntity_EM_annihilation extends GT_MetaTileEntity_Multibl @Override public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { if (aSide == aFacing) { - return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][12], new TT_RenderedTexture(aActive ? ScreenON : ScreenOFF)}; + return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][12], new TT_RenderedExtendedFacingTexture(aActive ? ScreenON : ScreenOFF)}; } return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][12]}; } @Override public void construct(int stackSize, boolean hintsOnly) { - StructureBuilderExtreme(shape, blockType, blockMeta, 5, 5, 0, getBaseMetaTileEntity(), this, hintsOnly); + StructureBuilderExtreme(shape, blockType, blockMeta, 5, 5, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java index 79ae424bcb..74ebae9f57 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java @@ -1,11 +1,11 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.thing.block.QuantumGlassBlock; -import com.github.technus.tectech.thing.metaTileEntity.IConstructable; +import com.github.technus.tectech.mechanics.constructible.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedTexture; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; @@ -17,7 +17,7 @@ import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; -import static com.github.technus.tectech.Util.StructureBuilderExtreme; +import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -291,7 +291,7 @@ public class GT_MetaTileEntity_EM_bhg extends GT_MetaTileEntity_MultiblockBase_E @Override public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { if (aSide == aFacing) { - return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][12], new TT_RenderedTexture(aActive ? ScreenON : ScreenOFF)}; + return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][12], new TT_RenderedExtendedFacingTexture(aActive ? ScreenON : ScreenOFF)}; } return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][12]}; } @@ -299,9 +299,9 @@ public class GT_MetaTileEntity_EM_bhg extends GT_MetaTileEntity_MultiblockBase_E @Override public void construct(int stackSize, boolean hintsOnly) { if ((stackSize & 1) == 1) { - StructureBuilderExtreme(shape, blockType, blockMeta, 16, 16, 0, getBaseMetaTileEntity(), this, hintsOnly); + StructureBuilderExtreme(shape, blockType, blockMeta, 16, 16, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } else { - StructureBuilderExtreme(shape2, blockType2, blockMeta2, 16, 16, 0, getBaseMetaTileEntity(), this, hintsOnly); + StructureBuilderExtreme(shape2, blockType2, blockMeta2, 16, 16, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java index 2b0b0f8465..d37fcfdc4b 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.definitions.dComplexAspectDefinition; import com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.definitions.ePrimalAspectDefinition; @@ -13,10 +13,10 @@ import com.github.technus.tectech.mechanics.elementalMatter.definitions.complex. import com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.eQuarkDefinition; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.thing.casing.TT_Container_Casings; -import com.github.technus.tectech.thing.metaTileEntity.IConstructable; +import com.github.technus.tectech.mechanics.constructible.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputElemental; import com.github.technus.tectech.thing.metaTileEntity.multi.base.*; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedTexture; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; @@ -33,7 +33,7 @@ import net.minecraftforge.common.util.ForgeDirection; import java.util.HashMap; -import static com.github.technus.tectech.Util.StructureBuilderExtreme; +import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -592,9 +592,9 @@ public class GT_MetaTileEntity_EM_collider extends GT_MetaTileEntity_MultiblockB public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { if (aSide == aFacing) { if (aFacing % 2 == 0) { - return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][4], new TT_RenderedTexture(aActive ? ScreenON : ScreenOFF)}; + return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][4], new TT_RenderedExtendedFacingTexture(aActive ? ScreenON : ScreenOFF)}; } else { - return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][4], new TT_RenderedTexture(aActive ? ScreenON_Slave : ScreenOFF_Slave)}; + return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][4], new TT_RenderedExtendedFacingTexture(aActive ? ScreenON_Slave : ScreenOFF_Slave)}; } } return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][4]}; @@ -682,9 +682,9 @@ public class GT_MetaTileEntity_EM_collider extends GT_MetaTileEntity_MultiblockB } } if ((stackSize & 1) == 1) { - StructureBuilderExtreme(shape, blockType, blockMeta1, 11, 1, 18, iGregTechTileEntity, this, hintsOnly); + StructureBuilderExtreme(shape, blockType, blockMeta1, 11, 1, 18, iGregTechTileEntity, getExtendedFacing(), hintsOnly); } else { - StructureBuilderExtreme(shape, blockType, blockMeta2, 11, 1, 18, iGregTechTileEntity, this, hintsOnly); + StructureBuilderExtreme(shape, blockType, blockMeta2, 11, 1, 18, iGregTechTileEntity, getExtendedFacing(), hintsOnly); } } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java index edb581179e..1afbdf66e0 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java @@ -1,16 +1,16 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.Util; -import com.github.technus.tectech.Vec3pos; +import com.github.technus.tectech.util.Util; +import com.github.technus.tectech.util.Vec3Impl; import com.github.technus.tectech.mechanics.dataTransport.QuantumDataPacket; -import com.github.technus.tectech.thing.metaTileEntity.IConstructable; +import com.github.technus.tectech.mechanics.constructible.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputData; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_OutputData; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Rack; import com.github.technus.tectech.thing.metaTileEntity.multi.base.*; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedTexture; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; @@ -28,8 +28,8 @@ import net.minecraft.util.ResourceLocation; import java.util.ArrayList; -import static com.github.technus.tectech.CommonValues.V; -import static com.github.technus.tectech.Util.StructureBuilderExtreme; +import static com.github.technus.tectech.util.CommonValues.V; +import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -224,7 +224,7 @@ public class GT_MetaTileEntity_EM_computer extends GT_MetaTileEntity_MultiblockB @Override public void outputAfterRecipe_EM() { if (!eOutputData.isEmpty()) { - Vec3pos pos = new Vec3pos(getBaseMetaTileEntity()); + Vec3Impl pos = new Vec3Impl(getBaseMetaTileEntity()); QuantumDataPacket pack = new QuantumDataPacket(eAvailableData / eOutputData.size()).unifyTraceWith(pos); if (pack == null) { return; @@ -265,7 +265,7 @@ public class GT_MetaTileEntity_EM_computer extends GT_MetaTileEntity_MultiblockB @Override public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { if (aSide == aFacing) { - return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][3], new TT_RenderedTexture(aActive ? ScreenON : ScreenOFF)}; + return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][3], new TT_RenderedExtendedFacingTexture(aActive ? ScreenON : ScreenOFF)}; } return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][3]}; } @@ -337,16 +337,16 @@ public class GT_MetaTileEntity_EM_computer extends GT_MetaTileEntity_MultiblockB @Override public void construct(int stackSize, boolean hintsOnly) { IGregTechTileEntity igt = getBaseMetaTileEntity(); - StructureBuilderExtreme(front, blockType, blockMeta, 1, 2, 0, igt, this, hintsOnly); - StructureBuilderExtreme(cap, blockType, blockMeta, 1, 2, -1, igt, this, hintsOnly); + StructureBuilderExtreme(front, blockType, blockMeta, 1, 2, 0, igt, getExtendedFacing(), hintsOnly); + StructureBuilderExtreme(cap, blockType, blockMeta, 1, 2, -1, igt, getExtendedFacing(), hintsOnly); byte offset = -2; for (int rackSlices = Math.min(stackSize, 12); rackSlices > 0; rackSlices--) { - StructureBuilderExtreme(slice, blockType, blockMeta, 1, 2, offset--, igt, this, hintsOnly); + StructureBuilderExtreme(slice, blockType, blockMeta, 1, 2, offset--, igt, getExtendedFacing(), hintsOnly); } - StructureBuilderExtreme(cap, blockType, blockMeta, 1, 2, offset--, igt, this, hintsOnly); - StructureBuilderExtreme(terminator, blockType, blockMeta, 1, 2, offset, igt, this, hintsOnly); + StructureBuilderExtreme(cap, blockType, blockMeta, 1, 2, offset--, igt, getExtendedFacing(), hintsOnly); + StructureBuilderExtreme(terminator, blockType, blockMeta, 1, 2, offset, igt, getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_crafting.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_crafting.java index 263a46a9d3..3083f36721 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_crafting.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_crafting.java @@ -1,11 +1,11 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.thing.block.QuantumGlassBlock; -import com.github.technus.tectech.thing.metaTileEntity.IConstructable; +import com.github.technus.tectech.mechanics.constructible.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedTexture; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; @@ -17,7 +17,7 @@ import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; -import static com.github.technus.tectech.Util.StructureBuilderExtreme; +import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -99,14 +99,14 @@ public class GT_MetaTileEntity_EM_crafting extends GT_MetaTileEntity_MultiblockB @Override public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { if (aSide == aFacing) { - return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][12], new TT_RenderedTexture(aActive ? ScreenON : ScreenOFF)}; + return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][12], new TT_RenderedExtendedFacingTexture(aActive ? ScreenON : ScreenOFF)}; } return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][12]}; } @Override public void construct(int stackSize, boolean hintsOnly) { - StructureBuilderExtreme(shape, blockType, blockMeta, 2, 2, 0, getBaseMetaTileEntity(), this, hintsOnly); + StructureBuilderExtreme(shape, blockType, blockMeta, 2, 2, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java index f18fe57b6f..57ab6d770d 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java @@ -1,16 +1,16 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.Reference; import com.github.technus.tectech.mechanics.dataTransport.InventoryDataPacket; -import com.github.technus.tectech.thing.metaTileEntity.IConstructable; +import com.github.technus.tectech.mechanics.constructible.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputDataItems; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_OutputDataItems; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_Container_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_GUIContainer_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedTexture; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; @@ -27,8 +27,8 @@ import net.minecraft.util.ResourceLocation; import java.util.ArrayList; -import static com.github.technus.tectech.CommonValues.V; -import static com.github.technus.tectech.Util.StructureBuilderExtreme; +import static com.github.technus.tectech.util.CommonValues.V; +import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.recipe.TT_recipeAdder.nullItem; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; @@ -138,7 +138,7 @@ public class GT_MetaTileEntity_EM_dataBank extends GT_MetaTileEntity_MultiblockB @Override public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { if (aSide == aFacing) { - return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][1], new TT_RenderedTexture(aActive ? GT_MetaTileEntity_MultiblockBase_EM.ScreenON : GT_MetaTileEntity_MultiblockBase_EM.ScreenOFF)}; + return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][1], new TT_RenderedExtendedFacingTexture(aActive ? GT_MetaTileEntity_MultiblockBase_EM.ScreenON : GT_MetaTileEntity_MultiblockBase_EM.ScreenOFF)}; } return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][1]}; } @@ -171,7 +171,7 @@ public class GT_MetaTileEntity_EM_dataBank extends GT_MetaTileEntity_MultiblockB @Override public void construct(int stackSize, boolean hintsOnly) { - StructureBuilderExtreme(shape, blockType, blockMeta, 2, 1, 0, getBaseMetaTileEntity(), this, hintsOnly); + StructureBuilderExtreme(shape, blockType, blockMeta, 2, 1, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java index 90879f1b60..ffea7781ee 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java @@ -1,13 +1,13 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; -import com.github.technus.tectech.thing.metaTileEntity.IConstructable; +import com.github.technus.tectech.mechanics.constructible.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputElemental; import com.github.technus.tectech.thing.metaTileEntity.multi.base.*; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedTexture; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; @@ -26,8 +26,8 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import org.apache.commons.lang3.reflect.FieldUtils; -import static com.github.technus.tectech.CommonValues.VN; -import static com.github.technus.tectech.Util.StructureBuilderExtreme; +import static com.github.technus.tectech.util.CommonValues.VN; +import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -214,7 +214,7 @@ public class GT_MetaTileEntity_EM_decay extends GT_MetaTileEntity_MultiblockBase @Override public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { if (aSide == aFacing) { - return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][12], new TT_RenderedTexture(aActive ? ScreenON : ScreenOFF)}; + return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][12], new TT_RenderedExtendedFacingTexture(aActive ? ScreenON : ScreenOFF)}; } return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][12]}; } @@ -244,7 +244,7 @@ public class GT_MetaTileEntity_EM_decay extends GT_MetaTileEntity_MultiblockBase @Override public void construct(int stackSize, boolean hintsOnly) { - StructureBuilderExtreme(shape, blockType, blockMeta, 2, 2, 0, getBaseMetaTileEntity(), this, hintsOnly); + StructureBuilderExtreme(shape, blockType, blockMeta, 2, 2, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java index 27b770c88b..cb13abf358 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java @@ -1,13 +1,13 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.iHasElementalDefinition; import com.github.technus.tectech.mechanics.elementalMatter.core.transformations.aOredictDequantizationInfo; import com.github.technus.tectech.mechanics.elementalMatter.core.transformations.iExchangeInfo; import com.github.technus.tectech.thing.block.QuantumGlassBlock; -import com.github.technus.tectech.thing.metaTileEntity.IConstructable; +import com.github.technus.tectech.mechanics.constructible.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputElemental; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; @@ -24,8 +24,8 @@ import net.minecraftforge.oredict.OreDictionary; import java.util.ArrayList; -import static com.github.technus.tectech.CommonValues.V; -import static com.github.technus.tectech.Util.StructureBuilderExtreme; +import static com.github.technus.tectech.util.CommonValues.V; +import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.mechanics.elementalMatter.core.templates.iElementalDefinition.STABLE_RAW_LIFE_TIME; import static com.github.technus.tectech.mechanics.elementalMatter.definitions.complex.dAtomDefinition.refMass; import static com.github.technus.tectech.mechanics.elementalMatter.definitions.complex.dAtomDefinition.refUnstableMass; @@ -149,7 +149,7 @@ public class GT_MetaTileEntity_EM_dequantizer extends GT_MetaTileEntity_Multiblo @Override public void construct(int stackSize, boolean hintsOnly) { - StructureBuilderExtreme(shape, blockType, blockMeta, 1, 1, 0, getBaseMetaTileEntity(), this, hintsOnly); + StructureBuilderExtreme(shape, blockType, blockMeta, 1, 1, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java index 4e8e8d27ec..23a36f0edb 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java @@ -1,10 +1,10 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; import cofh.api.energy.IEnergyContainerItem; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.Reference; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.thing.metaTileEntity.IConstructable; +import com.github.technus.tectech.mechanics.constructible.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_Container_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_GUIContainer_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; @@ -22,7 +22,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; -import static com.github.technus.tectech.Util.StructureBuilderExtreme; +import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -183,7 +183,7 @@ public class GT_MetaTileEntity_EM_infuser extends GT_MetaTileEntity_MultiblockBa @Override public void construct(int stackSize, boolean hintsOnly) { - StructureBuilderExtreme(shape, blockType, blockMeta, 1, 2, 0, getBaseMetaTileEntity(), this, hintsOnly); + StructureBuilderExtreme(shape, blockType, blockMeta, 1, 2, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_junction.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_junction.java index aba87eaf6b..448f0a5563 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_junction.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_junction.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.CommonValues; -import com.github.technus.tectech.thing.metaTileEntity.IConstructable; +import com.github.technus.tectech.util.CommonValues; +import com.github.technus.tectech.mechanics.constructible.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputElemental; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_OutputElemental; import com.github.technus.tectech.thing.metaTileEntity.multi.base.*; @@ -12,8 +12,8 @@ import net.minecraft.block.Block; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; -import static com.github.technus.tectech.CommonValues.V; -import static com.github.technus.tectech.Util.StructureBuilderExtreme; +import static com.github.technus.tectech.util.CommonValues.V; +import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.*; @@ -170,7 +170,7 @@ public class GT_MetaTileEntity_EM_junction extends GT_MetaTileEntity_MultiblockB @Override public void construct(int stackSize, boolean hintsOnly) { - StructureBuilderExtreme(shape, blockType, blockMeta, 1, 1, 0, getBaseMetaTileEntity(), this, hintsOnly); + StructureBuilderExtreme(shape, blockType, blockMeta, 1, 1, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java index 4d65b67ed0..4696164979 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.Reference; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; @@ -11,7 +11,7 @@ import com.github.technus.tectech.mechanics.elementalMatter.core.transformations import com.github.technus.tectech.mechanics.elementalMatter.core.transformations.aOredictQuantizationInfo; import com.github.technus.tectech.mechanics.elementalMatter.core.transformations.bTransformationInfo; import com.github.technus.tectech.thing.block.QuantumGlassBlock; -import com.github.technus.tectech.thing.metaTileEntity.IConstructable; +import com.github.technus.tectech.mechanics.constructible.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import cpw.mods.fml.relauncher.Side; @@ -28,9 +28,9 @@ import net.minecraftforge.oredict.OreDictionary; import java.util.ArrayList; -import static com.github.technus.tectech.CommonValues.V; -import static com.github.technus.tectech.Util.StructureBuilderExtreme; -import static com.github.technus.tectech.Util.isInputEqual; +import static com.github.technus.tectech.util.CommonValues.V; +import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; +import static com.github.technus.tectech.util.Util.isInputEqual; import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; import static com.github.technus.tectech.mechanics.elementalMatter.core.templates.iElementalDefinition.DEFAULT_ENERGY_LEVEL; import static com.github.technus.tectech.mechanics.elementalMatter.core.templates.iElementalDefinition.STABLE_RAW_LIFE_TIME; @@ -198,7 +198,7 @@ public class GT_MetaTileEntity_EM_quantizer extends GT_MetaTileEntity_Multiblock @Override public void construct(int stackSize, boolean hintsOnly) { - StructureBuilderExtreme(shape, blockType, blockMeta, 1, 1, 0, getBaseMetaTileEntity(), this, hintsOnly); + StructureBuilderExtreme(shape, blockType, blockMeta, 1, 1, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java index 93111e1f60..e9bb65c19f 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java @@ -1,13 +1,13 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.recipe.TT_recipe; -import com.github.technus.tectech.thing.metaTileEntity.IConstructable; +import com.github.technus.tectech.mechanics.constructible.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Holder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedTexture; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import cpw.mods.fml.common.registry.GameRegistry; import gregtech.api.enums.ItemList; import gregtech.api.enums.Textures; @@ -35,9 +35,9 @@ import org.apache.commons.lang3.reflect.FieldUtils; import java.util.ArrayList; import java.util.LinkedHashMap; -import static com.github.technus.tectech.CommonValues.V; -import static com.github.technus.tectech.CommonValues.VN; -import static com.github.technus.tectech.Util.StructureBuilderExtreme; +import static com.github.technus.tectech.util.CommonValues.V; +import static com.github.technus.tectech.util.CommonValues.VN; +import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.recipe.TT_recipe.E_RECIPE_ID; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; @@ -394,7 +394,7 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB @Override public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { if (aSide == aFacing) { - return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][3], new TT_RenderedTexture(aActive ? GT_MetaTileEntity_MultiblockBase_EM.ScreenON : GT_MetaTileEntity_MultiblockBase_EM.ScreenOFF)}; + return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][3], new TT_RenderedExtendedFacingTexture(aActive ? GT_MetaTileEntity_MultiblockBase_EM.ScreenON : GT_MetaTileEntity_MultiblockBase_EM.ScreenOFF)}; } return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][3]}; } @@ -553,7 +553,7 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB @Override public void construct(int stackSize, boolean hintsOnly) { - StructureBuilderExtreme(shape, blockType, blockMeta, 1, 3, 4, getBaseMetaTileEntity(), this, hintsOnly); + StructureBuilderExtreme(shape, blockType, blockMeta, 1, 3, 4, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java index e03ea94928..be869b2ba9 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalDefinitionStack; @@ -11,7 +11,7 @@ import com.github.technus.tectech.thing.CustomItemList; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.thing.block.QuantumStuffBlock; import com.github.technus.tectech.thing.item.ElementalDefinitionScanStorage_EM; -import com.github.technus.tectech.thing.metaTileEntity.IConstructable; +import com.github.technus.tectech.mechanics.constructible.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; import com.github.technus.tectech.thing.metaTileEntity.multi.base.*; import gregtech.api.enums.ItemList; @@ -32,10 +32,10 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraftforge.common.util.ForgeDirection; import org.apache.commons.lang3.reflect.FieldUtils; -import static com.github.technus.tectech.CommonValues.V; -import static com.github.technus.tectech.CommonValues.VN; -import static com.github.technus.tectech.Util.StructureBuilderExtreme; -import static com.github.technus.tectech.Util.areBitsSet; +import static com.github.technus.tectech.util.CommonValues.V; +import static com.github.technus.tectech.util.CommonValues.VN; +import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; +import static com.github.technus.tectech.util.Util.areBitsSet; import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; import static com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.cPrimitiveDefinition.nbtE__; import static com.github.technus.tectech.recipe.TT_recipe.E_RECIPE_ID; @@ -514,7 +514,7 @@ public class GT_MetaTileEntity_EM_scanner extends GT_MetaTileEntity_MultiblockBa @Override public void construct(int stackSize, boolean hintsOnly) { - StructureBuilderExtreme(shape, blockType, blockMeta, 2, 2, 0, getBaseMetaTileEntity(), this, hintsOnly); + StructureBuilderExtreme(shape, blockType, blockMeta, 2, 2, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_stabilizer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_stabilizer.java index b159827012..9c88c4ecf3 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_stabilizer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_stabilizer.java @@ -1,8 +1,8 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.thing.block.QuantumGlassBlock; -import com.github.technus.tectech.thing.metaTileEntity.IConstructable; +import com.github.technus.tectech.mechanics.constructible.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; @@ -11,7 +11,7 @@ import net.minecraft.block.Block; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; -import static com.github.technus.tectech.Util.StructureBuilderExtreme; +import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; import static net.minecraft.util.StatCollector.translateToLocal; @@ -70,7 +70,7 @@ public class GT_MetaTileEntity_EM_stabilizer extends GT_MetaTileEntity_Multibloc @Override public void construct(int stackSize, boolean hintsOnly) { - StructureBuilderExtreme(shape, blockType, blockMeta, 2, 2, 0, getBaseMetaTileEntity(), this, hintsOnly); + StructureBuilderExtreme(shape, blockType, blockMeta, 2, 2, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java index 795349c50c..47949ea36e 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java @@ -1,14 +1,14 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.Reference; -import com.github.technus.tectech.Vec3pos; import com.github.technus.tectech.mechanics.dataTransport.QuantumDataPacket; -import com.github.technus.tectech.thing.metaTileEntity.IConstructable; +import com.github.technus.tectech.mechanics.constructible.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputData; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_OutputData; import com.github.technus.tectech.thing.metaTileEntity.multi.base.*; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedTexture; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; +import com.github.technus.tectech.util.Vec3Impl; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; @@ -20,8 +20,8 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; -import static com.github.technus.tectech.CommonValues.V; -import static com.github.technus.tectech.Util.StructureBuilderExtreme; +import static com.github.technus.tectech.util.CommonValues.V; +import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -128,7 +128,7 @@ public class GT_MetaTileEntity_EM_switch extends GT_MetaTileEntity_MultiblockBas } } - Vec3pos pos = new Vec3pos(getBaseMetaTileEntity()); + Vec3Impl pos = new Vec3Impl(getBaseMetaTileEntity()); QuantumDataPacket pack = new QuantumDataPacket(0L).unifyTraceWith(pos); if (pack == null) { return; @@ -191,7 +191,7 @@ public class GT_MetaTileEntity_EM_switch extends GT_MetaTileEntity_MultiblockBas @Override public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { if (aSide == aFacing) { - return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][1], new TT_RenderedTexture(aActive ? GT_MetaTileEntity_MultiblockBase_EM.ScreenON : GT_MetaTileEntity_MultiblockBase_EM.ScreenOFF)}; + return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][1], new TT_RenderedExtendedFacingTexture(aActive ? GT_MetaTileEntity_MultiblockBase_EM.ScreenON : GT_MetaTileEntity_MultiblockBase_EM.ScreenOFF)}; } return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][1]}; } @@ -217,7 +217,7 @@ public class GT_MetaTileEntity_EM_switch extends GT_MetaTileEntity_MultiblockBas @Override public void construct(int stackSize, boolean hintsOnly) { - StructureBuilderExtreme(shape, blockType, blockMeta, 1, 1, 0, getBaseMetaTileEntity(), this, hintsOnly); + StructureBuilderExtreme(shape, blockType, blockMeta, 1, 1, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java index 1a3bebf59b..81fd5eb6ad 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java @@ -1,13 +1,13 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.Reference; -import com.github.technus.tectech.thing.metaTileEntity.IConstructable; +import com.github.technus.tectech.mechanics.constructible.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_Container_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_GUIContainer_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedTexture; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; @@ -20,7 +20,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; -import static com.github.technus.tectech.Util.StructureBuilderExtreme; +import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -118,7 +118,7 @@ public class GT_MetaTileEntity_EM_transformer extends GT_MetaTileEntity_Multiblo @Override public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { if (aSide == aFacing) { - return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][0], new TT_RenderedTexture(aActive ? GT_MetaTileEntity_MultiblockBase_EM.ScreenON : GT_MetaTileEntity_MultiblockBase_EM.ScreenOFF)}; + return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][0], new TT_RenderedExtendedFacingTexture(aActive ? GT_MetaTileEntity_MultiblockBase_EM.ScreenON : GT_MetaTileEntity_MultiblockBase_EM.ScreenOFF)}; } return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][0]}; } @@ -150,7 +150,7 @@ public class GT_MetaTileEntity_EM_transformer extends GT_MetaTileEntity_Multiblo @Override public void construct(int stackSize, boolean hintsOnly) { - StructureBuilderExtreme(shape, blockType, blockMeta, 1, 1, 0, getBaseMetaTileEntity(), this, hintsOnly); + StructureBuilderExtreme(shape, blockType, blockMeta, 1, 1, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_wormhole.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_wormhole.java index 034fdca334..1f9d88e4fd 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_wormhole.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_wormhole.java @@ -1,11 +1,11 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.thing.block.QuantumGlassBlock; -import com.github.technus.tectech.thing.metaTileEntity.IConstructable; +import com.github.technus.tectech.mechanics.constructible.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedTexture; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; @@ -17,7 +17,7 @@ import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; -import static com.github.technus.tectech.Util.StructureBuilderExtreme; +import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -98,14 +98,14 @@ public class GT_MetaTileEntity_EM_wormhole extends GT_MetaTileEntity_MultiblockB @Override public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { if (aSide == aFacing) { - return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][4], new TT_RenderedTexture(aActive ? ScreenON : ScreenOFF)}; + return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][4], new TT_RenderedExtendedFacingTexture(aActive ? ScreenON : ScreenOFF)}; } return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][4]}; } @Override public void construct(int stackSize, boolean hintsOnly) { - StructureBuilderExtreme(shape, blockType, blockMeta, 4, 4, 0, getBaseMetaTileEntity(), this, hintsOnly); + StructureBuilderExtreme(shape, blockType, blockMeta, 4, 4, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java index 881f802d19..497efd6f71 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java @@ -1,10 +1,11 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.Reference; -import com.github.technus.tectech.thing.metaTileEntity.IConstructable; +import com.github.technus.tectech.mechanics.constructible.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.*; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedTexture; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; +import com.github.technus.tectech.util.Vec3Impl; import gregtech.api.enums.Textures; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; @@ -23,11 +24,12 @@ import net.minecraft.util.EnumChatFormatting; import java.util.ArrayList; import java.util.HashSet; -import static com.github.technus.tectech.Util.StructureBuilderExtreme; +import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.loader.MainLoader.microwaving; import static com.github.technus.tectech.recipe.TT_recipeAdder.nullItem; import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.*; import static gregtech.api.GregTech_API.sBlockCasings4; +import static net.minecraft.util.AxisAlignedBB.getBoundingBox; import static net.minecraft.util.StatCollector.translateToLocal; /** @@ -124,16 +126,14 @@ public class GT_MetaTileEntity_TM_microwave extends GT_MetaTileEntity_Multiblock timerValue.set(timerValue.get() + 1); remainingTime.set(timerSetting.get() - timerValue.get()); IGregTechTileEntity mte = getBaseMetaTileEntity(); - int[] xyzOffsets = getTranslatedOffsets(0, -1, 2); - double xPos = mte.getXCoord() + 0.5f + xyzOffsets[0]; - double yPos = mte.getYCoord() + 0.5f + xyzOffsets[1]; - double zPos = mte.getZCoord() + 0.5f + xyzOffsets[2]; - AxisAlignedBB aabb = getBoundingBox(-2, -2, -2, 2, 2, 2).offset(xPos, yPos, zPos); - xyzOffsets = getTranslatedOffsets(0, -4, 0); - double[] xyzExpansion = getTranslatedOffsets(1.5, 0, 1.5); - for (int i = 0; i < 3; i++) {//gets ABS from translated to get expansion values - if (xyzExpansion[i] < 0) xyzExpansion[i] = -xyzExpansion[i]; - } + Vec3Impl xyzOffsets = getExtendedFacing().getWorldOffset(new Vec3Impl(0, -1, 2)); + double xPos = mte.getXCoord() + 0.5f + xyzOffsets.get0(); + double yPos = mte.getYCoord() + 0.5f + xyzOffsets.get1(); + double zPos = mte.getZCoord() + 0.5f + xyzOffsets.get2(); + AxisAlignedBB aabb = getBoundingBox(-2, -2, -2, 2, 2, 2) + .offset(xPos, yPos, zPos); + xyzOffsets = getExtendedFacing().getWorldOffset(new Vec3Impl(0, -4, 0)); + Vec3Impl xyzExpansion = getExtendedFacing().getWorldOffset(new Vec3Impl(1, 0, 1)).abs(); int power = (int) powerSetting.get(); int damagingFactor = Math.min(power >> 6, 8) + @@ -169,8 +169,8 @@ public class GT_MetaTileEntity_TM_microwave extends GT_MetaTileEntity_Multiblock } } } - aabb.offset(xyzOffsets[0], xyzOffsets[1], xyzOffsets[2]); - aabb = aabb.expand(xyzExpansion[0], xyzExpansion[1], xyzExpansion[2]); + aabb.offset(xyzOffsets.get0(), xyzOffsets.get1(), xyzOffsets.get2()); + aabb = aabb.expand(xyzExpansion.get0()*1.5, xyzExpansion.get1()*1.5, xyzExpansion.get2()*1.5); inside = false; damagingFactor >>= 1; } while (damagingFactor > 0); @@ -206,7 +206,7 @@ public class GT_MetaTileEntity_TM_microwave extends GT_MetaTileEntity_Multiblock @Override public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { if (aSide == aFacing) { - return new ITexture[]{Textures.BlockIcons.casingTexturePages[0][49], new TT_RenderedTexture(aActive ? Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE : Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE)}; + return new ITexture[]{Textures.BlockIcons.casingTexturePages[0][49], new TT_RenderedExtendedFacingTexture(aActive ? Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE : Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE)}; } else if (aSide == GT_Utility.getOppositeSide(aFacing)) { return new ITexture[]{Textures.BlockIcons.casingTexturePages[0][49], aActive ? Textures.BlockIcons.casingTexturePages[0][52] : Textures.BlockIcons.casingTexturePages[0][53]}; } @@ -246,7 +246,7 @@ public class GT_MetaTileEntity_TM_microwave extends GT_MetaTileEntity_Multiblock @Override public void construct(int stackSize, boolean hintsOnly) { - StructureBuilderExtreme(shape, blockType, blockMeta, 2, 2, 0, getBaseMetaTileEntity(), this, hintsOnly); + StructureBuilderExtreme(shape, blockType, blockMeta, 2, 2, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java index d35304dfca..bf18a545ef 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java @@ -1,12 +1,12 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.CommonValues; -import com.github.technus.tectech.thing.metaTileEntity.IConstructable; +import com.github.technus.tectech.util.CommonValues; +import com.github.technus.tectech.mechanics.constructible.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_Container_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_GUIContainer_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedTexture; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import gregtech.api.enums.Textures; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; @@ -108,7 +108,7 @@ public class GT_MetaTileEntity_TM_proccessingStack extends GT_MetaTileEntity_Mul @Override public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { if (aSide == aFacing) { - return new ITexture[]{Textures.BlockIcons.casingTexturePages[0][49], new TT_RenderedTexture(aActive ? Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE : Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE)}; + return new ITexture[]{Textures.BlockIcons.casingTexturePages[0][49], new TT_RenderedExtendedFacingTexture(aActive ? Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE : Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE)}; } else if (aSide == GT_Utility.getOppositeSide(aFacing)) { return new ITexture[]{Textures.BlockIcons.casingTexturePages[0][49], aActive ? Textures.BlockIcons.casingTexturePages[0][52] : Textures.BlockIcons.casingTexturePages[0][53]}; } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java index d083c58ff3..85ccc5d881 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java @@ -1,20 +1,21 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.loader.NetworkDispatcher; import com.github.technus.tectech.mechanics.data.RendererMessage; import com.github.technus.tectech.mechanics.data.ThaumSpark; import com.github.technus.tectech.thing.cover.GT_Cover_TM_TeslaCoil; import com.github.technus.tectech.thing.cover.GT_Cover_TM_TeslaCoil_Ultimate; -import com.github.technus.tectech.thing.metaTileEntity.IConstructable; +import com.github.technus.tectech.mechanics.constructible.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Capacitor; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DynamoMulti; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Param; import com.github.technus.tectech.thing.metaTileEntity.multi.base.*; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedTexture; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import com.github.technus.tectech.thing.metaTileEntity.single.GT_MetaTileEntity_TeslaCoil; +import com.github.technus.tectech.util.Vec3Impl; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; @@ -28,17 +29,16 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; +import java.util.*; -import static com.github.technus.tectech.CommonValues.V; -import static com.github.technus.tectech.Util.*; +import static com.github.technus.tectech.util.CommonValues.V; +import static com.github.technus.tectech.util.Util.*; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsBA0; import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.*; import static gregtech.api.enums.GT_Values.E; +import static java.lang.Math.max; +import static java.lang.Math.min; import static net.minecraft.util.StatCollector.translateToLocal; public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_MultiblockBase_EM implements IConstructable { @@ -72,9 +72,9 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock private byte oldOrientation = -1; //Coordinate Arrays - private int[][] scanPosOffsets = new int[10][3]; - private int[] posZap = new int[3];//Power Transfer Origin - public int[] posTop = new int[3];//Lightning Origin + private final Vec3Impl[] scanPosOffsets = new Vec3Impl[10]; + private Vec3Impl posZap = Vec3Impl.NULL_VECTOR;//Power Transfer Origin + public Vec3Impl posTop = Vec3Impl.NULL_VECTOR;//Lightning Origin //endregion //region structure @@ -249,15 +249,15 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock return 1F; } - private void scanForTransmissionTargets(int[] coordsMin, int[] coordsMax) { + private void scanForTransmissionTargets(Vec3Impl coordsMin, Vec3Impl coordsMax) { //This makes sure the minimums are actually smaller than the maximums - int xMin = coordsMin[0] < coordsMax[0] ? coordsMin[0] : coordsMax[0]; - int yMin = coordsMin[1] < coordsMax[1] ? coordsMin[1] : coordsMax[1]; - int zMin = coordsMin[2] < coordsMax[2] ? coordsMin[2] : coordsMax[2]; + int xMin = min(coordsMin.get0(), coordsMax.get0()); + int yMin = min(coordsMin.get1(), coordsMax.get1()); + int zMin = min(coordsMin.get2(), coordsMax.get2()); //And vice versa - int xMax = coordsMin[0] > coordsMax[0] ? coordsMin[0] : coordsMax[0]; - int yMax = coordsMin[1] > coordsMax[1] ? coordsMin[1] : coordsMax[1]; - int zMax = coordsMin[2] > coordsMax[2] ? coordsMin[2] : coordsMax[2]; + int xMax = max(coordsMin.get0(), coordsMax.get0()); + int yMax = max(coordsMin.get1(), coordsMax.get1()); + int zMax = max(coordsMin.get2(), coordsMax.get2()); for (int xPos = xMin; xPos <= xMax; xPos++) { for (int yPos = yMin; yPos <= yMax; yPos++) { @@ -266,12 +266,13 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock continue; } IGregTechTileEntity node = getBaseMetaTileEntity().getIGregTechTileEntityOffset(xPos, yPos, zPos); - if (node == null) { - continue; - } - IMetaTileEntity nodeInside = node.getMetaTileEntity(); - if (nodeInside instanceof GT_MetaTileEntity_TeslaCoil || nodeInside instanceof GT_MetaTileEntity_TM_teslaCoil && node.isActive() || (node.getCoverBehaviorAtSide((byte) 1) instanceof GT_Cover_TM_TeslaCoil)) { - eTeslaMap.put(node, (int) Math.ceil(Math.sqrt(Math.pow(xPos, 2) + Math.pow(yPos, 2) + Math.pow(zPos, 2)))); + if (node != null) { + IMetaTileEntity nodeInside = node.getMetaTileEntity(); + if (nodeInside instanceof GT_MetaTileEntity_TeslaCoil || + nodeInside instanceof GT_MetaTileEntity_TM_teslaCoil && node.isActive() || + (node.getCoverBehaviorAtSide((byte) 1) instanceof GT_Cover_TM_TeslaCoil)) { + eTeslaMap.put(node, (int) Math.ceil(Math.sqrt(Math.pow(xPos, 2) + Math.pow(yPos, 2) + Math.pow(zPos, 2)))); + } } } } @@ -280,13 +281,13 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock } private void thaumLightning(IGregTechTileEntity mte, IGregTechTileEntity node) { - byte xR = (byte) (node.getXCoord() - posTop[0]); - byte yR = (byte) (node.getYCoord() - posTop[1]); - byte zR = (byte) (node.getZCoord() - posTop[2]); + byte xR = (byte) (node.getXCoord() - posTop.get0()); + byte yR = (byte) (node.getYCoord() - posTop.get1()); + byte zR = (byte) (node.getZCoord() - posTop.get2()); int wID = mte.getWorld().provider.dimensionId; - sparkList.add(new ThaumSpark(posTop[0], posTop[1], posTop[2], xR, yR, zR, wID)); + sparkList.add(new ThaumSpark(posTop.get0(), posTop.get1(), posTop.get2(), xR, yR, zR, wID)); } @Override @@ -303,9 +304,10 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock } eCapacitorHatches.clear(); - int[] xyzOffsets; - xyzOffsets = getTranslatedOffsets(0, -1, 1); - mTier = iGregTechTileEntity.getMetaIDOffset(xyzOffsets[0], xyzOffsets[1], xyzOffsets[2]); + Vec3Impl xyzOffsets; + + xyzOffsets = getExtendedFacing().getWorldOffset(new Vec3Impl(0, -1, 1)); + mTier = iGregTechTileEntity.getMetaIDOffset(xyzOffsets.get0(), xyzOffsets.get1(), xyzOffsets.get2()); if (structureCheck_EM(shape, blockType, blockMetas[mTier], addingMethods, casingTextures, blockTypeFallback, blockMetaFallback, 3, 16, 0) && eCapacitorHatches.size() > 0) { for (GT_MetaTileEntity_Hatch_Capacitor cap : eCapacitorHatches) { @@ -315,37 +317,31 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock } //Only recalculate offsets on orientation or rotation change - if (oldRotation != getFrontRotation() || oldOrientation != iGregTechTileEntity.getFrontFacing()) { - oldRotation = getFrontRotation(); + if (oldRotation != getExtendedFacing().ordinal() || oldOrientation != iGregTechTileEntity.getFrontFacing()) { + oldRotation = (byte) getExtendedFacing().ordinal(); oldOrientation = iGregTechTileEntity.getFrontFacing(); //Calculate coordinates of the middle bottom - xyzOffsets = getTranslatedOffsets(0, 0, 2); - posZap[0] = iGregTechTileEntity.getXCoord() + xyzOffsets[0]; - posZap[1] = iGregTechTileEntity.getYCoord() + xyzOffsets[1]; - posZap[2] = iGregTechTileEntity.getZCoord() + xyzOffsets[2]; + posZap = getExtendedFacing().getWorldOffset(new Vec3Impl(0, 0, 2)).add(getBaseMetaTileEntity()); //Calculate coordinates of the top sphere - xyzOffsets = getTranslatedOffsets(0, -14, 2); - posTop[0] = iGregTechTileEntity.getXCoord() + xyzOffsets[0]; - posTop[1] = iGregTechTileEntity.getYCoord() + xyzOffsets[1]; - posTop[2] = iGregTechTileEntity.getZCoord() + xyzOffsets[2]; + posTop = getExtendedFacing().getWorldOffset(new Vec3Impl(0, -14, 2)).add(getBaseMetaTileEntity()); //Calculate offsets for scanning - scanPosOffsets[0] = getTranslatedOffsets(40, 0, 43); - scanPosOffsets[1] = getTranslatedOffsets(-40, -4, -37); + scanPosOffsets[0] = getExtendedFacing().getWorldOffset(new Vec3Impl(40, 0, 43)); + scanPosOffsets[1] = getExtendedFacing().getWorldOffset(new Vec3Impl(-40, -4, -37)); - scanPosOffsets[2] = getTranslatedOffsets(40, -5, 43); - scanPosOffsets[3] = getTranslatedOffsets(-40, -8, -37); + scanPosOffsets[2] = getExtendedFacing().getWorldOffset(new Vec3Impl(40, -5, 43)); + scanPosOffsets[3] = getExtendedFacing().getWorldOffset(new Vec3Impl(-40, -8, -37)); - scanPosOffsets[4] = getTranslatedOffsets(40, -9, 43); - scanPosOffsets[5] = getTranslatedOffsets(-40, -12, -37); + scanPosOffsets[4] = getExtendedFacing().getWorldOffset(new Vec3Impl(40, -9, 43)); + scanPosOffsets[5] = getExtendedFacing().getWorldOffset(new Vec3Impl(-40, -12, -37)); - scanPosOffsets[6] = getTranslatedOffsets(40, -13, 43); - scanPosOffsets[7] = getTranslatedOffsets(-40, -16, -37); + scanPosOffsets[6] = getExtendedFacing().getWorldOffset(new Vec3Impl(40, -13, 43)); + scanPosOffsets[7] = getExtendedFacing().getWorldOffset(new Vec3Impl(-40, -16, -37)); - scanPosOffsets[8] = getTranslatedOffsets(40, -17, 43); - scanPosOffsets[9] = getTranslatedOffsets(-40, -20, -37); + scanPosOffsets[8] = getExtendedFacing().getWorldOffset(new Vec3Impl(40, -17, 43)); + scanPosOffsets[9] = getExtendedFacing().getWorldOffset(new Vec3Impl(-40, -20, -37)); } return true; } @@ -434,7 +430,7 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock @Override public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { if (aSide == aFacing) { - return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][16 + 6], new TT_RenderedTexture(aActive ? ScreenON : ScreenOFF)}; + return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][16 + 6], new TT_RenderedExtendedFacingTexture(aActive ? ScreenON : ScreenOFF)}; } return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][16 + 6]}; } @@ -612,9 +608,9 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock int tY = node.getYCoord(); int tZ = node.getZCoord(); - int tXN = posZap[0]; - int tYN = posZap[1]; - int tZN = posZap[2]; + int tXN = posZap.get0(); + int tYN = posZap.get1(); + int tZN = posZap.get2(); int tOffset = (int) Math.ceil(Math.sqrt(Math.pow(tX - tXN, 2) + Math.pow(tY - tYN, 2) + Math.pow(tZ - tZN, 2))); teslaCoil.eTeslaMap.put(mte, tOffset); @@ -649,7 +645,7 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock //Power Limit Settings long outputVoltage; if (outputVoltageSetting.get() > 0) { - outputVoltage = Math.min(outputVoltageMax, (long) outputVoltageSetting.get()); + outputVoltage = min(outputVoltageMax, (long) outputVoltageSetting.get()); } else { outputVoltage = outputVoltageMax; } @@ -657,7 +653,7 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock long outputCurrent; if (outputCurrentSetting.get() > 0) { - outputCurrent = Math.min(outputCurrentMax, (long) outputCurrentSetting.get()); + outputCurrent = min(outputCurrentMax, (long) outputCurrentSetting.get()); } else { outputCurrent = outputCurrentMax; } @@ -826,7 +822,7 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock @Override public void construct(int stackSize, boolean hintsOnly) { - StructureBuilderExtreme(shape, blockType, blockMetas[(stackSize - 1) % 6], 3, 16, 0, getBaseMetaTileEntity(), this, hintsOnly); + StructureBuilderExtreme(shape, blockType, blockMetas[(stackSize - 1) % 6], 3, 16, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_Container_MultiMachineEM.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_Container_MultiMachineEM.java index c42c15bd8d..8086b70691 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_Container_MultiMachineEM.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_Container_MultiMachineEM.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi.base; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import gregtech.api.gui.GT_ContainerMetaTile_Machine; import gregtech.api.gui.GT_Slot_Holo; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java index 0e00a3180f..52bdd3574f 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java @@ -2,17 +2,19 @@ package com.github.technus.tectech.thing.metaTileEntity.multi.base; import com.github.technus.tectech.Reference; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.Util; -import com.github.technus.tectech.Vec3pos; +import com.github.technus.tectech.mechanics.alignment.*; +import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; +import com.github.technus.tectech.mechanics.alignment.enumerable.Flip; +import com.github.technus.tectech.mechanics.alignment.enumerable.Rotation; +import com.github.technus.tectech.util.Util; +import com.github.technus.tectech.util.Vec3Impl; import com.github.technus.tectech.loader.NetworkDispatcher; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalDefinitionStack; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; import com.github.technus.tectech.mechanics.elementalMatter.core.tElementalException; -import com.github.technus.tectech.thing.metaTileEntity.IFrontRotation; -import com.github.technus.tectech.thing.metaTileEntity.RotationMessage; import com.github.technus.tectech.thing.metaTileEntity.hatch.*; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedTexture; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; @@ -31,23 +33,23 @@ import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.FluidStack; import java.util.ArrayList; -import static com.github.technus.tectech.CommonValues.*; -import static com.github.technus.tectech.Util.StructureCheckerExtreme; -import static com.github.technus.tectech.Util.getTier; +import static com.github.technus.tectech.util.CommonValues.*; +import static com.github.technus.tectech.util.Util.StructureCheckerExtreme; +import static com.github.technus.tectech.util.Util.getTier; import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; /** * Created by danie_000 on 27.10.2016. */ -public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEntity_MultiBlockBase implements IFrontRotation { +public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEntity_MultiBlockBase implements IAlignment { //region Client side variables (static - one per class) //Front icon holders - static so it is default one for my blocks @@ -130,8 +132,8 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt private boolean explodedThisTick = false; //front rotation val - private byte frontRotation = 0; - + private IAlignmentLimits alignmentLimits = AlignmentLimits.UNLIMITED; + private ExtendedFacing extendedFacing = ExtendedFacing.DEFAULT; //endregion protected GT_MetaTileEntity_MultiblockBase_EM(int aID, String aName, String aNameRegional) { @@ -149,345 +151,46 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt } //region SUPER STRUCT - @Override - public boolean isFrontRotationValid(byte frontRotation, byte frontFacing) { - return true; - } - - public boolean isFacingValid_EM(byte aFacing) { - return true; + public ExtendedFacing getExtendedFacing() { + return extendedFacing; } @Override - public void rotateAroundFrontPlane(boolean direction) { - if (direction) { - frontRotation++; - if (frontRotation > 3) frontRotation = 0; - } else { - frontRotation--; - if (frontRotation < 0) frontRotation = 3; - } - if (isFrontRotationValid(frontRotation, getBaseMetaTileEntity().getFrontFacing())) { - updateRotationOnClients(); - } else { - rotateAroundFrontPlane(direction); + public void setExtendedFacing(ExtendedFacing alignment) { + if(extendedFacing!=alignment){ + extendedFacing=alignment; + IGregTechTileEntity base = getBaseMetaTileEntity(); + if (getBaseMetaTileEntity().isServerSide()) { + NetworkDispatcher.INSTANCE.sendToAllAround(new AlignmentMessage.AlignmentData(this), + base.getWorld().provider.dimensionId, + base.getXCoord(), base.getYCoord(), base.getZCoord(), 512); + }else{ + base.issueTextureUpdate(); + } } } - /** - * Gets AABB based on abc and not xyz, without offsetting to controller position!!! - * - * @param minA - * @param minB - * @param minC - * @param maxA - * @param maxB - * @param maxC - * @return - */ - public final AxisAlignedBB getBoundingBox(double minA, double minB, double minC, double maxA, double maxB, double maxC) { - double[] offSetsMin = getTranslatedOffsets(minA, minB, minC); - double[] offSetsMax = getTranslatedOffsets(maxA, maxB, maxC); - for (int i = 0; i < 3; i++) { - if (offSetsMax[i] < offSetsMin[i]) { - double temp = offSetsMax[i]; - offSetsMax[i] = offSetsMin[i]; - offSetsMin[i] = temp; - } - } - return AxisAlignedBB.getBoundingBox( - offSetsMin[0], offSetsMin[1], offSetsMin[2], - offSetsMax[0], offSetsMax[1], offSetsMax[2] - ); + @Override + public IAlignmentLimits getAlignmentLimits() { + return alignmentLimits; } - /** - * Translates relative axis coordinates abc to absolute axis coordinates xyz - * abc from the CONTROLLER! - * - * @param a - * @param b - * @param c - * @return - */ - public final double[] getTranslatedOffsets(double a, double b, double c) { - double[] result = new double[3]; - switch (getBaseMetaTileEntity().getFrontFacing() + (frontRotation << 3)) { - case 4: - result[0] = c; - result[2] = a; - result[1] = -b; - break; - case 12: - result[0] = c; - result[1] = -a; - result[2] = -b; - break; - case 20: - result[0] = c; - result[2] = -a; - result[1] = b; - break; - case 28: - result[0] = c; - result[1] = a; - result[2] = b; - break; - - case 3: - result[0] = a; - result[2] = -c; - result[1] = -b; - break; - case 11: - result[1] = -a; - result[2] = -c; - result[0] = -b; - break; - case 19: - result[0] = -a; - result[2] = -c; - result[1] = b; - break; - case 27: - result[1] = a; - result[2] = -c; - result[0] = b; - break; - - case 5: - result[0] = -c; - result[2] = -a; - result[1] = -b; - break; - case 13: - result[0] = -c; - result[1] = -a; - result[2] = b; - break; - case 21: - result[0] = -c; - result[2] = a; - result[1] = b; - break; - case 29: - result[0] = -c; - result[1] = a; - result[2] = -b; - break; - - case 2: - result[0] = -a; - result[2] = c; - result[1] = -b; - break; - case 10: - result[1] = -a; - result[2] = c; - result[0] = b; - break; - case 18: - result[0] = a; - result[2] = c; - result[1] = b; - break; - case 26: - result[1] = a; - result[2] = c; - result[0] = -b; - break; - //Things get odd if the block faces up or down... - case 1: - result[0] = a; - result[2] = b; - result[1] = -c; - break;//similar to 3 - case 9: - result[2] = a; - result[0] = -b; - result[1] = -c; - break;//similar to 3 - case 17: - result[0] = -a; - result[2] = -b; - result[1] = -c; - break;//similar to 3 - case 25: - result[2] = -a; - result[0] = b; - result[1] = -c; - break;//similar to 3 - - case 0: - result[0] = -a; - result[2] = b; - result[1] = c; - break;//similar to 2 - case 8: - result[2] = a; - result[0] = b; - result[1] = c; - break; - case 16: - result[0] = a; - result[2] = -b; - result[1] = c; - break; - case 24: - result[2] = -a; - result[0] = -b; - result[0] = -b; - result[1] = +c; - break; - } - return result; + @Override + public void setAlignmentLimits(IAlignmentLimits limits) { + alignmentLimits=limits; } - public final int[] getTranslatedOffsets(int a, int b, int c) { - int[] result = new int[3]; - switch (getBaseMetaTileEntity().getFrontFacing() + (frontRotation << 3)) { - case 4: - result[0] = c; - result[2] = a; - result[1] = -b; - break; - case 12: - result[0] = c; - result[1] = -a; - result[2] = -b; - break; - case 20: - result[0] = c; - result[2] = -a; - result[1] = b; - break; - case 28: - result[0] = c; - result[1] = a; - result[2] = b; - break; - - case 3: - result[0] = a; - result[2] = -c; - result[1] = -b; - break; - case 11: - result[1] = -a; - result[2] = -c; - result[0] = -b; - break; - case 19: - result[0] = -a; - result[2] = -c; - result[1] = b; - break; - case 27: - result[1] = a; - result[2] = -c; - result[0] = b; - break; - - case 5: - result[0] = -c; - result[2] = -a; - result[1] = -b; - break; - case 13: - result[0] = -c; - result[1] = -a; - result[2] = b; - break; - case 21: - result[0] = -c; - result[2] = a; - result[1] = b; - break; - case 29: - result[0] = -c; - result[1] = a; - result[2] = -b; - break; - - case 2: - result[0] = -a; - result[2] = c; - result[1] = -b; - break; - case 10: - result[1] = -a; - result[2] = c; - result[0] = b; - break; - case 18: - result[0] = a; - result[2] = c; - result[1] = b; - break; - case 26: - result[1] = a; - result[2] = c; - result[0] = -b; - break; - //Things get odd if the block faces up or down... - case 1: - result[0] = a; - result[2] = b; - result[1] = -c; - break;//similar to 3 - case 9: - result[2] = a; - result[0] = -b; - result[1] = -c; - break;//similar to 3 - case 17: - result[0] = -a; - result[2] = -b; - result[1] = -c; - break;//similar to 3 - case 25: - result[2] = -a; - result[0] = b; - result[1] = -c; - break;//similar to 3 - - case 0: - result[0] = -a; - result[2] = b; - result[1] = c; - break;//similar to 2 - case 8: - result[2] = a; - result[0] = b; - result[1] = c; - break; - case 16: - result[0] = a; - result[2] = -b; - result[1] = c; - break; - case 24: - result[2] = -a; - result[0] = -b; - result[0] = -b; - result[1] = +c; - break; - } - return result; + @Override + public boolean isFacingValid(byte aFacing) { + return getAlignmentLimits() + .isNewExtendedFacingValid(getExtendedFacing().with(ForgeDirection.getOrientation(aFacing))); } - //can be used to check structures of multi-blocks larger than one chunk, but... - //ALL THE HATCHES AND THE CONTROLLER SHOULD BE IN ONE CHUNK OR IN LOADED CHUNKS - //@Deprecated - //public final boolean structureCheck_EM( - // String[][] structure,//0-9 casing, +- air no air, a-z ignore - // Block[] blockType,//use numbers 0-9 for casing types - // byte[] blockMeta,//use numbers 0-9 for casing types - // int horizontalOffset, int verticalOffset, int depthOffset) { - // return StructureChecker(structure, blockType, blockMeta, - // horizontalOffset, verticalOffset, depthOffset, getBaseMetaTileEntity(), !mMachine); - //} + @Override + public void onFacingChange() { + toolSetDirection(ForgeDirection.getOrientation(getBaseMetaTileEntity().getFrontFacing())); + } public final boolean structureCheck_EM( String[][] structure,//0-9 casing, +- air no air, a-z ignore @@ -499,7 +202,7 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt byte[] blockMetaFallback,//use numbers 0-9 for casing types int horizontalOffset, int verticalOffset, int depthOffset) { return StructureCheckerExtreme(structure, blockType, blockMeta, addingMethods, casingTextures, blockTypeFallback, blockMetaFallback, - horizontalOffset, verticalOffset, depthOffset, getBaseMetaTileEntity(), this, !mMachine); + horizontalOffset, verticalOffset, depthOffset, getBaseMetaTileEntity(), getExtendedFacing(), !mMachine); } //endregion @@ -729,7 +432,7 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt @Override public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { if (aSide == aFacing) { - return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][4], new TT_RenderedTexture(aActive ? ScreenON : ScreenOFF)}; + return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][4], new TT_RenderedExtendedFacingTexture(aActive ? ScreenON : ScreenOFF)}; } return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][4]}; } @@ -904,7 +607,7 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt */ protected long getAvailableData_EM() { long result = 0; - Vec3pos pos = new Vec3pos(getBaseMetaTileEntity()); + Vec3Impl pos = new Vec3Impl(getBaseMetaTileEntity()); for (GT_MetaTileEntity_Hatch_InputData in : eInputData) { if (in.q != null) { Long value = in.q.contentIfNotInTrace(pos); @@ -976,7 +679,8 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt aNBT.setByte("eCertainM", eCertainMode); aNBT.setByte("eCertainS", eCertainStatus); aNBT.setByte("eMinRepair", minRepairStatus); - aNBT.setByte("eRotation", frontRotation); + aNBT.setByte("eRotation", (byte)extendedFacing.getRotation().getIndex()); + aNBT.setByte("eFlip", (byte)extendedFacing.getFlip().getIndex()); aNBT.setBoolean("eParam", eParameters); aNBT.setBoolean("ePass", ePowerPass); aNBT.setBoolean("eVoid", eSafeVoid); @@ -1066,7 +770,10 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt eCertainMode = aNBT.getByte("eCertainM"); eCertainStatus = aNBT.getByte("eCertainS"); minRepairStatus = aNBT.getByte("eMinRepair"); - frontRotation = aNBT.getByte("eRotation"); + extendedFacing=ExtendedFacing.of( + ForgeDirection.getOrientation(getBaseMetaTileEntity().getFrontFacing()), + Rotation.byIndex(aNBT.getByte("eRotation")), + Flip.byIndex(aNBT.getByte("eFlip"))); eParameters = aNBT.getBoolean("eParam"); ePowerPass = aNBT.getBoolean("ePass"); eSafeVoid = aNBT.getBoolean("eVoid"); @@ -1265,40 +972,6 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt //region internal - @Override - public final byte getFrontRotation() { - return frontRotation; - } - - @Override - public final void forceSetRotationDoRender(byte rotation) { - frontRotation = rotation; - IGregTechTileEntity base = getBaseMetaTileEntity(); - if (base.isClientSide()) { - base.issueTextureUpdate(); - } - } - - protected final void updateRotationOnClients() { - if (getBaseMetaTileEntity().isServerSide()) { - IGregTechTileEntity base = getBaseMetaTileEntity(); - NetworkDispatcher.INSTANCE.sendToAllAround(new RotationMessage.RotationData(this), - base.getWorld().provider.dimensionId, - base.getXCoord(), - base.getYCoord(), - base.getZCoord(), - 256); - } - } - - @Override - public final boolean isFacingValid(byte aFacing) { - if (!isFrontRotationValid(frontRotation, aFacing)) { - rotateAroundFrontPlane(false); - } - return isFacingValid_EM(aFacing); - } - /** * internal check machine * @@ -1380,7 +1053,7 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt public final void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { isFacingValid(aBaseMetaTileEntity.getFrontFacing()); if (getBaseMetaTileEntity().isClientSide()) { - NetworkDispatcher.INSTANCE.sendToServer(new RotationMessage.RotationQuery(this)); + NetworkDispatcher.INSTANCE.sendToServer(new AlignmentMessage.AlignmentQuery(this)); } onFirstTick_EM(aBaseMetaTileEntity); } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/render/TT_RenderedExtendedFacingTexture.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/render/TT_RenderedExtendedFacingTexture.java new file mode 100644 index 0000000000..4ecea706cc --- /dev/null +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/render/TT_RenderedExtendedFacingTexture.java @@ -0,0 +1,893 @@ +package com.github.technus.tectech.thing.metaTileEntity.multi.base.render; + +import com.github.technus.tectech.mechanics.alignment.IAlignment; +import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; +import gregtech.api.enums.Dyes; +import gregtech.api.interfaces.IColorModulationContainer; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class TT_RenderedExtendedFacingTexture implements ITexture,IColorModulationContainer { + private final IIconContainer mIconContainer; + private final boolean mAllowAlpha; + /** + * DO NOT MANIPULATE THE VALUES INSIDE THIS ARRAY!!! + *

+ * Just set this variable to another different Array instead. + * Otherwise some colored things will get Problems. + */ + public short[] mRGBa; + + public TT_RenderedExtendedFacingTexture(IIconContainer aIcon, short[] aRGBa, boolean aAllowAlpha) { + if (aRGBa.length != 4) throw new IllegalArgumentException("RGBa doesn't have 4 Values @ TT_RenderedTexture"); + mIconContainer = aIcon; + mAllowAlpha = aAllowAlpha; + mRGBa = aRGBa; + } + + public TT_RenderedExtendedFacingTexture(IIconContainer aIcon, short[] aRGBa) { + this(aIcon, aRGBa, true); + } + + public TT_RenderedExtendedFacingTexture(IIconContainer aIcon) { + this(aIcon, Dyes._NULL.mRGBa); + } + + @Override + public void renderXPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + Tessellator.instance.setColorRGBA((int) (mRGBa[0] * 0.6F), (int) (mRGBa[1] * 0.6F), (int) (mRGBa[2] * 0.6F), mAllowAlpha ? 255 - mRGBa[3] : 255); + ExtendedFacing rotation = getExtendedFacing(aX, aY, aZ); + renderFaceXPos(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); + if (mIconContainer.getOverlayIcon() != null) { + Tessellator.instance.setColorRGBA(153, 153, 153, 255); + renderFaceXPos(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); + } + } + + @Override + public void renderXNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + Tessellator.instance.setColorRGBA((int) (mRGBa[0] * 0.6F), (int) (mRGBa[1] * 0.6F), (int) (mRGBa[2] * 0.6F), mAllowAlpha ? 255 - mRGBa[3] : 255); + ExtendedFacing rotation = getExtendedFacing(aX, aY, aZ); + renderFaceXNeg(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); + if (mIconContainer.getOverlayIcon() != null) { + Tessellator.instance.setColorRGBA(153, 153, 153, 255); + renderFaceXNeg(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); + } + } + + @Override + public void renderYPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + Tessellator.instance.setColorRGBA((int) (mRGBa[0] * 1.0F), (int) (mRGBa[1] * 1.0F), (int) (mRGBa[2] * 1.0F), mAllowAlpha ? 255 - mRGBa[3] : 255); + ExtendedFacing rotation = getExtendedFacing(aX, aY, aZ); + renderFaceYPos(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); + if (mIconContainer.getOverlayIcon() != null) { + Tessellator.instance.setColorRGBA(255, 255, 255, 255); + renderFaceYPos(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); + } + } + + @Override + public void renderYNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + Tessellator.instance.setColorRGBA((int) (mRGBa[0] * 0.5F), (int) (mRGBa[1] * 0.5F), (int) (mRGBa[2] * 0.5F), mAllowAlpha ? 255 - mRGBa[3] : 255); + ExtendedFacing rotation = getExtendedFacing(aX, aY, aZ); + renderFaceYNeg(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); + if (mIconContainer.getOverlayIcon() != null) { + Tessellator.instance.setColorRGBA(255, 255, 255, 255); + renderFaceYNeg(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); + } + } + + @Override + public void renderZPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + Tessellator.instance.setColorRGBA((int) (mRGBa[0] * 0.8F), (int) (mRGBa[1] * 0.8F), (int) (mRGBa[2] * 0.8F), mAllowAlpha ? 255 - mRGBa[3] : 255); + ExtendedFacing rotation = getExtendedFacing(aX, aY, aZ); + renderFaceZPos(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); + if (mIconContainer.getOverlayIcon() != null) { + Tessellator.instance.setColorRGBA(204, 204, 204, 255); + renderFaceZPos(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); + } + } + + @Override + public void renderZNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + Tessellator.instance.setColorRGBA((int) (mRGBa[0] * 0.8F), (int) (mRGBa[1] * 0.8F), (int) (mRGBa[2] * 0.8F), mAllowAlpha ? 255 - mRGBa[3] : 255); + ExtendedFacing rotation = getExtendedFacing(aX, aY, aZ); + renderFaceZNeg(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); + if (mIconContainer.getOverlayIcon() != null) { + Tessellator.instance.setColorRGBA(204, 204, 204, 255); + renderFaceZNeg(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); + } + } + + + /** + * Renders the given texture to the bottom face of the block. Args: block, x, y, z, texture + */ + public void renderFaceYNeg(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, ExtendedFacing rotation) { + Tessellator tessellator = Tessellator.instance; + + if (aRenderer.hasOverrideBlockTexture()) { + icon = aRenderer.overrideBlockTexture; + } + + double d3 = icon.getInterpolatedU(aRenderer.renderMaxX * 16.0D); + double d4 = icon.getInterpolatedU(aRenderer.renderMinX * 16.0D); + double d5 = icon.getInterpolatedV(aRenderer.renderMinZ * 16.0D); + double d6 = icon.getInterpolatedV(aRenderer.renderMaxZ * 16.0D); + + if (aRenderer.renderMinX < 0.0D || aRenderer.renderMaxX > 1.0D) { + d3 = icon.getMaxU(); + d4 = icon.getMinU(); + } + + if (aRenderer.renderMinZ < 0.0D || aRenderer.renderMaxZ > 1.0D) { + d5 = icon.getMinV(); + d6 = icon.getMaxV(); + } + + { + double temp; + switch (rotation.getFlip().ordinal()){ + case 1: + temp=d3; + d3=d4; + d4=temp; + break; + case 2: + temp=d5; + d5=d6; + d6=temp; + case 3: + temp=d3; + d3=d4; + d4=temp; + break; + } + } + + double d7 = d4; + double d8 = d3; + double d9 = d5; + double d10 = d6; + + switch (rotation.getRotation().ordinal()) { + case 3: + d3 = icon.getInterpolatedU(aRenderer.renderMaxZ * 16.0D); + d5 = icon.getInterpolatedV(16.0D - aRenderer.renderMaxX * 16.0D); + d4 = icon.getInterpolatedU(aRenderer.renderMinZ * 16.0D); + d6 = icon.getInterpolatedV(16.0D - aRenderer.renderMinX * 16.0D); + d9 = d5; + d10 = d6; + d7 = d3; + d8 = d4; + d5 = d6; + d6 = d9; + break; + case 1: + d3 = icon.getInterpolatedU(16.0D - aRenderer.renderMinZ * 16.0D); + d5 = icon.getInterpolatedV(aRenderer.renderMinX * 16.0D); + d4 = icon.getInterpolatedU(16.0D - aRenderer.renderMaxZ * 16.0D); + d6 = icon.getInterpolatedV(aRenderer.renderMaxX * 16.0D); + d7 = d4; + d8 = d3; + d3 = d4; + d4 = d8; + d9 = d6; + d10 = d5; + break; + case 2: + d3 = icon.getInterpolatedU(16.0D - aRenderer.renderMaxX * 16.0D); + d4 = icon.getInterpolatedU(16.0D - aRenderer.renderMinX * 16.0D); + d5 = icon.getInterpolatedV(16.0D - aRenderer.renderMinZ * 16.0D); + d6 = icon.getInterpolatedV(16.0D - aRenderer.renderMaxZ * 16.0D); + d7 = d4; + d8 = d3; + d9 = d5; + d10 = d6; + break; + } + + double d11 = x + aRenderer.renderMinX; + double d12 = x + aRenderer.renderMaxX; + double d13 = y + aRenderer.renderMinY; + double d14 = z + aRenderer.renderMinZ; + double d15 = z + aRenderer.renderMaxZ; + + if (aRenderer.renderFromInside) { + d11 = x + aRenderer.renderMaxX; + d12 = x + aRenderer.renderMinX; + } + + if (aRenderer.enableAO) { + tessellator.setColorOpaque_F(aRenderer.colorRedTopLeft, aRenderer.colorGreenTopLeft, aRenderer.colorBlueTopLeft); + tessellator.setBrightness(aRenderer.brightnessTopLeft); + tessellator.addVertexWithUV(d11, d13, d15, d8, d10); + tessellator.setColorOpaque_F(aRenderer.colorRedBottomLeft, aRenderer.colorGreenBottomLeft, aRenderer.colorBlueBottomLeft); + tessellator.setBrightness(aRenderer.brightnessBottomLeft); + tessellator.addVertexWithUV(d11, d13, d14, d3, d5); + tessellator.setColorOpaque_F(aRenderer.colorRedBottomRight, aRenderer.colorGreenBottomRight, aRenderer.colorBlueBottomRight); + tessellator.setBrightness(aRenderer.brightnessBottomRight); + tessellator.addVertexWithUV(d12, d13, d14, d7, d9); + tessellator.setColorOpaque_F(aRenderer.colorRedTopRight, aRenderer.colorGreenTopRight, aRenderer.colorBlueTopRight); + tessellator.setBrightness(aRenderer.brightnessTopRight); + tessellator.addVertexWithUV(d12, d13, d15, d4, d6); + } else { + tessellator.addVertexWithUV(d11, d13, d15, d8, d10); + tessellator.addVertexWithUV(d11, d13, d14, d3, d5); + tessellator.addVertexWithUV(d12, d13, d14, d7, d9); + tessellator.addVertexWithUV(d12, d13, d15, d4, d6); + } + } + + /** + * Renders the given texture to the top face of the block. Args: block, x, y, z, texture + */ + public void renderFaceYPos(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, ExtendedFacing rotation) { + Tessellator tessellator = Tessellator.instance; + + if (aRenderer.hasOverrideBlockTexture()) { + icon = aRenderer.overrideBlockTexture; + } + + double d3 = icon.getInterpolatedU(aRenderer.renderMinX * 16.0D); + double d4 = icon.getInterpolatedU(aRenderer.renderMaxX * 16.0D); + double d5 = icon.getInterpolatedV(aRenderer.renderMinZ * 16.0D); + double d6 = icon.getInterpolatedV(aRenderer.renderMaxZ * 16.0D); + + if (aRenderer.renderMinX < 0.0D || aRenderer.renderMaxX > 1.0D) { + d3 = icon.getMinU(); + d4 = icon.getMaxU(); + } + + if (aRenderer.renderMinZ < 0.0D || aRenderer.renderMaxZ > 1.0D) { + d5 = icon.getMinV(); + d6 = icon.getMaxV(); + } + + { + double temp; + switch (rotation.getFlip().ordinal()){ + case 1: + temp=d3; + d3=d4; + d4=temp; + break; + case 2: + temp=d5; + d5=d6; + d6=temp; + case 3: + temp=d3; + d3=d4; + d4=temp; + break; + } + } + + double d7 = d4; + double d8 = d3; + double d9 = d5; + double d10 = d6; + + switch (rotation.getRotation().ordinal()) { + case 1: + d3 = icon.getInterpolatedU(aRenderer.renderMinZ * 16.0D); + d5 = icon.getInterpolatedV(16.0D - aRenderer.renderMaxX * 16.0D); + d4 = icon.getInterpolatedU(aRenderer.renderMaxZ * 16.0D); + d6 = icon.getInterpolatedV(16.0D - aRenderer.renderMinX * 16.0D); + d9 = d5; + d10 = d6; + d7 = d3; + d8 = d4; + d5 = d6; + d6 = d9; + break; + case 3: + d3 = icon.getInterpolatedU(16.0D - aRenderer.renderMaxZ * 16.0D); + d5 = icon.getInterpolatedV(aRenderer.renderMinX * 16.0D); + d4 = icon.getInterpolatedU(16.0D - aRenderer.renderMinZ * 16.0D); + d6 = icon.getInterpolatedV(aRenderer.renderMaxX * 16.0D); + d7 = d4; + d8 = d3; + d3 = d4; + d4 = d8; + d9 = d6; + d10 = d5; + break; + case 2: + d3 = icon.getInterpolatedU(16.0D - aRenderer.renderMinX * 16.0D); + d4 = icon.getInterpolatedU(16.0D - aRenderer.renderMaxX * 16.0D); + d5 = icon.getInterpolatedV(16.0D - aRenderer.renderMinZ * 16.0D); + d6 = icon.getInterpolatedV(16.0D - aRenderer.renderMaxZ * 16.0D); + d7 = d4; + d8 = d3; + d9 = d5; + d10 = d6; + break; + } + + double d11 = x + aRenderer.renderMinX; + double d12 = x + aRenderer.renderMaxX; + double d13 = y + aRenderer.renderMaxY; + double d14 = z + aRenderer.renderMinZ; + double d15 = z + aRenderer.renderMaxZ; + + if (aRenderer.renderFromInside) { + d11 = x + aRenderer.renderMaxX; + d12 = x + aRenderer.renderMinX; + } + + if (aRenderer.enableAO) { + tessellator.setColorOpaque_F(aRenderer.colorRedTopLeft, aRenderer.colorGreenTopLeft, aRenderer.colorBlueTopLeft); + tessellator.setBrightness(aRenderer.brightnessTopLeft); + tessellator.addVertexWithUV(d12, d13, d15, d4, d6); + tessellator.setColorOpaque_F(aRenderer.colorRedBottomLeft, aRenderer.colorGreenBottomLeft, aRenderer.colorBlueBottomLeft); + tessellator.setBrightness(aRenderer.brightnessBottomLeft); + tessellator.addVertexWithUV(d12, d13, d14, d7, d9); + tessellator.setColorOpaque_F(aRenderer.colorRedBottomRight, aRenderer.colorGreenBottomRight, aRenderer.colorBlueBottomRight); + tessellator.setBrightness(aRenderer.brightnessBottomRight); + tessellator.addVertexWithUV(d11, d13, d14, d3, d5); + tessellator.setColorOpaque_F(aRenderer.colorRedTopRight, aRenderer.colorGreenTopRight, aRenderer.colorBlueTopRight); + tessellator.setBrightness(aRenderer.brightnessTopRight); + tessellator.addVertexWithUV(d11, d13, d15, d8, d10); + } else { + tessellator.addVertexWithUV(d12, d13, d15, d4, d6); + tessellator.addVertexWithUV(d12, d13, d14, d7, d9); + tessellator.addVertexWithUV(d11, d13, d14, d3, d5); + tessellator.addVertexWithUV(d11, d13, d15, d8, d10); + } + } + + /** + * Renders the given texture to the north (z-negative) face of the block. Args: block, x, y, z, texture + */ + public void renderFaceZNeg(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, ExtendedFacing rotation) { + Tessellator tessellator = Tessellator.instance; + + if (aRenderer.hasOverrideBlockTexture()) { + icon = aRenderer.overrideBlockTexture; + } + + double d3 = icon.getInterpolatedU(aRenderer.renderMinX * 16.0D); + double d4 = icon.getInterpolatedU(aRenderer.renderMaxX * 16.0D); + + if (aRenderer.field_152631_f) { + d4 = icon.getInterpolatedU((1.0D - aRenderer.renderMinX) * 16.0D); + d3 = icon.getInterpolatedU((1.0D - aRenderer.renderMaxX) * 16.0D); + } + + double d5 = icon.getInterpolatedV(16.0D - aRenderer.renderMaxY * 16.0D); + double d6 = icon.getInterpolatedV(16.0D - aRenderer.renderMinY * 16.0D); + + double d7; + + if (aRenderer.flipTexture) { + d7 = d3; + d3 = d4; + d4 = d7; + } + + if (aRenderer.renderMinX < 0.0D || aRenderer.renderMaxX > 1.0D) { + d3 = icon.getMinU(); + d4 = icon.getMaxU(); + } + + if (aRenderer.renderMinY < 0.0D || aRenderer.renderMaxY > 1.0D) { + d5 = icon.getMinV(); + d6 = icon.getMaxV(); + } + + { + double temp; + switch (rotation.getFlip().ordinal()){ + case 1: + temp=d3; + d3=d4; + d4=temp; + break; + case 2: + temp=d5; + d5=d6; + d6=temp; + case 3: + temp=d3; + d3=d4; + d4=temp; + break; + } + } + + d7 = d4; + double d8 = d3; + double d9 = d5; + double d10 = d6; + + switch (rotation.getRotation().ordinal()) { + case 3: + d3 = icon.getInterpolatedU(aRenderer.renderMaxY * 16.0D); + d4 = icon.getInterpolatedU(aRenderer.renderMinY * 16.0D); + d5 = icon.getInterpolatedV(16.0D - aRenderer.renderMinX * 16.0D); + d6 = icon.getInterpolatedV(16.0D - aRenderer.renderMaxX * 16.0D); + d9 = d5; + d10 = d6; + d7 = d3; + d8 = d4; + d5 = d6; + d6 = d9; + break; + case 1: + d3 = icon.getInterpolatedU(16.0D - aRenderer.renderMinY * 16.0D); + d4 = icon.getInterpolatedU(16.0D - aRenderer.renderMaxY * 16.0D); + d5 = icon.getInterpolatedV(aRenderer.renderMaxX * 16.0D); + d6 = icon.getInterpolatedV(aRenderer.renderMinX * 16.0D); + d7 = d4; + d8 = d3; + d3 = d4; + d4 = d8; + d9 = d6; + d10 = d5; + break; + case 2: + d3 = icon.getInterpolatedU(16.0D - aRenderer.renderMinX * 16.0D); + d4 = icon.getInterpolatedU(16.0D - aRenderer.renderMaxX * 16.0D); + d5 = icon.getInterpolatedV(aRenderer.renderMaxY * 16.0D); + d6 = icon.getInterpolatedV(aRenderer.renderMinY * 16.0D); + d7 = d4; + d8 = d3; + d9 = d5; + d10 = d6; + break; + } + + double d11 = x + aRenderer.renderMinX; + double d12 = x + aRenderer.renderMaxX; + double d13 = y + aRenderer.renderMinY; + double d14 = y + aRenderer.renderMaxY; + double d15 = z + aRenderer.renderMinZ; + + if (aRenderer.renderFromInside) { + d11 = x + aRenderer.renderMaxX; + d12 = x + aRenderer.renderMinX; + } + + if (aRenderer.enableAO) { + tessellator.setColorOpaque_F(aRenderer.colorRedTopLeft, aRenderer.colorGreenTopLeft, aRenderer.colorBlueTopLeft); + tessellator.setBrightness(aRenderer.brightnessTopLeft); + tessellator.addVertexWithUV(d11, d14, d15, d7, d9); + tessellator.setColorOpaque_F(aRenderer.colorRedBottomLeft, aRenderer.colorGreenBottomLeft, aRenderer.colorBlueBottomLeft); + tessellator.setBrightness(aRenderer.brightnessBottomLeft); + tessellator.addVertexWithUV(d12, d14, d15, d3, d5); + tessellator.setColorOpaque_F(aRenderer.colorRedBottomRight, aRenderer.colorGreenBottomRight, aRenderer.colorBlueBottomRight); + tessellator.setBrightness(aRenderer.brightnessBottomRight); + tessellator.addVertexWithUV(d12, d13, d15, d8, d10); + tessellator.setColorOpaque_F(aRenderer.colorRedTopRight, aRenderer.colorGreenTopRight, aRenderer.colorBlueTopRight); + tessellator.setBrightness(aRenderer.brightnessTopRight); + tessellator.addVertexWithUV(d11, d13, d15, d4, d6); + } else { + tessellator.addVertexWithUV(d11, d14, d15, d7, d9); + tessellator.addVertexWithUV(d12, d14, d15, d3, d5); + tessellator.addVertexWithUV(d12, d13, d15, d8, d10); + tessellator.addVertexWithUV(d11, d13, d15, d4, d6); + } + } + + /** + * Renders the given texture to the south (z-positive) face of the block. Args: block, x, y, z, texture + */ + public void renderFaceZPos(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, ExtendedFacing rotation) { + Tessellator tessellator = Tessellator.instance; + + if (aRenderer.hasOverrideBlockTexture()) { + icon = aRenderer.overrideBlockTexture; + } + + double d3 = icon.getInterpolatedU(aRenderer.renderMinX * 16.0D); + double d4 = icon.getInterpolatedU(aRenderer.renderMaxX * 16.0D); + double d5 = icon.getInterpolatedV(16.0D - aRenderer.renderMaxY * 16.0D); + double d6 = icon.getInterpolatedV(16.0D - aRenderer.renderMinY * 16.0D); + double d7; + + if (aRenderer.flipTexture) { + d7 = d3; + d3 = d4; + d4 = d7; + } + + if (aRenderer.renderMinX < 0.0D || aRenderer.renderMaxX > 1.0D) { + d3 = icon.getMinU(); + d4 = icon.getMaxU(); + } + + if (aRenderer.renderMinY < 0.0D || aRenderer.renderMaxY > 1.0D) { + d5 = icon.getMinV(); + d6 = icon.getMaxV(); + } + + { + double temp; + switch (rotation.getFlip().ordinal()){ + case 1: + temp=d3; + d3=d4; + d4=temp; + break; + case 2: + temp=d5; + d5=d6; + d6=temp; + case 3: + temp=d3; + d3=d4; + d4=temp; + break; + } + } + + d7 = d4; + double d8 = d3; + double d9 = d5; + double d10 = d6; + + switch (rotation.getRotation().ordinal()) { + case 1: + d3 = icon.getInterpolatedU(aRenderer.renderMinY * 16.0D); + d6 = icon.getInterpolatedV(16.0D - aRenderer.renderMinX * 16.0D); + d4 = icon.getInterpolatedU(aRenderer.renderMaxY * 16.0D); + d5 = icon.getInterpolatedV(16.0D - aRenderer.renderMaxX * 16.0D); + d9 = d5; + d10 = d6; + d7 = d3; + d8 = d4; + d5 = d6; + d6 = d9; + break; + case 3: + d3 = icon.getInterpolatedU(16.0D - aRenderer.renderMaxY * 16.0D); + d5 = icon.getInterpolatedV(aRenderer.renderMinX * 16.0D); + d4 = icon.getInterpolatedU(16.0D - aRenderer.renderMinY * 16.0D); + d6 = icon.getInterpolatedV(aRenderer.renderMaxX * 16.0D); + d7 = d4; + d8 = d3; + d3 = d4; + d4 = d8; + d9 = d6; + d10 = d5; + break; + case 2: + d3 = icon.getInterpolatedU(16.0D - aRenderer.renderMinX * 16.0D); + d4 = icon.getInterpolatedU(16.0D - aRenderer.renderMaxX * 16.0D); + d5 = icon.getInterpolatedV(aRenderer.renderMaxY * 16.0D); + d6 = icon.getInterpolatedV(aRenderer.renderMinY * 16.0D); + d7 = d4; + d8 = d3; + d9 = d5; + d10 = d6; + break; + } + + double d11 = x + aRenderer.renderMinX; + double d12 = x + aRenderer.renderMaxX; + double d13 = y + aRenderer.renderMinY; + double d14 = y + aRenderer.renderMaxY; + double d15 = z + aRenderer.renderMaxZ; + + if (aRenderer.renderFromInside) { + d11 = x + aRenderer.renderMaxX; + d12 = x + aRenderer.renderMinX; + } + + if (aRenderer.enableAO) { + tessellator.setColorOpaque_F(aRenderer.colorRedTopLeft, aRenderer.colorGreenTopLeft, aRenderer.colorBlueTopLeft); + tessellator.setBrightness(aRenderer.brightnessTopLeft); + tessellator.addVertexWithUV(d11, d14, d15, d3, d5); + tessellator.setColorOpaque_F(aRenderer.colorRedBottomLeft, aRenderer.colorGreenBottomLeft, aRenderer.colorBlueBottomLeft); + tessellator.setBrightness(aRenderer.brightnessBottomLeft); + tessellator.addVertexWithUV(d11, d13, d15, d8, d10); + tessellator.setColorOpaque_F(aRenderer.colorRedBottomRight, aRenderer.colorGreenBottomRight, aRenderer.colorBlueBottomRight); + tessellator.setBrightness(aRenderer.brightnessBottomRight); + tessellator.addVertexWithUV(d12, d13, d15, d4, d6); + tessellator.setColorOpaque_F(aRenderer.colorRedTopRight, aRenderer.colorGreenTopRight, aRenderer.colorBlueTopRight); + tessellator.setBrightness(aRenderer.brightnessTopRight); + tessellator.addVertexWithUV(d12, d14, d15, d7, d9); + } else { + tessellator.addVertexWithUV(d11, d14, d15, d3, d5); + tessellator.addVertexWithUV(d11, d13, d15, d8, d10); + tessellator.addVertexWithUV(d12, d13, d15, d4, d6); + tessellator.addVertexWithUV(d12, d14, d15, d7, d9); + } + } + + /** + * Renders the given texture to the west (x-negative) face of the block. Args: block, x, y, z, texture + */ + public void renderFaceXNeg(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, ExtendedFacing rotation) { + Tessellator tessellator = Tessellator.instance; + + if (aRenderer.hasOverrideBlockTexture()) { + icon = aRenderer.overrideBlockTexture; + } + + double d3 = icon.getInterpolatedU(aRenderer.renderMinZ * 16.0D); + double d4 = icon.getInterpolatedU(aRenderer.renderMaxZ * 16.0D); + double d5 = icon.getInterpolatedV(16.0D - aRenderer.renderMaxY * 16.0D); + double d6 = icon.getInterpolatedV(16.0D - aRenderer.renderMinY * 16.0D); + double d7; + + if (aRenderer.flipTexture) { + d7 = d3; + d3 = d4; + d4 = d7; + } + + if (aRenderer.renderMinZ < 0.0D || aRenderer.renderMaxZ > 1.0D) { + d3 = icon.getMinU(); + d4 = icon.getMaxU(); + } + + if (aRenderer.renderMinY < 0.0D || aRenderer.renderMaxY > 1.0D) { + d5 = icon.getMinV(); + d6 = icon.getMaxV(); + } + + { + double temp; + switch (rotation.getFlip().ordinal()){ + case 1: + temp=d3; + d3=d4; + d4=temp; + break; + case 2: + temp=d5; + d5=d6; + d6=temp; + case 3: + temp=d3; + d3=d4; + d4=temp; + break; + } + } + + d7 = d4; + double d8 = d3; + double d9 = d5; + double d10 = d6; + + switch (rotation.getRotation().ordinal()) { + case 1: + d3 = icon.getInterpolatedU(aRenderer.renderMinY * 16.0D); + d5 = icon.getInterpolatedV(16.0D - aRenderer.renderMaxZ * 16.0D); + d4 = icon.getInterpolatedU(aRenderer.renderMaxY * 16.0D); + d6 = icon.getInterpolatedV(16.0D - aRenderer.renderMinZ * 16.0D); + d9 = d5; + d10 = d6; + d7 = d3; + d8 = d4; + d5 = d6; + d6 = d9; + break; + case 3: + d3 = icon.getInterpolatedU(16.0D - aRenderer.renderMaxY * 16.0D); + d5 = icon.getInterpolatedV(aRenderer.renderMinZ * 16.0D); + d4 = icon.getInterpolatedU(16.0D - aRenderer.renderMinY * 16.0D); + d6 = icon.getInterpolatedV(aRenderer.renderMaxZ * 16.0D); + d7 = d4; + d8 = d3; + d3 = d4; + d4 = d8; + d9 = d6; + d10 = d5; + break; + case 2: + d3 = icon.getInterpolatedU(16.0D - aRenderer.renderMinZ * 16.0D); + d4 = icon.getInterpolatedU(16.0D - aRenderer.renderMaxZ * 16.0D); + d5 = icon.getInterpolatedV(aRenderer.renderMaxY * 16.0D); + d6 = icon.getInterpolatedV(aRenderer.renderMinY * 16.0D); + d7 = d4; + d8 = d3; + d9 = d5; + d10 = d6; + break; + } + + double d11 = x + aRenderer.renderMinX; + double d12 = y + aRenderer.renderMinY; + double d13 = y + aRenderer.renderMaxY; + double d14 = z + aRenderer.renderMinZ; + double d15 = z + aRenderer.renderMaxZ; + + if (aRenderer.renderFromInside) { + d14 = z + aRenderer.renderMaxZ; + d15 = z + aRenderer.renderMinZ; + } + + if (aRenderer.enableAO) { + tessellator.setColorOpaque_F(aRenderer.colorRedTopLeft, aRenderer.colorGreenTopLeft, aRenderer.colorBlueTopLeft); + tessellator.setBrightness(aRenderer.brightnessTopLeft); + tessellator.addVertexWithUV(d11, d13, d15, d7, d9); + tessellator.setColorOpaque_F(aRenderer.colorRedBottomLeft, aRenderer.colorGreenBottomLeft, aRenderer.colorBlueBottomLeft); + tessellator.setBrightness(aRenderer.brightnessBottomLeft); + tessellator.addVertexWithUV(d11, d13, d14, d3, d5); + tessellator.setColorOpaque_F(aRenderer.colorRedBottomRight, aRenderer.colorGreenBottomRight, aRenderer.colorBlueBottomRight); + tessellator.setBrightness(aRenderer.brightnessBottomRight); + tessellator.addVertexWithUV(d11, d12, d14, d8, d10); + tessellator.setColorOpaque_F(aRenderer.colorRedTopRight, aRenderer.colorGreenTopRight, aRenderer.colorBlueTopRight); + tessellator.setBrightness(aRenderer.brightnessTopRight); + tessellator.addVertexWithUV(d11, d12, d15, d4, d6); + } else { + tessellator.addVertexWithUV(d11, d13, d15, d7, d9); + tessellator.addVertexWithUV(d11, d13, d14, d3, d5); + tessellator.addVertexWithUV(d11, d12, d14, d8, d10); + tessellator.addVertexWithUV(d11, d12, d15, d4, d6); + } + } + + /** + * Renders the given texture to the east (x-positive) face of the block. Args: block, x, y, z, texture + */ + public void renderFaceXPos(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, ExtendedFacing rotation) { + Tessellator tessellator = Tessellator.instance; + + if (aRenderer.hasOverrideBlockTexture()) { + icon = aRenderer.overrideBlockTexture; + } + + double d3 = icon.getInterpolatedU(aRenderer.renderMinZ * 16.0D); + double d4 = icon.getInterpolatedU(aRenderer.renderMaxZ * 16.0D); + + if (aRenderer.field_152631_f) { + d4 = icon.getInterpolatedU((1.0D - aRenderer.renderMinZ) * 16.0D); + d3 = icon.getInterpolatedU((1.0D - aRenderer.renderMaxZ) * 16.0D); + } + + double d5 = icon.getInterpolatedV(16.0D - aRenderer.renderMaxY * 16.0D); + double d6 = icon.getInterpolatedV(16.0D - aRenderer.renderMinY * 16.0D); + double d7; + + if (aRenderer.flipTexture) { + d7 = d3; + d3 = d4; + d4 = d7; + } + + if (aRenderer.renderMinZ < 0.0D || aRenderer.renderMaxZ > 1.0D) { + d3 = icon.getMinU(); + d4 = icon.getMaxU(); + } + + if (aRenderer.renderMinY < 0.0D || aRenderer.renderMaxY > 1.0D) { + d5 = icon.getMinV(); + d6 = icon.getMaxV(); + } + + { + double temp; + switch (rotation.getFlip().ordinal()){ + case 1: + temp=d3; + d3=d4; + d4=temp; + break; + case 2: + temp=d5; + d5=d6; + d6=temp; + case 3: + temp=d3; + d3=d4; + d4=temp; + break; + } + } + + d7 = d4; + double d8 = d3; + double d9 = d5; + double d10 = d6; + + switch (rotation.getRotation().ordinal()) { + case 3: + d3 = icon.getInterpolatedU(aRenderer.renderMaxY * 16.0D); + d5 = icon.getInterpolatedV(16.0D - aRenderer.renderMinZ * 16.0D); + d4 = icon.getInterpolatedU(aRenderer.renderMinY * 16.0D); + d6 = icon.getInterpolatedV(16.0D - aRenderer.renderMaxZ * 16.0D); + d9 = d5; + d10 = d6; + d7 = d3; + d8 = d4; + d5 = d6; + d6 = d9; + break; + case 1: + d3 = icon.getInterpolatedU(16.0D - aRenderer.renderMinY * 16.0D); + d5 = icon.getInterpolatedV(aRenderer.renderMaxZ * 16.0D); + d4 = icon.getInterpolatedU(16.0D - aRenderer.renderMaxY * 16.0D); + d6 = icon.getInterpolatedV(aRenderer.renderMinZ * 16.0D); + d7 = d4; + d8 = d3; + d3 = d4; + d4 = d8; + d9 = d6; + d10 = d5; + break; + case 2: + d3 = icon.getInterpolatedU(16.0D - aRenderer.renderMinZ * 16.0D); + d4 = icon.getInterpolatedU(16.0D - aRenderer.renderMaxZ * 16.0D); + d5 = icon.getInterpolatedV(aRenderer.renderMaxY * 16.0D); + d6 = icon.getInterpolatedV(aRenderer.renderMinY * 16.0D); + d7 = d4; + d8 = d3; + d9 = d5; + d10 = d6; + break; + } + + double d11 = x + aRenderer.renderMaxX; + double d12 = y + aRenderer.renderMinY; + double d13 = y + aRenderer.renderMaxY; + double d14 = z + aRenderer.renderMinZ; + double d15 = z + aRenderer.renderMaxZ; + + if (aRenderer.renderFromInside) { + d14 = z + aRenderer.renderMaxZ; + d15 = z + aRenderer.renderMinZ; + } + + if (aRenderer.enableAO) { + tessellator.setColorOpaque_F(aRenderer.colorRedTopLeft, aRenderer.colorGreenTopLeft, aRenderer.colorBlueTopLeft); + tessellator.setBrightness(aRenderer.brightnessTopLeft); + tessellator.addVertexWithUV(d11, d12, d15, d8, d10); + tessellator.setColorOpaque_F(aRenderer.colorRedBottomLeft, aRenderer.colorGreenBottomLeft, aRenderer.colorBlueBottomLeft); + tessellator.setBrightness(aRenderer.brightnessBottomLeft); + tessellator.addVertexWithUV(d11, d12, d14, d4, d6); + tessellator.setColorOpaque_F(aRenderer.colorRedBottomRight, aRenderer.colorGreenBottomRight, aRenderer.colorBlueBottomRight); + tessellator.setBrightness(aRenderer.brightnessBottomRight); + tessellator.addVertexWithUV(d11, d13, d14, d7, d9); + tessellator.setColorOpaque_F(aRenderer.colorRedTopRight, aRenderer.colorGreenTopRight, aRenderer.colorBlueTopRight); + tessellator.setBrightness(aRenderer.brightnessTopRight); + tessellator.addVertexWithUV(d11, d13, d15, d3, d5); + } else { + tessellator.addVertexWithUV(d11, d12, d15, d8, d10); + tessellator.addVertexWithUV(d11, d12, d14, d4, d6); + tessellator.addVertexWithUV(d11, d13, d14, d7, d9); + tessellator.addVertexWithUV(d11, d13, d15, d3, d5); + } + } + + @Override + public short[] getRGBA() { + return mRGBa; + } + + @Override + public boolean isValidTexture() { + return mIconContainer != null; + } + + private static ExtendedFacing getExtendedFacing(int x, int y, int z) { + World w = Minecraft.getMinecraft().theWorld; + if (w != null) { + TileEntity te = w.getTileEntity(x, y, z); + if (te instanceof IGregTechTileEntity) { + IMetaTileEntity meta = ((IGregTechTileEntity) te).getMetaTileEntity(); + if (meta instanceof IAlignment) { + return ((IAlignment) meta).getExtendedFacing(); + }else{ + return ExtendedFacing.of(ForgeDirection.getOrientation(meta.getBaseMetaTileEntity().getFrontFacing())); + } + } + } + return ExtendedFacing.DEFAULT; + } +} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/render/TT_RenderedTexture.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/render/TT_RenderedTexture.java deleted file mode 100644 index 39a12f1f86..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/render/TT_RenderedTexture.java +++ /dev/null @@ -1,769 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.multi.base.render; - -import com.github.technus.tectech.thing.metaTileEntity.IFrontRotation; -import gregtech.api.enums.Dyes; -import gregtech.api.interfaces.IColorModulationContainer; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import net.minecraft.block.Block; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.RenderBlocks; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.IIcon; -import net.minecraft.world.World; - -public class TT_RenderedTexture implements ITexture,IColorModulationContainer { - private final IIconContainer mIconContainer; - private final boolean mAllowAlpha; - /** - * DO NOT MANIPULATE THE VALUES INSIDE THIS ARRAY!!! - *

- * Just set this variable to another different Array instead. - * Otherwise some colored things will get Problems. - */ - public short[] mRGBa; - - public TT_RenderedTexture(IIconContainer aIcon, short[] aRGBa, boolean aAllowAlpha) { - if (aRGBa.length != 4) throw new IllegalArgumentException("RGBa doesn't have 4 Values @ TT_RenderedTexture"); - mIconContainer = aIcon; - mAllowAlpha = aAllowAlpha; - mRGBa = aRGBa; - } - - public TT_RenderedTexture(IIconContainer aIcon, short[] aRGBa) { - this(aIcon, aRGBa, true); - } - - public TT_RenderedTexture(IIconContainer aIcon) { - this(aIcon, Dyes._NULL.mRGBa); - } - - @Override - public void renderXPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - Tessellator.instance.setColorRGBA((int) (mRGBa[0] * 0.6F), (int) (mRGBa[1] * 0.6F), (int) (mRGBa[2] * 0.6F), mAllowAlpha ? 255 - mRGBa[3] : 255); - byte rotation = getRotation(aX, aY, aZ); - renderFaceXPos(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); - if (mIconContainer.getOverlayIcon() != null) { - Tessellator.instance.setColorRGBA(153, 153, 153, 255); - renderFaceXPos(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); - } - } - - @Override - public void renderXNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - Tessellator.instance.setColorRGBA((int) (mRGBa[0] * 0.6F), (int) (mRGBa[1] * 0.6F), (int) (mRGBa[2] * 0.6F), mAllowAlpha ? 255 - mRGBa[3] : 255); - byte rotation = getRotation(aX, aY, aZ); - renderFaceXNeg(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); - if (mIconContainer.getOverlayIcon() != null) { - Tessellator.instance.setColorRGBA(153, 153, 153, 255); - renderFaceXNeg(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); - } - } - - @Override - public void renderYPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - Tessellator.instance.setColorRGBA((int) (mRGBa[0] * 1.0F), (int) (mRGBa[1] * 1.0F), (int) (mRGBa[2] * 1.0F), mAllowAlpha ? 255 - mRGBa[3] : 255); - byte rotation = getRotation(aX, aY, aZ); - renderFaceYPos(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); - if (mIconContainer.getOverlayIcon() != null) { - Tessellator.instance.setColorRGBA(255, 255, 255, 255); - renderFaceYPos(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); - } - } - - @Override - public void renderYNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - Tessellator.instance.setColorRGBA((int) (mRGBa[0] * 0.5F), (int) (mRGBa[1] * 0.5F), (int) (mRGBa[2] * 0.5F), mAllowAlpha ? 255 - mRGBa[3] : 255); - byte rotation = getRotation(aX, aY, aZ); - renderFaceYNeg(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); - if (mIconContainer.getOverlayIcon() != null) { - Tessellator.instance.setColorRGBA(255, 255, 255, 255); - renderFaceYNeg(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); - } - } - - @Override - public void renderZPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - Tessellator.instance.setColorRGBA((int) (mRGBa[0] * 0.8F), (int) (mRGBa[1] * 0.8F), (int) (mRGBa[2] * 0.8F), mAllowAlpha ? 255 - mRGBa[3] : 255); - byte rotation = getRotation(aX, aY, aZ); - renderFaceZPos(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); - if (mIconContainer.getOverlayIcon() != null) { - Tessellator.instance.setColorRGBA(204, 204, 204, 255); - renderFaceZPos(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); - } - } - - @Override - public void renderZNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - Tessellator.instance.setColorRGBA((int) (mRGBa[0] * 0.8F), (int) (mRGBa[1] * 0.8F), (int) (mRGBa[2] * 0.8F), mAllowAlpha ? 255 - mRGBa[3] : 255); - byte rotation = getRotation(aX, aY, aZ); - renderFaceZNeg(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); - if (mIconContainer.getOverlayIcon() != null) { - Tessellator.instance.setColorRGBA(204, 204, 204, 255); - renderFaceZNeg(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); - } - } - - - /** - * Renders the given texture to the bottom face of the block. Args: block, x, y, z, texture - */ - public void renderFaceYNeg(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, byte rotation) { - Tessellator tessellator = Tessellator.instance; - - if (aRenderer.hasOverrideBlockTexture()) { - icon = aRenderer.overrideBlockTexture; - } - - double d3 = (double) icon.getInterpolatedU(aRenderer.renderMaxX * 16.0D); - double d4 = (double) icon.getInterpolatedU(aRenderer.renderMinX * 16.0D); - double d5 = (double) icon.getInterpolatedV(aRenderer.renderMinZ * 16.0D); - double d6 = (double) icon.getInterpolatedV(aRenderer.renderMaxZ * 16.0D); - - if (aRenderer.renderMinX < 0.0D || aRenderer.renderMaxX > 1.0D) { - d3 = (double) icon.getMaxU(); - d4 = (double) icon.getMinU(); - } - - if (aRenderer.renderMinZ < 0.0D || aRenderer.renderMaxZ > 1.0D) { - d5 = (double) icon.getMinV(); - d6 = (double) icon.getMaxV(); - } - - double d7 = d4; - double d8 = d3; - double d9 = d5; - double d10 = d6; - - switch (rotation) { - case 3: - d3 = (double) icon.getInterpolatedU(aRenderer.renderMaxZ * 16.0D); - d5 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMaxX * 16.0D); - d4 = (double) icon.getInterpolatedU(aRenderer.renderMinZ * 16.0D); - d6 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMinX * 16.0D); - d9 = d5; - d10 = d6; - d7 = d3; - d8 = d4; - d5 = d6; - d6 = d9; - break; - case 1: - d3 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMinZ * 16.0D); - d5 = (double) icon.getInterpolatedV(aRenderer.renderMinX * 16.0D); - d4 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMaxZ * 16.0D); - d6 = (double) icon.getInterpolatedV(aRenderer.renderMaxX * 16.0D); - d7 = d4; - d8 = d3; - d3 = d4; - d4 = d8; - d9 = d6; - d10 = d5; - break; - case 2: - d3 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMaxX * 16.0D); - d4 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMinX * 16.0D); - d5 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMinZ * 16.0D); - d6 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMaxZ * 16.0D); - d7 = d4; - d8 = d3; - d9 = d5; - d10 = d6; - break; - } - - double d11 = x + aRenderer.renderMinX; - double d12 = x + aRenderer.renderMaxX; - double d13 = y + aRenderer.renderMinY; - double d14 = z + aRenderer.renderMinZ; - double d15 = z + aRenderer.renderMaxZ; - - if (aRenderer.renderFromInside) { - d11 = x + aRenderer.renderMaxX; - d12 = x + aRenderer.renderMinX; - } - - if (aRenderer.enableAO) { - tessellator.setColorOpaque_F(aRenderer.colorRedTopLeft, aRenderer.colorGreenTopLeft, aRenderer.colorBlueTopLeft); - tessellator.setBrightness(aRenderer.brightnessTopLeft); - tessellator.addVertexWithUV(d11, d13, d15, d8, d10); - tessellator.setColorOpaque_F(aRenderer.colorRedBottomLeft, aRenderer.colorGreenBottomLeft, aRenderer.colorBlueBottomLeft); - tessellator.setBrightness(aRenderer.brightnessBottomLeft); - tessellator.addVertexWithUV(d11, d13, d14, d3, d5); - tessellator.setColorOpaque_F(aRenderer.colorRedBottomRight, aRenderer.colorGreenBottomRight, aRenderer.colorBlueBottomRight); - tessellator.setBrightness(aRenderer.brightnessBottomRight); - tessellator.addVertexWithUV(d12, d13, d14, d7, d9); - tessellator.setColorOpaque_F(aRenderer.colorRedTopRight, aRenderer.colorGreenTopRight, aRenderer.colorBlueTopRight); - tessellator.setBrightness(aRenderer.brightnessTopRight); - tessellator.addVertexWithUV(d12, d13, d15, d4, d6); - } else { - tessellator.addVertexWithUV(d11, d13, d15, d8, d10); - tessellator.addVertexWithUV(d11, d13, d14, d3, d5); - tessellator.addVertexWithUV(d12, d13, d14, d7, d9); - tessellator.addVertexWithUV(d12, d13, d15, d4, d6); - } - } - - /** - * Renders the given texture to the top face of the block. Args: block, x, y, z, texture - */ - public void renderFaceYPos(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, byte rotation) { - Tessellator tessellator = Tessellator.instance; - - if (aRenderer.hasOverrideBlockTexture()) { - icon = aRenderer.overrideBlockTexture; - } - - double d3 = (double) icon.getInterpolatedU(aRenderer.renderMinX * 16.0D); - double d4 = (double) icon.getInterpolatedU(aRenderer.renderMaxX * 16.0D); - double d5 = (double) icon.getInterpolatedV(aRenderer.renderMinZ * 16.0D); - double d6 = (double) icon.getInterpolatedV(aRenderer.renderMaxZ * 16.0D); - - if (aRenderer.renderMinX < 0.0D || aRenderer.renderMaxX > 1.0D) { - d3 = (double) icon.getMinU(); - d4 = (double) icon.getMaxU(); - } - - if (aRenderer.renderMinZ < 0.0D || aRenderer.renderMaxZ > 1.0D) { - d5 = (double) icon.getMinV(); - - d6 = (double) icon.getMaxV(); - } - - double d7 = d4; - double d8 = d3; - double d9 = d5; - double d10 = d6; - - switch (rotation) { - case 1: - d3 = (double) icon.getInterpolatedU(aRenderer.renderMinZ * 16.0D); - d5 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMaxX * 16.0D); - d4 = (double) icon.getInterpolatedU(aRenderer.renderMaxZ * 16.0D); - d6 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMinX * 16.0D); - d9 = d5; - d10 = d6; - d7 = d3; - d8 = d4; - d5 = d6; - d6 = d9; - break; - case 3: - d3 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMaxZ * 16.0D); - d5 = (double) icon.getInterpolatedV(aRenderer.renderMinX * 16.0D); - d4 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMinZ * 16.0D); - d6 = (double) icon.getInterpolatedV(aRenderer.renderMaxX * 16.0D); - d7 = d4; - d8 = d3; - d3 = d4; - d4 = d8; - d9 = d6; - d10 = d5; - break; - case 2: - d3 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMinX * 16.0D); - d4 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMaxX * 16.0D); - d5 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMinZ * 16.0D); - d6 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMaxZ * 16.0D); - d7 = d4; - d8 = d3; - d9 = d5; - d10 = d6; - break; - } - - double d11 = x + aRenderer.renderMinX; - double d12 = x + aRenderer.renderMaxX; - double d13 = y + aRenderer.renderMaxY; - double d14 = z + aRenderer.renderMinZ; - double d15 = z + aRenderer.renderMaxZ; - - if (aRenderer.renderFromInside) { - d11 = x + aRenderer.renderMaxX; - d12 = x + aRenderer.renderMinX; - } - - if (aRenderer.enableAO) { - tessellator.setColorOpaque_F(aRenderer.colorRedTopLeft, aRenderer.colorGreenTopLeft, aRenderer.colorBlueTopLeft); - tessellator.setBrightness(aRenderer.brightnessTopLeft); - tessellator.addVertexWithUV(d12, d13, d15, d4, d6); - tessellator.setColorOpaque_F(aRenderer.colorRedBottomLeft, aRenderer.colorGreenBottomLeft, aRenderer.colorBlueBottomLeft); - tessellator.setBrightness(aRenderer.brightnessBottomLeft); - tessellator.addVertexWithUV(d12, d13, d14, d7, d9); - tessellator.setColorOpaque_F(aRenderer.colorRedBottomRight, aRenderer.colorGreenBottomRight, aRenderer.colorBlueBottomRight); - tessellator.setBrightness(aRenderer.brightnessBottomRight); - tessellator.addVertexWithUV(d11, d13, d14, d3, d5); - tessellator.setColorOpaque_F(aRenderer.colorRedTopRight, aRenderer.colorGreenTopRight, aRenderer.colorBlueTopRight); - tessellator.setBrightness(aRenderer.brightnessTopRight); - tessellator.addVertexWithUV(d11, d13, d15, d8, d10); - } else { - tessellator.addVertexWithUV(d12, d13, d15, d4, d6); - tessellator.addVertexWithUV(d12, d13, d14, d7, d9); - tessellator.addVertexWithUV(d11, d13, d14, d3, d5); - tessellator.addVertexWithUV(d11, d13, d15, d8, d10); - } - } - - /** - * Renders the given texture to the north (z-negative) face of the block. Args: block, x, y, z, texture - */ - public void renderFaceZNeg(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, byte rotation) { - Tessellator tessellator = Tessellator.instance; - - if (aRenderer.hasOverrideBlockTexture()) { - icon = aRenderer.overrideBlockTexture; - } - - double d3 = (double) icon.getInterpolatedU(aRenderer.renderMinX * 16.0D); - double d4 = (double) icon.getInterpolatedU(aRenderer.renderMaxX * 16.0D); - - if (aRenderer.field_152631_f) { - d4 = (double) icon.getInterpolatedU((1.0D - aRenderer.renderMinX) * 16.0D); - d3 = (double) icon.getInterpolatedU((1.0D - aRenderer.renderMaxX) * 16.0D); - } - - double d5 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMaxY * 16.0D); - double d6 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMinY * 16.0D); - double d7; - - if (aRenderer.flipTexture) { - d7 = d3; - d3 = d4; - d4 = d7; - } - - if (aRenderer.renderMinX < 0.0D || aRenderer.renderMaxX > 1.0D) { - d3 = (double) icon.getMinU(); - d4 = (double) icon.getMaxU(); - } - - if (aRenderer.renderMinY < 0.0D || aRenderer.renderMaxY > 1.0D) { - d5 = (double) icon.getMinV(); - d6 = (double) icon.getMaxV(); - } - - d7 = d4; - double d8 = d3; - double d9 = d5; - double d10 = d6; - - switch (rotation) { - case 3: - d3 = (double) icon.getInterpolatedU(aRenderer.renderMaxY * 16.0D); - d4 = (double) icon.getInterpolatedU(aRenderer.renderMinY * 16.0D); - d5 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMinX * 16.0D); - d6 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMaxX * 16.0D); - d9 = d5; - d10 = d6; - d7 = d3; - d8 = d4; - d5 = d6; - d6 = d9; - break; - case 1: - d3 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMinY * 16.0D); - d4 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMaxY * 16.0D); - d5 = (double) icon.getInterpolatedV(aRenderer.renderMaxX * 16.0D); - d6 = (double) icon.getInterpolatedV(aRenderer.renderMinX * 16.0D); - d7 = d4; - d8 = d3; - d3 = d4; - d4 = d8; - d9 = d6; - d10 = d5; - break; - case 2: - d3 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMinX * 16.0D); - d4 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMaxX * 16.0D); - d5 = (double) icon.getInterpolatedV(aRenderer.renderMaxY * 16.0D); - d6 = (double) icon.getInterpolatedV(aRenderer.renderMinY * 16.0D); - d7 = d4; - d8 = d3; - d9 = d5; - d10 = d6; - break; - } - - double d11 = x + aRenderer.renderMinX; - double d12 = x + aRenderer.renderMaxX; - double d13 = y + aRenderer.renderMinY; - double d14 = y + aRenderer.renderMaxY; - double d15 = z + aRenderer.renderMinZ; - - if (aRenderer.renderFromInside) { - d11 = x + aRenderer.renderMaxX; - d12 = x + aRenderer.renderMinX; - } - - if (aRenderer.enableAO) { - tessellator.setColorOpaque_F(aRenderer.colorRedTopLeft, aRenderer.colorGreenTopLeft, aRenderer.colorBlueTopLeft); - tessellator.setBrightness(aRenderer.brightnessTopLeft); - tessellator.addVertexWithUV(d11, d14, d15, d7, d9); - tessellator.setColorOpaque_F(aRenderer.colorRedBottomLeft, aRenderer.colorGreenBottomLeft, aRenderer.colorBlueBottomLeft); - tessellator.setBrightness(aRenderer.brightnessBottomLeft); - tessellator.addVertexWithUV(d12, d14, d15, d3, d5); - tessellator.setColorOpaque_F(aRenderer.colorRedBottomRight, aRenderer.colorGreenBottomRight, aRenderer.colorBlueBottomRight); - tessellator.setBrightness(aRenderer.brightnessBottomRight); - tessellator.addVertexWithUV(d12, d13, d15, d8, d10); - tessellator.setColorOpaque_F(aRenderer.colorRedTopRight, aRenderer.colorGreenTopRight, aRenderer.colorBlueTopRight); - tessellator.setBrightness(aRenderer.brightnessTopRight); - tessellator.addVertexWithUV(d11, d13, d15, d4, d6); - } else { - tessellator.addVertexWithUV(d11, d14, d15, d7, d9); - tessellator.addVertexWithUV(d12, d14, d15, d3, d5); - tessellator.addVertexWithUV(d12, d13, d15, d8, d10); - tessellator.addVertexWithUV(d11, d13, d15, d4, d6); - } - } - - /** - * Renders the given texture to the south (z-positive) face of the block. Args: block, x, y, z, texture - */ - public void renderFaceZPos(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, byte rotation) { - Tessellator tessellator = Tessellator.instance; - - if (aRenderer.hasOverrideBlockTexture()) { - icon = aRenderer.overrideBlockTexture; - } - - double d3 = (double) icon.getInterpolatedU(aRenderer.renderMinX * 16.0D); - double d4 = (double) icon.getInterpolatedU(aRenderer.renderMaxX * 16.0D); - double d5 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMaxY * 16.0D); - double d6 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMinY * 16.0D); - double d7; - - if (aRenderer.flipTexture) { - d7 = d3; - d3 = d4; - d4 = d7; - } - - if (aRenderer.renderMinX < 0.0D || aRenderer.renderMaxX > 1.0D) { - d3 = (double) icon.getMinU(); - d4 = (double) icon.getMaxU(); - } - - if (aRenderer.renderMinY < 0.0D || aRenderer.renderMaxY > 1.0D) { - d5 = (double) icon.getMinV(); - d6 = (double) icon.getMaxV(); - } - - d7 = d4; - double d8 = d3; - double d9 = d5; - double d10 = d6; - - switch (rotation) { - case 1: - d3 = (double) icon.getInterpolatedU(aRenderer.renderMinY * 16.0D); - d6 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMinX * 16.0D); - d4 = (double) icon.getInterpolatedU(aRenderer.renderMaxY * 16.0D); - d5 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMaxX * 16.0D); - d9 = d5; - d10 = d6; - d7 = d3; - d8 = d4; - d5 = d6; - d6 = d9; - break; - case 3: - d3 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMaxY * 16.0D); - d5 = (double) icon.getInterpolatedV(aRenderer.renderMinX * 16.0D); - d4 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMinY * 16.0D); - d6 = (double) icon.getInterpolatedV(aRenderer.renderMaxX * 16.0D); - d7 = d4; - d8 = d3; - d3 = d4; - d4 = d8; - d9 = d6; - d10 = d5; - break; - case 2: - d3 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMinX * 16.0D); - d4 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMaxX * 16.0D); - d5 = (double) icon.getInterpolatedV(aRenderer.renderMaxY * 16.0D); - d6 = (double) icon.getInterpolatedV(aRenderer.renderMinY * 16.0D); - d7 = d4; - d8 = d3; - d9 = d5; - d10 = d6; - break; - } - - double d11 = x + aRenderer.renderMinX; - double d12 = x + aRenderer.renderMaxX; - double d13 = y + aRenderer.renderMinY; - double d14 = y + aRenderer.renderMaxY; - double d15 = z + aRenderer.renderMaxZ; - - if (aRenderer.renderFromInside) { - d11 = x + aRenderer.renderMaxX; - d12 = x + aRenderer.renderMinX; - } - - if (aRenderer.enableAO) { - tessellator.setColorOpaque_F(aRenderer.colorRedTopLeft, aRenderer.colorGreenTopLeft, aRenderer.colorBlueTopLeft); - tessellator.setBrightness(aRenderer.brightnessTopLeft); - tessellator.addVertexWithUV(d11, d14, d15, d3, d5); - tessellator.setColorOpaque_F(aRenderer.colorRedBottomLeft, aRenderer.colorGreenBottomLeft, aRenderer.colorBlueBottomLeft); - tessellator.setBrightness(aRenderer.brightnessBottomLeft); - tessellator.addVertexWithUV(d11, d13, d15, d8, d10); - tessellator.setColorOpaque_F(aRenderer.colorRedBottomRight, aRenderer.colorGreenBottomRight, aRenderer.colorBlueBottomRight); - tessellator.setBrightness(aRenderer.brightnessBottomRight); - tessellator.addVertexWithUV(d12, d13, d15, d4, d6); - tessellator.setColorOpaque_F(aRenderer.colorRedTopRight, aRenderer.colorGreenTopRight, aRenderer.colorBlueTopRight); - tessellator.setBrightness(aRenderer.brightnessTopRight); - tessellator.addVertexWithUV(d12, d14, d15, d7, d9); - } else { - tessellator.addVertexWithUV(d11, d14, d15, d3, d5); - tessellator.addVertexWithUV(d11, d13, d15, d8, d10); - tessellator.addVertexWithUV(d12, d13, d15, d4, d6); - tessellator.addVertexWithUV(d12, d14, d15, d7, d9); - } - } - - /** - * Renders the given texture to the west (x-negative) face of the block. Args: block, x, y, z, texture - */ - public void renderFaceXNeg(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, byte rotation) { - Tessellator tessellator = Tessellator.instance; - - if (aRenderer.hasOverrideBlockTexture()) { - icon = aRenderer.overrideBlockTexture; - } - - double d3 = (double) icon.getInterpolatedU(aRenderer.renderMinZ * 16.0D); - double d4 = (double) icon.getInterpolatedU(aRenderer.renderMaxZ * 16.0D); - double d5 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMaxY * 16.0D); - double d6 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMinY * 16.0D); - double d7; - - if (aRenderer.flipTexture) { - d7 = d3; - d3 = d4; - d4 = d7; - } - - if (aRenderer.renderMinZ < 0.0D || aRenderer.renderMaxZ > 1.0D) { - d3 = (double) icon.getMinU(); - d4 = (double) icon.getMaxU(); - } - - if (aRenderer.renderMinY < 0.0D || aRenderer.renderMaxY > 1.0D) { - d5 = (double) icon.getMinV(); - d6 = (double) icon.getMaxV(); - } - - d7 = d4; - double d8 = d3; - double d9 = d5; - double d10 = d6; - - switch (rotation) { - case 1: - d3 = (double) icon.getInterpolatedU(aRenderer.renderMinY * 16.0D); - d5 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMaxZ * 16.0D); - d4 = (double) icon.getInterpolatedU(aRenderer.renderMaxY * 16.0D); - d6 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMinZ * 16.0D); - d9 = d5; - d10 = d6; - d7 = d3; - d8 = d4; - d5 = d6; - d6 = d9; - break; - case 3: - d3 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMaxY * 16.0D); - d5 = (double) icon.getInterpolatedV(aRenderer.renderMinZ * 16.0D); - d4 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMinY * 16.0D); - d6 = (double) icon.getInterpolatedV(aRenderer.renderMaxZ * 16.0D); - d7 = d4; - d8 = d3; - d3 = d4; - d4 = d8; - d9 = d6; - d10 = d5; - break; - case 2: - d3 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMinZ * 16.0D); - d4 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMaxZ * 16.0D); - d5 = (double) icon.getInterpolatedV(aRenderer.renderMaxY * 16.0D); - d6 = (double) icon.getInterpolatedV(aRenderer.renderMinY * 16.0D); - d7 = d4; - d8 = d3; - d9 = d5; - d10 = d6; - break; - } - - double d11 = x + aRenderer.renderMinX; - double d12 = y + aRenderer.renderMinY; - double d13 = y + aRenderer.renderMaxY; - double d14 = z + aRenderer.renderMinZ; - double d15 = z + aRenderer.renderMaxZ; - - if (aRenderer.renderFromInside) { - d14 = z + aRenderer.renderMaxZ; - d15 = z + aRenderer.renderMinZ; - } - - if (aRenderer.enableAO) { - tessellator.setColorOpaque_F(aRenderer.colorRedTopLeft, aRenderer.colorGreenTopLeft, aRenderer.colorBlueTopLeft); - tessellator.setBrightness(aRenderer.brightnessTopLeft); - tessellator.addVertexWithUV(d11, d13, d15, d7, d9); - tessellator.setColorOpaque_F(aRenderer.colorRedBottomLeft, aRenderer.colorGreenBottomLeft, aRenderer.colorBlueBottomLeft); - tessellator.setBrightness(aRenderer.brightnessBottomLeft); - tessellator.addVertexWithUV(d11, d13, d14, d3, d5); - tessellator.setColorOpaque_F(aRenderer.colorRedBottomRight, aRenderer.colorGreenBottomRight, aRenderer.colorBlueBottomRight); - tessellator.setBrightness(aRenderer.brightnessBottomRight); - tessellator.addVertexWithUV(d11, d12, d14, d8, d10); - tessellator.setColorOpaque_F(aRenderer.colorRedTopRight, aRenderer.colorGreenTopRight, aRenderer.colorBlueTopRight); - tessellator.setBrightness(aRenderer.brightnessTopRight); - tessellator.addVertexWithUV(d11, d12, d15, d4, d6); - } else { - tessellator.addVertexWithUV(d11, d13, d15, d7, d9); - tessellator.addVertexWithUV(d11, d13, d14, d3, d5); - tessellator.addVertexWithUV(d11, d12, d14, d8, d10); - tessellator.addVertexWithUV(d11, d12, d15, d4, d6); - } - } - - /** - * Renders the given texture to the east (x-positive) face of the block. Args: block, x, y, z, texture - */ - public void renderFaceXPos(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, byte rotation) { - Tessellator tessellator = Tessellator.instance; - - if (aRenderer.hasOverrideBlockTexture()) { - icon = aRenderer.overrideBlockTexture; - } - - double d3 = (double) icon.getInterpolatedU(aRenderer.renderMinZ * 16.0D); - double d4 = (double) icon.getInterpolatedU(aRenderer.renderMaxZ * 16.0D); - - if (aRenderer.field_152631_f) { - d4 = (double) icon.getInterpolatedU((1.0D - aRenderer.renderMinZ) * 16.0D); - d3 = (double) icon.getInterpolatedU((1.0D - aRenderer.renderMaxZ) * 16.0D); - } - - double d5 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMaxY * 16.0D); - double d6 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMinY * 16.0D); - double d7; - - if (aRenderer.flipTexture) { - d7 = d3; - d3 = d4; - d4 = d7; - } - - if (aRenderer.renderMinZ < 0.0D || aRenderer.renderMaxZ > 1.0D) { - d3 = (double) icon.getMinU(); - d4 = (double) icon.getMaxU(); - } - - if (aRenderer.renderMinY < 0.0D || aRenderer.renderMaxY > 1.0D) { - d5 = (double) icon.getMinV(); - d6 = (double) icon.getMaxV(); - } - - d7 = d4; - double d8 = d3; - double d9 = d5; - double d10 = d6; - - switch (rotation) { - case 3: - d3 = (double) icon.getInterpolatedU(aRenderer.renderMaxY * 16.0D); - d5 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMinZ * 16.0D); - d4 = (double) icon.getInterpolatedU(aRenderer.renderMinY * 16.0D); - d6 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMaxZ * 16.0D); - d9 = d5; - d10 = d6; - d7 = d3; - d8 = d4; - d5 = d6; - d6 = d9; - break; - case 1: - d3 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMinY * 16.0D); - d5 = (double) icon.getInterpolatedV(aRenderer.renderMaxZ * 16.0D); - d4 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMaxY * 16.0D); - d6 = (double) icon.getInterpolatedV(aRenderer.renderMinZ * 16.0D); - d7 = d4; - d8 = d3; - d3 = d4; - d4 = d8; - d9 = d6; - d10 = d5; - break; - case 2: - d3 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMinZ * 16.0D); - d4 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMaxZ * 16.0D); - d5 = (double) icon.getInterpolatedV(aRenderer.renderMaxY * 16.0D); - d6 = (double) icon.getInterpolatedV(aRenderer.renderMinY * 16.0D); - d7 = d4; - d8 = d3; - d9 = d5; - d10 = d6; - break; - } - - double d11 = x + aRenderer.renderMaxX; - double d12 = y + aRenderer.renderMinY; - double d13 = y + aRenderer.renderMaxY; - double d14 = z + aRenderer.renderMinZ; - double d15 = z + aRenderer.renderMaxZ; - - if (aRenderer.renderFromInside) { - d14 = z + aRenderer.renderMaxZ; - d15 = z + aRenderer.renderMinZ; - } - - if (aRenderer.enableAO) { - tessellator.setColorOpaque_F(aRenderer.colorRedTopLeft, aRenderer.colorGreenTopLeft, aRenderer.colorBlueTopLeft); - tessellator.setBrightness(aRenderer.brightnessTopLeft); - tessellator.addVertexWithUV(d11, d12, d15, d8, d10); - tessellator.setColorOpaque_F(aRenderer.colorRedBottomLeft, aRenderer.colorGreenBottomLeft, aRenderer.colorBlueBottomLeft); - tessellator.setBrightness(aRenderer.brightnessBottomLeft); - tessellator.addVertexWithUV(d11, d12, d14, d4, d6); - tessellator.setColorOpaque_F(aRenderer.colorRedBottomRight, aRenderer.colorGreenBottomRight, aRenderer.colorBlueBottomRight); - tessellator.setBrightness(aRenderer.brightnessBottomRight); - tessellator.addVertexWithUV(d11, d13, d14, d7, d9); - tessellator.setColorOpaque_F(aRenderer.colorRedTopRight, aRenderer.colorGreenTopRight, aRenderer.colorBlueTopRight); - tessellator.setBrightness(aRenderer.brightnessTopRight); - tessellator.addVertexWithUV(d11, d13, d15, d3, d5); - } else { - tessellator.addVertexWithUV(d11, d12, d15, d8, d10); - tessellator.addVertexWithUV(d11, d12, d14, d4, d6); - tessellator.addVertexWithUV(d11, d13, d14, d7, d9); - tessellator.addVertexWithUV(d11, d13, d15, d3, d5); - } - } - - @Override - public short[] getRGBA() { - return mRGBa; - } - - @Override - public boolean isValidTexture() { - return mIconContainer != null; - } - - private static byte getRotation(int x, int y, int z) { - World w = Minecraft.getMinecraft().theWorld; - if (w != null) { - TileEntity te = w.getTileEntity(x, y, z); - if (te instanceof IGregTechTileEntity) { - IMetaTileEntity meta = ((IGregTechTileEntity) te).getMetaTileEntity(); - if (meta instanceof IFrontRotation) { - return ((IFrontRotation) meta).getFrontRotation(); - } - } - } - return 0; - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Centrifuge.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Centrifuge.java index 63177d40ae..9612426598 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Centrifuge.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Centrifuge.java @@ -11,7 +11,7 @@ import com.github.technus.tectech.thing.metaTileEntity.multi.base.Parameters; import java.util.Arrays; -import static com.github.technus.tectech.CommonValues.V; +import static com.github.technus.tectech.util.CommonValues.V; import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.*; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_ElectromagneticSeparator.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_ElectromagneticSeparator.java index 08a79e5c90..c79087d051 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_ElectromagneticSeparator.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_ElectromagneticSeparator.java @@ -9,7 +9,7 @@ import com.github.technus.tectech.thing.metaTileEntity.multi.base.IStatusFunctio import com.github.technus.tectech.thing.metaTileEntity.multi.base.MultiblockControl; import com.github.technus.tectech.thing.metaTileEntity.multi.base.Parameters; -import static com.github.technus.tectech.CommonValues.V; +import static com.github.technus.tectech.util.CommonValues.V; import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.*; /** diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Recycler.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Recycler.java index 8187759445..b81dd885a5 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Recycler.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Recycler.java @@ -4,7 +4,7 @@ import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInsta import com.github.technus.tectech.thing.metaTileEntity.multi.base.MultiblockControl; import com.github.technus.tectech.thing.metaTileEntity.multi.base.Parameters; -import static com.github.technus.tectech.CommonValues.V; +import static com.github.technus.tectech.util.CommonValues.V; /** * Created by danie_000 on 24.12.2017. diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java index d45fbc31d7..dce8f56ce9 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java @@ -1,12 +1,12 @@ package com.github.technus.tectech.thing.metaTileEntity.multi.em_machine; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.thing.block.QuantumStuffBlock; -import com.github.technus.tectech.thing.metaTileEntity.IConstructable; +import com.github.technus.tectech.mechanics.constructible.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.*; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; @@ -21,7 +21,7 @@ import net.minecraftforge.common.util.ForgeDirection; import java.util.HashMap; import java.util.function.Supplier; -import static com.github.technus.tectech.Util.StructureBuilderExtreme; +import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.*; @@ -350,7 +350,7 @@ public class GT_MetaTileEntity_EM_machine extends GT_MetaTileEntity_MultiblockBa @Override public void construct(int stackSize, boolean hintsOnly) { - StructureBuilderExtreme(shape, blockType, blockMeta, 2, 2, 1, getBaseMetaTileEntity(), this, hintsOnly); + StructureBuilderExtreme(shape, blockType, blockMeta, 2, 2, 1, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_Data.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_Data.java index 59ad1b927e..7aabff1af4 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_Data.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_Data.java @@ -1,6 +1,9 @@ package com.github.technus.tectech.thing.metaTileEntity.pipe; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.mechanics.pipe.IActivePipe; +import com.github.technus.tectech.mechanics.pipe.IConnectsToDataPipe; +import com.github.technus.tectech.mechanics.pipe.PipeActivityMessage; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.loader.NetworkDispatcher; import cpw.mods.fml.relauncher.Side; @@ -31,7 +34,7 @@ import static net.minecraft.util.StatCollector.translateToLocal; /** * Created by Tec on 26.02.2017. */ -public class GT_MetaTileEntity_Pipe_Data extends MetaPipeEntity implements IConnectsToDataPipe,IActivePipe { +public class GT_MetaTileEntity_Pipe_Data extends MetaPipeEntity implements IConnectsToDataPipe, IActivePipe { private static Textures.BlockIcons.CustomIcon EMpipe; private static Textures.BlockIcons.CustomIcon EMbar,EMbarActive; public byte connectionCount = 0; @@ -118,25 +121,16 @@ public class GT_MetaTileEntity_Pipe_Data extends MetaPipeEntity implements IConn public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { if (aBaseMetaTileEntity.isServerSide()) { if ((aTick & 31) == 31) { + if(TecTech.RANDOM.nextInt(15)==0) { + NetworkDispatcher.INSTANCE.sendToAllAround(new PipeActivityMessage.PipeActivityData(this), + aBaseMetaTileEntity.getWorld().provider.dimensionId, + aBaseMetaTileEntity.getXCoord(), + aBaseMetaTileEntity.getYCoord(), + aBaseMetaTileEntity.getZCoord(), + 256); + } if(active){ - if(TecTech.RANDOM.nextInt(15)==0) { - NetworkDispatcher.INSTANCE.sendToAllAround(new PipeActivityMessage.PipeActivityData(this), - aBaseMetaTileEntity.getWorld().provider.dimensionId, - aBaseMetaTileEntity.getXCoord(), - aBaseMetaTileEntity.getYCoord(), - aBaseMetaTileEntity.getZCoord(), - 256); - } active=false; - }else if(getActive()){ - if(TecTech.RANDOM.nextInt(15)==0) { - NetworkDispatcher.INSTANCE.sendToAllAround(new PipeActivityMessage.PipeActivityData(this), - aBaseMetaTileEntity.getWorld().provider.dimensionId, - aBaseMetaTileEntity.getXCoord(), - aBaseMetaTileEntity.getYCoord(), - aBaseMetaTileEntity.getZCoord(), - 256); - } } mConnections = 0; connectionCount = 0; @@ -275,9 +269,11 @@ public class GT_MetaTileEntity_Pipe_Data extends MetaPipeEntity implements IConn } @Override - public void setActive(boolean active) { - this.active=active; - getBaseMetaTileEntity().issueTextureUpdate(); + public void setActive(boolean state) { + if(state!=active) { + active = state; + getBaseMetaTileEntity().issueTextureUpdate(); + } } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_EM.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_EM.java index 98e0feccd1..55a7f23b6a 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_EM.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_EM.java @@ -1,6 +1,9 @@ package com.github.technus.tectech.thing.metaTileEntity.pipe; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.mechanics.pipe.IActivePipe; +import com.github.technus.tectech.mechanics.pipe.IConnectsToElementalPipe; +import com.github.technus.tectech.mechanics.pipe.PipeActivityMessage; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.loader.NetworkDispatcher; import cpw.mods.fml.relauncher.Side; @@ -32,7 +35,7 @@ import static net.minecraft.util.StatCollector.translateToLocal; /** * Created by Tec on 26.02.2017. */ -public class GT_MetaTileEntity_Pipe_EM extends MetaPipeEntity implements IConnectsToElementalPipe,IActivePipe { +public class GT_MetaTileEntity_Pipe_EM extends MetaPipeEntity implements IConnectsToElementalPipe, IActivePipe { private static Textures.BlockIcons.CustomIcon EMpipe; static Textures.BlockIcons.CustomIcon EMcandy,EMCandyActive; public byte connectionCount = 0; @@ -119,25 +122,16 @@ public class GT_MetaTileEntity_Pipe_EM extends MetaPipeEntity implements IConnec public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { if (aBaseMetaTileEntity.isServerSide()) { if ((aTick & 31) == 31) { + if(TecTech.RANDOM.nextInt(15)==0) { + NetworkDispatcher.INSTANCE.sendToAllAround(new PipeActivityMessage.PipeActivityData(this), + aBaseMetaTileEntity.getWorld().provider.dimensionId, + aBaseMetaTileEntity.getXCoord(), + aBaseMetaTileEntity.getYCoord(), + aBaseMetaTileEntity.getZCoord(), + 256); + } if(active){ - if(TecTech.RANDOM.nextInt(7)==0) { - NetworkDispatcher.INSTANCE.sendToAllAround(new PipeActivityMessage.PipeActivityData(this), - aBaseMetaTileEntity.getWorld().provider.dimensionId, - aBaseMetaTileEntity.getXCoord(), - aBaseMetaTileEntity.getYCoord(), - aBaseMetaTileEntity.getZCoord(), - 256); - } active=false; - }else if(getActive()){ - if(TecTech.RANDOM.nextInt(7)==0) { - NetworkDispatcher.INSTANCE.sendToAllAround(new PipeActivityMessage.PipeActivityData(this), - aBaseMetaTileEntity.getWorld().provider.dimensionId, - aBaseMetaTileEntity.getXCoord(), - aBaseMetaTileEntity.getYCoord(), - aBaseMetaTileEntity.getZCoord(), - 256); - } } mConnections = 0; connectionCount = 0; @@ -240,9 +234,11 @@ public class GT_MetaTileEntity_Pipe_EM extends MetaPipeEntity implements IConnec } @Override - public void setActive(boolean active) { - this.active=active; - getBaseMetaTileEntity().issueTextureUpdate(); + public void setActive(boolean state) { + if(state!=active) { + active = state; + getBaseMetaTileEntity().issueTextureUpdate(); + } } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_Energy.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_Energy.java index ce315fcd86..ef767dacdd 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_Energy.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_Energy.java @@ -1,6 +1,9 @@ package com.github.technus.tectech.thing.metaTileEntity.pipe; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.mechanics.pipe.IActivePipe; +import com.github.technus.tectech.mechanics.pipe.IConnectsToEnergyTunnel; +import com.github.technus.tectech.mechanics.pipe.PipeActivityMessage; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.loader.NetworkDispatcher; import cpw.mods.fml.relauncher.Side; @@ -31,11 +34,11 @@ import static com.github.technus.tectech.thing.metaTileEntity.pipe.GT_MetaTileEn import static gregtech.api.enums.Dyes.MACHINE_METAL; import static net.minecraft.util.StatCollector.translateToLocal; -public class GT_MetaTileEntity_Pipe_Energy extends MetaPipeEntity implements IConnectsToEnergyTunnel,IActivePipe { +public class GT_MetaTileEntity_Pipe_Energy extends MetaPipeEntity implements IConnectsToEnergyTunnel, IActivePipe { private static Textures.BlockIcons.CustomIcon EMpipe; public byte connectionCount = 0; - private boolean active; + private boolean active,lastActive; public GT_MetaTileEntity_Pipe_Energy(int aID, String aName, String aNameRegional) { super(aID, aName, aNameRegional, 0); @@ -115,25 +118,16 @@ public class GT_MetaTileEntity_Pipe_Energy extends MetaPipeEntity implements ICo public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { if (aBaseMetaTileEntity.isServerSide()) { if ((aTick & 31) == 31) { + if(TecTech.RANDOM.nextInt(15)==0) { + NetworkDispatcher.INSTANCE.sendToAllAround(new PipeActivityMessage.PipeActivityData(this), + aBaseMetaTileEntity.getWorld().provider.dimensionId, + aBaseMetaTileEntity.getXCoord(), + aBaseMetaTileEntity.getYCoord(), + aBaseMetaTileEntity.getZCoord(), + 256); + } if(active){ - if(TecTech.RANDOM.nextInt(31)==0) { - NetworkDispatcher.INSTANCE.sendToAllAround(new PipeActivityMessage.PipeActivityData(this), - aBaseMetaTileEntity.getWorld().provider.dimensionId, - aBaseMetaTileEntity.getXCoord(), - aBaseMetaTileEntity.getYCoord(), - aBaseMetaTileEntity.getZCoord(), - 256); - } active=false; - }else if(getActive()){ - if(TecTech.RANDOM.nextInt(31)==0) { - NetworkDispatcher.INSTANCE.sendToAllAround(new PipeActivityMessage.PipeActivityData(this), - aBaseMetaTileEntity.getWorld().provider.dimensionId, - aBaseMetaTileEntity.getXCoord(), - aBaseMetaTileEntity.getYCoord(), - aBaseMetaTileEntity.getZCoord(), - 256); - } } mConnections = 0; connectionCount = 0; @@ -180,8 +174,10 @@ public class GT_MetaTileEntity_Pipe_Energy extends MetaPipeEntity implements ICo @Override public void setActive(boolean state){ - this.active=state; - getBaseMetaTileEntity().issueTextureUpdate(); + if(state!=active) { + active = state; + getBaseMetaTileEntity().issueTextureUpdate(); + } } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/IActivePipe.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/IActivePipe.java deleted file mode 100644 index 5552992e56..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/IActivePipe.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.pipe; - -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; - -public interface IActivePipe extends IMetaTileEntity { - void setActive(boolean active); - boolean getActive(); - void markUsed(); -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/IConnectsToDataPipe.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/IConnectsToDataPipe.java deleted file mode 100644 index def0795ba3..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/IConnectsToDataPipe.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.pipe; - -/** - * Created by Tec on 26.02.2017. - */ -public interface IConnectsToDataPipe { - boolean canConnectData(byte side); - - IConnectsToDataPipe getNext(IConnectsToDataPipe source); - - boolean isDataInputFacing(byte side); - - byte getColorization(); -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/IConnectsToElementalPipe.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/IConnectsToElementalPipe.java deleted file mode 100644 index 5841d3d010..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/IConnectsToElementalPipe.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.pipe; - -/** - * Created by Tec on 26.02.2017. - */ -public interface IConnectsToElementalPipe { - boolean canConnect(byte side); -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/IConnectsToEnergyTunnel.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/IConnectsToEnergyTunnel.java deleted file mode 100644 index 4a720d067e..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/IConnectsToEnergyTunnel.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.pipe; - -/** - * Created by Tec on 26.02.2017. - */ -public interface IConnectsToEnergyTunnel { - boolean canConnect(byte side); -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/PipeActivityMessage.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/PipeActivityMessage.java deleted file mode 100644 index e7183b8838..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/PipeActivityMessage.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.pipe; - -import cpw.mods.fml.common.network.ByteBufUtils; -import cpw.mods.fml.common.network.simpleimpl.IMessage; -import cpw.mods.fml.common.network.simpleimpl.MessageContext; -import eu.usrv.yamcore.network.client.AbstractClientMessageHandler; -import eu.usrv.yamcore.network.server.AbstractServerMessageHandler; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import io.netty.buffer.ByteBuf; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.common.DimensionManager; - -public class PipeActivityMessage implements IMessage { - int mPosX; - int mPosY; - int mPosZ; - int mPosD; - int mActive; - - public PipeActivityMessage() { - } - - private PipeActivityMessage(IActivePipe metaTile) { - IGregTechTileEntity base=metaTile.getBaseMetaTileEntity(); - mPosX=base.getXCoord(); - mPosY=base.getYCoord(); - mPosZ=base.getZCoord(); - mPosD=base.getWorld().provider.dimensionId; - mActive=metaTile.getActive()?1:0; - } - - private PipeActivityMessage(World world, int x, int y, int z, boolean active) { - mPosX=x; - mPosY=y; - mPosZ=z; - mPosD=world.provider.dimensionId; - mActive=active?1:0; - } - - @Override - public void fromBytes(ByteBuf pBuffer) { - NBTTagCompound tTag = ByteBufUtils.readTag(pBuffer); - mPosX = tTag.getInteger("posx"); - mPosY = tTag.getInteger("posy"); - mPosZ = tTag.getInteger("posz"); - mPosD = tTag.getInteger("posd"); - mActive = tTag.getInteger("active"); - } - - @Override - public void toBytes(ByteBuf pBuffer) { - NBTTagCompound tFXTag = new NBTTagCompound(); - tFXTag.setInteger("posx", mPosX); - tFXTag.setInteger("posy", mPosY); - tFXTag.setInteger("posz", mPosZ); - tFXTag.setInteger("posd", mPosD); - tFXTag.setInteger("active", mActive); - - ByteBufUtils.writeTag(pBuffer, tFXTag); - } - - public static class PipeActivityQuery extends PipeActivityMessage { - public PipeActivityQuery() { - } - - public PipeActivityQuery(IActivePipe metaTile) { - super(metaTile); - } - - public PipeActivityQuery(World world, int x,int y,int z, boolean active) { - super(world,x,y,z,active); - } - } - - public static class PipeActivityData extends PipeActivityMessage { - public PipeActivityData() { - } - - private PipeActivityData(PipeActivityQuery query){ - mPosX=query.mPosX; - mPosY=query.mPosY; - mPosZ=query.mPosZ; - mPosD=query.mPosD; - mActive=query.mActive; - } - - public PipeActivityData(IActivePipe metaTile) { - super(metaTile); - } - - public PipeActivityData(World world, int x,int y,int z, boolean active) { - super(world,x,y,z,active); - } - } - - public static class ClientHandler extends AbstractClientMessageHandler { - @Override - public IMessage handleClientMessage(EntityPlayer pPlayer, PipeActivityData pMessage, MessageContext pCtx) { - if(pPlayer.worldObj.provider.dimensionId==pMessage.mPosD){ - TileEntity te=pPlayer.worldObj.getTileEntity(pMessage.mPosX,pMessage.mPosY,pMessage.mPosZ); - if(te instanceof IGregTechTileEntity){ - IMetaTileEntity meta = ((IGregTechTileEntity) te).getMetaTileEntity(); - if(meta instanceof IActivePipe){ - ((IActivePipe) meta).setActive((byte)pMessage.mActive==1); - } - } - } - return null; - } - } - - public static class ServerHandler extends AbstractServerMessageHandler { - @Override - public IMessage handleServerMessage(EntityPlayer pPlayer, PipeActivityQuery pMessage, MessageContext pCtx) { - World world= DimensionManager.getWorld(pMessage.mPosD); - if(world!=null) { - TileEntity te = world.getTileEntity(pMessage.mPosX, pMessage.mPosY, pMessage.mPosZ); - if (te instanceof IGregTechTileEntity) { - IMetaTileEntity meta = ((IGregTechTileEntity) te).getMetaTileEntity(); - if (meta instanceof IActivePipe) { - pMessage.mActive=((IActivePipe) meta).getActive()?1:0; - return new PipeActivityData(pMessage); - } - } - } - return null; - } - } -} \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_BuckConverter.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_BuckConverter.java index d4335e3c5a..737046729f 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_BuckConverter.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_BuckConverter.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.single; -import com.github.technus.tectech.CommonValues; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.CommonValues; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.thing.metaTileEntity.single.gui.GT_Container_BuckConverter; import com.github.technus.tectech.thing.metaTileEntity.single.gui.GT_GUIContainer_BuckConverter; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DataReader.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DataReader.java index a56172c7f4..d942786916 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DataReader.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DataReader.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.single; -import com.github.technus.tectech.CommonValues; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.CommonValues; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.thing.metaTileEntity.single.gui.GT_Container_DataReader; import com.github.technus.tectech.thing.metaTileEntity.single.gui.GT_GUIContainer_DataReader; import cpw.mods.fml.common.FMLCommonHandler; @@ -28,10 +28,10 @@ import net.minecraftforge.fluids.FluidStack; import java.util.*; -import static com.github.technus.tectech.CommonValues.V; import static com.github.technus.tectech.Reference.MODID; import static com.github.technus.tectech.recipe.TT_recipeAdder.nullItem; import static com.github.technus.tectech.thing.metaTileEntity.Textures.MACHINE_CASINGS_TT; +import static com.github.technus.tectech.util.CommonValues.V; import static net.minecraft.util.StatCollector.translateToLocal; /** diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugPollutor.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugPollutor.java index e092eb7c38..6fef2efbe9 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugPollutor.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugPollutor.java @@ -1,8 +1,8 @@ package com.github.technus.tectech.thing.metaTileEntity.single; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_OverflowElemental; import com.github.technus.tectech.thing.metaTileEntity.single.gui.GT_Container_DebugPollutor; import com.github.technus.tectech.thing.metaTileEntity.single.gui.GT_GUIContainer_DebugPollutor; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugPowerGenerator.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugPowerGenerator.java index 0da48dfbac..931da27e6c 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugPowerGenerator.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugPowerGenerator.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.single; -import com.github.technus.tectech.CommonValues; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.CommonValues; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.thing.metaTileEntity.single.gui.GT_Container_DebugPowerGenerator; import com.github.technus.tectech.thing.metaTileEntity.single.gui.GT_GUIContainer_DebugPowerGenerator; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugStructureWriter.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugStructureWriter.java index 171e051c5c..f40752bcf5 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugStructureWriter.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugStructureWriter.java @@ -1,8 +1,8 @@ package com.github.technus.tectech.thing.metaTileEntity.single; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.thing.metaTileEntity.single.gui.GT_Container_DebugStructureWriter; import com.github.technus.tectech.thing.metaTileEntity.single.gui.GT_GUIContainer_DebugStructureWriter; import cpw.mods.fml.relauncher.Side; @@ -20,7 +20,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; -import static com.github.technus.tectech.Util.StructureWriter; +import static com.github.technus.tectech.util.Util.StructureWriter; import static com.github.technus.tectech.thing.metaTileEntity.Textures.MACHINE_CASINGS_TT; import static net.minecraft.util.StatCollector.translateToLocal; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_MicroController.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_MicroController.java index 79f753aa02..9bac9df2f3 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_MicroController.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_MicroController.java @@ -10,7 +10,7 @@ import com.github.technus.avrClone.memory.EepromMemory; import com.github.technus.avrClone.memory.RemovableMemory; import com.github.technus.avrClone.memory.program.ProgramMemory; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.mechanics.avr.SidedRedstone; import gregtech.api.enums.Textures; import gregtech.api.interfaces.ITexture; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_OwnerDetector.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_OwnerDetector.java index c22219e6d9..03ec9efd89 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_OwnerDetector.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_OwnerDetector.java @@ -1,8 +1,8 @@ package com.github.technus.tectech.thing.metaTileEntity.single; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; @@ -21,7 +21,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; import org.apache.commons.lang3.reflect.FieldUtils; -import static com.github.technus.tectech.CommonValues.RECIPE_AT; +import static com.github.technus.tectech.util.CommonValues.RECIPE_AT; import static com.github.technus.tectech.thing.metaTileEntity.Textures.MACHINE_CASINGS_TT; import static net.minecraft.util.StatCollector.translateToLocal; import static net.minecraft.util.StatCollector.translateToLocalFormatted; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TT_Transformer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TT_Transformer.java index 2302d1a42b..61f2259c5c 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TT_Transformer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TT_Transformer.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.single; -import com.github.technus.tectech.CommonValues; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.CommonValues; +import com.github.technus.tectech.util.Util; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java index 48db8725df..0c282ac94f 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java @@ -1,8 +1,8 @@ package com.github.technus.tectech.thing.metaTileEntity.single; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.loader.NetworkDispatcher; import com.github.technus.tectech.mechanics.data.RendererMessage; import com.github.technus.tectech.mechanics.data.ThaumSpark; @@ -26,9 +26,9 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Map; -import static com.github.technus.tectech.CommonValues.V; -import static com.github.technus.tectech.Util.entriesSortedByValues; -import static com.github.technus.tectech.Util.map; +import static com.github.technus.tectech.util.CommonValues.V; +import static com.github.technus.tectech.util.Util.entriesSortedByValues; +import static com.github.technus.tectech.util.Util.map; import static com.github.technus.tectech.thing.metaTileEntity.Textures.*; import static java.lang.Math.round; import static net.minecraft.util.StatCollector.translateToLocal; @@ -206,9 +206,9 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB IMetaTileEntity nodeInside = node.getMetaTileEntity(); if (nodeInside instanceof GT_MetaTileEntity_TM_teslaCoil) { GT_MetaTileEntity_TM_teslaCoil nodeTesla = (GT_MetaTileEntity_TM_teslaCoil) nodeInside; - xR = (byte) (nodeTesla.posTop[0] - x); - yR = (byte) (nodeTesla.posTop[1] - y); - zR = (byte) (nodeTesla.posTop[2] - z); + xR = (byte) (nodeTesla.posTop.get0() - x); + yR = (byte) (nodeTesla.posTop.get1() - y); + zR = (byte) (nodeTesla.posTop.get2() - z); } else { xR = (byte) (node.getXCoord() - x); yR = (byte) (node.getYCoord() - y); diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_WetTransformer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_WetTransformer.java index 02f84bd7c3..ca937f813c 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_WetTransformer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_WetTransformer.java @@ -1,11 +1,11 @@ package com.github.technus.tectech.thing.metaTileEntity.single; -import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.util.CommonValues; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import static com.github.technus.tectech.CommonValues.V; +import static com.github.technus.tectech.util.CommonValues.V; import static net.minecraft.util.StatCollector.translateToLocal; public class GT_MetaTileEntity_WetTransformer extends GT_MetaTileEntity_TT_Transformer { diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/gui/GT_Container_DebugPollutor.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/gui/GT_Container_DebugPollutor.java index ebeb266c64..b40a9126b7 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/gui/GT_Container_DebugPollutor.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/gui/GT_Container_DebugPollutor.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.thing.metaTileEntity.single.gui; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.thing.metaTileEntity.single.GT_MetaTileEntity_DebugPollutor; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/gui/GT_GUIContainer_BuckConverter.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/gui/GT_GUIContainer_BuckConverter.java index 946006c8fa..6b6b778d40 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/gui/GT_GUIContainer_BuckConverter.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/gui/GT_GUIContainer_BuckConverter.java @@ -1,11 +1,11 @@ package com.github.technus.tectech.thing.metaTileEntity.single.gui; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import gregtech.api.gui.GT_GUIContainerMetaTile_Machine; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import net.minecraft.entity.player.InventoryPlayer; -import static com.github.technus.tectech.CommonValues.VN; +import static com.github.technus.tectech.util.CommonValues.VN; import static gregtech.api.enums.GT_Values.RES_PATH_GUI; public class GT_GUIContainer_BuckConverter extends GT_GUIContainerMetaTile_Machine { diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/gui/GT_GUIContainer_DataReader.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/gui/GT_GUIContainer_DataReader.java index e0e3cdd6b8..bde5b90048 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/gui/GT_GUIContainer_DataReader.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/gui/GT_GUIContainer_DataReader.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.thing.metaTileEntity.single.gui; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import com.github.technus.tectech.thing.metaTileEntity.single.GT_MetaTileEntity_DataReader; import gregtech.api.gui.GT_GUIContainerMetaTile_Machine; import gregtech.api.gui.GT_Slot_Holo; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/gui/GT_GUIContainer_DebugPowerGenerator.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/gui/GT_GUIContainer_DebugPowerGenerator.java index ad3839e80a..ee6e952040 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/gui/GT_GUIContainer_DebugPowerGenerator.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/gui/GT_GUIContainer_DebugPowerGenerator.java @@ -1,11 +1,11 @@ package com.github.technus.tectech.thing.metaTileEntity.single.gui; -import com.github.technus.tectech.Util; +import com.github.technus.tectech.util.Util; import gregtech.api.gui.GT_GUIContainerMetaTile_Machine; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import net.minecraft.entity.player.InventoryPlayer; -import static com.github.technus.tectech.CommonValues.VN; +import static com.github.technus.tectech.util.CommonValues.VN; import static gregtech.api.enums.GT_Values.RES_PATH_GUI; public class GT_GUIContainer_DebugPowerGenerator extends GT_GUIContainerMetaTile_Machine { diff --git a/src/main/java/com/github/technus/tectech/util/CommonValues.java b/src/main/java/com/github/technus/tectech/util/CommonValues.java new file mode 100644 index 0000000000..f5d5ce6900 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/util/CommonValues.java @@ -0,0 +1,43 @@ +package com.github.technus.tectech.util; + +import net.minecraft.util.EnumChatFormatting; + +/** + * Created by danie_000 on 11.01.2017. + */ +public final class CommonValues { + public static final String TEC_MARK_GENERAL = + EnumChatFormatting.BLUE + "Tec" + + EnumChatFormatting.DARK_BLUE + "Tech" + + EnumChatFormatting.BLUE + ": Interdimensional"; + public static final String TEC_MARK_EM = + EnumChatFormatting.BLUE + "Tec" + + EnumChatFormatting.DARK_BLUE + "Tech" + + EnumChatFormatting.BLUE + ": Elemental Matter"; + public static final String BASS_MARK = + EnumChatFormatting.BLUE + "Tec" + + EnumChatFormatting.DARK_BLUE + "Tech" + + EnumChatFormatting.BLUE + ": Theta Movement"; + public static final String COSMIC_MARK = + EnumChatFormatting.BLUE + "Tec" + + EnumChatFormatting.DARK_BLUE + "Tech" + + EnumChatFormatting.BLUE + ": Cosmic";//TODO get a better name than cosmic for *UNDEFINED* thing + + public static final byte DECAY_AT = 0;// hatches compute decays + public static final byte MULTI_PURGE_1_AT = 2;// multiblocks clean their hatches 1 + public static final byte MOVE_AT = 4;// move stuff around + public static final byte RECIPE_AT = 6;// move stuff around + public static final byte MULTI_PURGE_2_AT = 8;// multiblocks clean their hatches 2 + public static final byte OVERFLOW_AT = 10;// then hatches clean themselves + // - in case some hatches are not in multiblock structure + public static final byte MULTI_CHECK_AT = 12;// multiblock checks it's state + public static final byte DISPERSE_AT = 14;// overflow hatches perform disperse + public static final byte TRANSFER_AT = 16; + + public static final long[] AatV = new long[]{268435455,67108863,16777215,4194303,1048575,262143,65535,16383,4095,1023,255,63,15,3,1,1}; + public static final String[] VOLTAGE_NAMES = new String[]{"Ultra Low Voltage", "Low Voltage", "Medium Voltage", "High Voltage", "Extreme Voltage", "Insane Voltage", "Ludicrous Voltage", "ZPM Voltage", "Ultimate Voltage", "Ultimate High Voltage", "Ultimate Extreme Voltage", "Ultimate Insane Voltage", "Ultimate Mega Voltage", "Ultimate Extended Mega Voltage", "Overpowered Voltage", "Maximum Voltage"}; + public static final String[] VN = new String[]{"ULV", "LV", "MV", "HV", "EV", "IV", "LuV", "ZPM", "UV", "UHV", "UEV", "UIV", "UMV", "UXV", "OpV", "MAX"}; + public static final long[] V = new long[]{8L, 32L, 128L, 512L, 2048L, 8192L, 32768L, 131072L, 524288L, 2097152L, 8388608L, 33554432L, 134217728L, 536870912L, 1073741824L, Integer.MAX_VALUE - 7}; + + private CommonValues() {} +} diff --git a/src/main/java/com/github/technus/tectech/util/Converter.java b/src/main/java/com/github/technus/tectech/util/Converter.java new file mode 100644 index 0000000000..799d98a4d6 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/util/Converter.java @@ -0,0 +1,59 @@ +package com.github.technus.tectech.util; + +import java.io.*; + +public final class Converter { + private Converter() {} + + public static void writeInts(int [] array,ByteArrayOutputStream byteArrayOutputStream) { + try { + DataOutputStream dataOutputStream = new DataOutputStream(byteArrayOutputStream); + for (int i = 0; i < array.length; i++) { + dataOutputStream.writeInt(array[i]); + } + dataOutputStream.flush(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public static void readInts(ByteArrayInputStream byteArrayInputStream,int[] array) { + try { + DataInputStream dataInputStream = new DataInputStream(byteArrayInputStream); + for (int i = 0; i < array.length; i++) { + array[i] = dataInputStream.readInt(); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public static byte[] writeInts(int[] array) { + try { + ByteArrayOutputStream bos = new ByteArrayOutputStream(array.length * 4); + DataOutputStream dos = new DataOutputStream(bos); + for (int i = 0; i < array.length; i++) { + dos.writeInt(array[i]); + } + + return bos.toByteArray(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public static int[] readInts(byte[] array) { + try { + ByteArrayInputStream bis = new ByteArrayInputStream(array); + DataInputStream dataInputStream = new DataInputStream(bis); + int size = array.length / Integer.BYTES; + int[] res = new int[size]; + for (int i = 0; i < size; i++) { + res[i] = dataInputStream.readInt(); + } + return res; + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/main/java/com/github/technus/tectech/util/Util.java b/src/main/java/com/github/technus/tectech/util/Util.java new file mode 100644 index 0000000000..cd055528b1 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/util/Util.java @@ -0,0 +1,1104 @@ +package com.github.technus.tectech.util; + +import com.github.technus.tectech.TecTech; +import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; +import com.github.technus.tectech.thing.casing.TT_Container_Casings; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.ObfuscationReflectionHelper; +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.GregTech_API; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_TieredMachineBlock; +import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.util.GT_Utility; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.ICrafting; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompressedStreamTools; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.server.MinecraftServer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.ChunkCoordIntPair; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.storage.IPlayerFileData; +import net.minecraft.world.storage.SaveHandler; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; +import org.apache.commons.lang3.StringUtils; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.lang.reflect.Field; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; +import static gregtech.api.enums.GT_Values.E; +import static java.nio.charset.Charset.forName; + +/** + * Created by Tec on 21.03.2017. + */ +public final class Util { + private Util() { + } + + @SuppressWarnings("ComparatorMethodParameterNotUsed") + public static > SortedSet> entriesSortedByValues(Map map) { + SortedSet> sortedEntries = new TreeSet<>( + (e1, e2) -> { + int res = e1.getValue().compareTo(e2.getValue()); + return res != 0 ? res : 1; // Special fix to preserve items with equal values + } + ); + sortedEntries.addAll(map.entrySet()); + return sortedEntries; + } + + public static int bitStringToInt(String bits){ + if(bits==null){ + return 0; + } + if(bits.length() > 32){ + throw new NumberFormatException("Too long!"); + } + return Integer.parseInt(bits,2); + } + + public static int hexStringToInt(String hex){ + if(hex==null){ + return 0; + } + if(hex.length()>8){ + throw new NumberFormatException("Too long!"); + } + return Integer.parseInt(hex,16); + } + + public static double stringToDouble(String str){ + if(str==null){ + return 0; + } + return Double.parseDouble(str); + } + + public static double getValue(String in1) { + String str = in1.toLowerCase(); + double val; + try { + if (str.contains("b")) { + String[] split = str.split("b"); + val = Util.bitStringToInt(split[0].replaceAll("[^-]", "") + split[1].replaceAll("_", "")); + } else if (str.contains("x")) { + String[] split = str.split("x"); + val = Util.hexStringToInt(split[0].replaceAll("[^-]", "") + split[1].replaceAll("_", "")); + } else { + val = Util.stringToDouble(str); + } + return val; + } catch (Exception e) { + return 0; + } + } + + + public static String intBitsToString(int number) { + StringBuilder result = new StringBuilder(16); + + for (int i = 31; i >= 0; i--) { + int mask = 1 << i; + result.append((number & mask) != 0 ? "1" : "0"); + + if (i % 8 == 0) { + result.append(' '); + } + } + result.replace(result.length() - 1, result.length(), ""); + + return result.toString(); + } + + public static String intBitsToShortString(int number) { + StringBuilder result = new StringBuilder(35); + + for (int i = 31; i >= 0; i--) { + int mask = 1 << i; + result.append((number & mask) != 0 ? ":" : "."); + + if (i % 8 == 0) { + result.append('|'); + } + } + result.replace(result.length() - 1, result.length(), ""); + + return result.toString(); + } + + public static String longBitsToShortString(long number) { + StringBuilder result = new StringBuilder(71); + + for (int i = 63; i >= 0; i--) { + long mask = 1L << i; + result.append((number & mask) != 0 ? ":" : "."); + + if (i % 8 == 0) { + result.append('|'); + } + } + result.replace(result.length() - 1, result.length(), ""); + + return result.toString(); + } + + public static float map(float x, float in_min, float in_max, float out_min, float out_max) { + return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; + } + + //Check Machine Structure based on string[][] (effectively char[][][]), ond offset of the controller + //This only checks for REGULAR BLOCKS! + public static boolean StructureCheckerExtreme( + String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR-1 blocks + Block[] blockType,//use numbers 0-9 for casing types + byte[] blockMeta,//use numbers 0-9 for casing types + IHatchAdder[] addingMethods, + short[] casingTextures, + Block[] blockTypeFallback,//use numbers 0-9 for casing types + byte[] blockMetaFallback,//use numbers 0-9 for casing types + int horizontalOffset, int verticalOffset, int depthOffset, + IGregTechTileEntity aBaseMetaTileEntity, + ExtendedFacing extendedFacing, + boolean forceCheck) { + World world = aBaseMetaTileEntity.getWorld(); + if (world.isRemote) { + return false; + } + //TE Rotation + if(extendedFacing==null){ + extendedFacing=ExtendedFacing.of(ForgeDirection.getOrientation(aBaseMetaTileEntity.getFrontFacing())); + } + + IGregTechTileEntity igt; + IMetaTileEntity imt = aBaseMetaTileEntity.getMetaTileEntity(); + + int xyz[]=new int[3]; + int abc[]=new int[3]; + int pointer; + int baseX = aBaseMetaTileEntity.getXCoord(), + baseZ = aBaseMetaTileEntity.getZCoord(), + baseY = aBaseMetaTileEntity.getYCoord(); + //a,b,c - relative to block face! + //x,y,z - relative to block position on map! + //yPos - absolute height of checked block + + //perform your duties + abc[2] = -depthOffset; + for (String[] _structure : structure) {//front to back + abc[1] = verticalOffset; + for (String __structure : _structure) {//top to bottom + abc[0] = -horizontalOffset; + for (char block : __structure.toCharArray()) {//left to right + if (block < ' ') {//Control chars allow skipping + abc[1] -= block; + break; + } else if (block > '@') {//characters allow to skip check A-1 skip, B-2 skips etc. + abc[0] += block - '@'; + }//else if (block < '+')//used to mark THINGS + // a++; + else if (block == '.') { + abc[0]++; + } else { + //get x y z from rotation + extendedFacing.getWorldOffset(abc,xyz); + xyz[0]+=baseX; + xyz[1]+=baseY; + xyz[2]+=baseZ; + + //that must be here since in some cases other axis (b,c) controls y + if (xyz[1] < 0 || xyz[1] >= 256) { + return false; + } + + //Check block + if (world.blockExists(xyz[0], xyz[1], xyz[2])) {//this actually checks if the chunk is loaded at this pos + switch (block) { + case '-'://must be air + if (world.getBlock(xyz[0], xyz[1], xyz[2]).getMaterial() != Material.air) { + return false; + } + break; + case '+'://must not be air + if (world.getBlock(xyz[0], xyz[1], xyz[2]).getMaterial() == Material.air) { + return false; + } + break; + default://check for block (countable) + if ((pointer = block - '0') >= 0) { + //countable air -> net.minecraft.block.BlockAir + if (world.getBlock(xyz[0], xyz[1], xyz[2]) != blockType[pointer]) { + if (DEBUG_MODE) { + TecTech.LOGGER.info("Struct-block-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + world.getBlock(xyz[0], xyz[1], xyz[2]).getUnlocalizedName() + ' ' + blockType[pointer].getUnlocalizedName()); + } + return false; + } + if (world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) != blockMeta[pointer]) { + if (DEBUG_MODE) { + TecTech.LOGGER.info("Struct-meta-id-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) + ' ' + blockMeta[pointer]); + } + return false; + } + } else //noinspection ConstantConditions + if ((pointer = block - ' ') >= 0) { + igt = aBaseMetaTileEntity.getIGregTechTileEntity(xyz[0], xyz[1], xyz[2]); + if (igt == null || !addingMethods[pointer].apply(igt, casingTextures[pointer])) { + if (world.getBlock(xyz[0], xyz[1], xyz[2]) != blockTypeFallback[pointer]) { + if (DEBUG_MODE) { + TecTech.LOGGER.info("Fallback-struct-block-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + world.getBlock(xyz[0], xyz[1], xyz[2]).getUnlocalizedName() + ' ' + (blockTypeFallback[pointer] == null ? "null" : blockTypeFallback[pointer].getUnlocalizedName())); + } + return false; + } + if (world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) != blockMetaFallback[pointer]) { + if (DEBUG_MODE) { + TecTech.LOGGER.info("Fallback-Struct-meta-id-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) + ' ' + blockMetaFallback[pointer]); + } + return false; + } + } + } + } + } else if (forceCheck) { + return false; + } + abc[0]++;//block in horizontal layer + } + } + abc[1]--;//horizontal layer + } + abc[2]++;//depth + } + return true; + } + + public static boolean StructureBuilder(String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR+1 blocks + Block[] blockType,//use numbers 0-9 for casing types + byte[] blockMeta,//use numbers 0-9 for casing types + int horizontalOffset, int verticalOffset, int depthOffset, + IGregTechTileEntity aBaseMetaTileEntity, boolean hintsOnly) { + byte facing = aBaseMetaTileEntity.getFrontFacing(); + return StructureBuilderExtreme(structure, blockType, blockMeta, + horizontalOffset, verticalOffset, depthOffset, + aBaseMetaTileEntity.getWorld().getTileEntity(aBaseMetaTileEntity.getXCoord(), aBaseMetaTileEntity.getYCoord(), aBaseMetaTileEntity.getZCoord()), null, + facing, hintsOnly); + } + + public static boolean StructureBuilderExtreme(String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR+1 blocks + Block[] blockType,//use numbers 0-9 for casing types + byte[] blockMeta,//use numbers 0-9 for casing types + int horizontalOffset, int verticalOffset, int depthOffset, + IGregTechTileEntity aBaseMetaTileEntity, ExtendedFacing extendedFacing, boolean hintsOnly) { + byte facing = aBaseMetaTileEntity.getFrontFacing(); + return StructureBuilderExtreme(structure, blockType, blockMeta, + horizontalOffset, verticalOffset, depthOffset, + aBaseMetaTileEntity.getWorld().getTileEntity(aBaseMetaTileEntity.getXCoord(), aBaseMetaTileEntity.getYCoord(), aBaseMetaTileEntity.getZCoord()), extendedFacing, + facing, hintsOnly); + } + + public static boolean StructureBuilder(String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR+1 blocks + Block[] blockType,//use numbers 0-9 for casing types + byte[] blockMeta,//use numbers 0-9 for casing types + int horizontalOffset, int verticalOffset, int depthOffset, + TileEntity tileEntity, int facing, boolean hintsOnly) { + return StructureBuilderExtreme(structure, blockType, blockMeta, horizontalOffset, verticalOffset, depthOffset, tileEntity, null, facing, hintsOnly); + } + + public static boolean StructureBuilderExtreme(String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR+1 blocks + Block[] blockType,//use numbers 0-9 for casing types + byte[] blockMeta,//use numbers 0-9 for casing types + int horizontalOffset, int verticalOffset, int depthOffset, + TileEntity tileEntity, ExtendedFacing extendedFacing, int simpleFacing, boolean hintsOnly) { + if (!tileEntity.hasWorldObj()) { + return false; + } + World world = tileEntity.getWorldObj(); + if (!world.isRemote && hintsOnly) { + return false; + } + + //TE Rotation + + + int xyz[]=new int[3]; + int abc[]=new int[3]; + int pointer; + int + baseX = tileEntity.xCoord, + baseZ = tileEntity.zCoord, + baseY = tileEntity.yCoord; + //a,b,c - relative to block face! + //x,y,z - relative to block position on map! + if (extendedFacing == null) { + extendedFacing=ExtendedFacing.of(ForgeDirection.getOrientation(simpleFacing)); + } + + //perform your duties + abc[2] = -depthOffset; + for (String[] _structure : structure) {//front to back + abc[1] = verticalOffset; + for (String __structure : _structure) {//top to bottom + abc[0] = -horizontalOffset; + for (char block : __structure.toCharArray()) {//left to right + if (block < ' ') {//Control chars allow skipping + abc[1] -= block; + break; + } + if (block > '@')//characters allow to skip check a-1 skip, b-2 skips etc. + { + abc[0] += block - '@'; + }//else if (block < '+')//used to mark THINGS + // a++; + else if (block == '.')// this TE + { + abc[0]++; + } else { + //get x y z from rotation + extendedFacing.getWorldOffset(abc,xyz); + xyz[0]+=baseX; + xyz[1]+=baseY; + xyz[2]+=baseZ; + + //that must be here since in some cases other axis (b,c) controls y + if (xyz[1] < 0 || xyz[1] >= 256) { + return false; + } + + //Check block + if (world.blockExists(xyz[0], xyz[1], xyz[2])) {//this actually checks if the chunk is loaded + if (hintsOnly) { + switch (block) { + case '-'://must be air + TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, 13); + break; + case '+'://must not be air + TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, 14); + break; + default: //check for block + if ((pointer = block - '0') >= 0) { + if (world.getBlock(xyz[0], xyz[1], xyz[2]) != blockType[pointer] || world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) != blockMeta[pointer]) { + TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], blockType[pointer], blockMeta[pointer]); + } + } else if ((pointer = block - ' ') >= 0) { + if (pointer >= 0 && pointer < 12) { + TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, pointer); + } else { + TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, 12); + } + } else { + TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, 15); + } + } + } else { + switch (block) { + case '-'://must be air + world.setBlock(xyz[0], xyz[1], xyz[2], Blocks.air, 0, 2); + break; + case '+'://must not be air + world.setBlock(xyz[0], xyz[1], xyz[2], TT_Container_Casings.sBlockCasingsTT, 14, 2); + break; + default: //check for block + if ((pointer = block - '0') >= 0) { + world.setBlock(xyz[0], xyz[1], xyz[2], blockType[pointer], blockMeta[pointer], 2); + } else if (block - ' ' < 0) { + world.setBlock(xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, 15, 2); + } //else { + //switch(pointer){ + // case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: + // world.setBlock(x, y, z, TT_Container_Casings.sHintCasingsTT, pointer, 2); break; + // default:world.setBlock(x, y, z, TT_Container_Casings.sHintCasingsTT, 12, 2); + //} + //} + } + } + } + abc[0]++;//block in horizontal layer + } + } + abc[1]--;//horizontal layer + } + abc[2]++;//depth + } + return true; + } + + + public static String[] StructureWriter(IGregTechTileEntity aBaseMetaTileEntity, + int horizontalOffset, int verticalOffset, int depthOffset, + int horizontalSize, int verticalSize, int depthSize, boolean ignoreAir) { + //TE Rotation + byte facing = aBaseMetaTileEntity.getFrontFacing(); + World world = aBaseMetaTileEntity.getWorld(); + if (world.isRemote) { + return new String[]{"Not at Client m8"}; + } + + ItemStack[] array = new ItemStack[10]; + + int x, y, z, a, b, c; + int + baseX = aBaseMetaTileEntity.getXCoord(), + baseZ = aBaseMetaTileEntity.getZCoord(), + baseY = aBaseMetaTileEntity.getYCoord(); + //a,b,c - relative to block face! + //x,y,z - relative to block position on map! + //yPos - absolute height of checked block + + //perform your duties - #1 - count block types + c = -depthOffset; + for (int cz = 0; cz < depthSize; cz++) {//front to back + b = verticalOffset; + for (int by = 0; by < verticalSize; by++) {//top to bottom + a = -horizontalOffset; + for (int az = 0; az < horizontalSize; az++) {//left to right + //get x y z from rotation + switch (facing) {//translation + case 4: + x = baseX + c; + z = baseZ + a; + y = baseY + b; + break; + case 3: + x = baseX + a; + z = baseZ - c; + y = baseY + b; + break; + case 5: + x = baseX - c; + z = baseZ - a; + y = baseY + b; + break; + case 2: + x = baseX - a; + z = baseZ + c; + y = baseY + b; + break; + //Things get odd if the block faces up or down... + case 1: + x = baseX + a; + z = baseZ + b; + y = baseY - c; + break;//similar to 3 + case 0: + x = baseX - a; + z = baseZ - b; + y = baseY + c; + break;//similar to 2 + default: + return new String[]{"Invalid rotation"}; + } + + //that must be here since in some cases other axis (b,c) controls y + if (y < 0 || y >= 256) { + return new String[]{"Invalid position"}; + } + + //Check block + Block block = world.getBlock(x, y, z); + int meta = world.getBlockMetadata(x, y, z); + + if (!block.hasTileEntity(meta) && block.getMaterial() != Material.air) { + boolean err = true; + ItemStack is = new ItemStack(block, 1, meta); + for (int i = 0; i < array.length; i++) { + if (array[i] == null) { + array[i] = is; + err = false; + break; + } else if (is.getItem() == array[i].getItem() && is.getItemDamage() == array[i].getItemDamage()) { + err = false; + break; + } + } + if (err) { + return new String[]{"Too much different blocks"}; + } + } + + a++;//block in horizontal layer + } + b--;//horizontal layer + } + c++;//depth + } + + List output = new ArrayList<>(); + + output.add("Offsets: " + horizontalOffset + ' ' + verticalOffset + ' ' + depthOffset); + output.add("Sizes: " + horizontalSize + ' ' + verticalSize + ' ' + depthSize); + output.add(""); + + output.add("ID[]: Name[]"); + output.add(""); + for (int i = 0; i < array.length; i++) { + if (array[i] != null) { + output.add(i + ": " + array[i].getDisplayName()); + } + } + output.add(""); + output.add("ID[]: Block[] BlockMetaID[]"); + output.add(""); + for (int i = 0; i < array.length; i++) { + if (array[i] != null) { + output.add(i + ": " + array[i].getItem().getUnlocalizedName() + ' ' + array[i].getItemDamage()); + } + } + output.add(""); + output.add("String[][]"); + //perform your duties - #2 - write strings + output.add("{"); + c = -depthOffset; + for (int cz = 0; cz < depthSize; cz++) {//front to back + b = verticalOffset; + StringBuilder addMe = new StringBuilder().append('{'); + for (int by = 0; by < verticalSize; by++) {//top to bottom + a = -horizontalOffset; + StringBuilder line = new StringBuilder(); + for (int az = 0; az < horizontalSize; az++) {//left to right + //get x y z from rotation + switch (facing) {//translation + case 4: + x = baseX + c; + z = baseZ + a; + y = baseY + b; + break; + case 3: + x = baseX + a; + z = baseZ - c; + y = baseY + b; + break; + case 5: + x = baseX - c; + z = baseZ - a; + y = baseY + b; + break; + case 2: + x = baseX - a; + z = baseZ + c; + y = baseY + b; + break; + //Things get odd if the block faces up or down... + case 1: + x = baseX + a; + z = baseZ + b; + y = baseY - c; + break;//similar to 3 + case 0: + x = baseX - a; + z = baseZ - b; + y = baseY + c; + break;//similar to 2 + default: + return new String[]{"Invalid rotation"}; + } + + //Check block + Block block = world.getBlock(x, y, z); + int meta = world.getBlockMetadata(x, y, z); + + if (a == 0 && b == 0 && c == 0) { + line.append('.'); + } else if (block.getMaterial() == Material.air) { + line.append('-'); + } else if (block.hasTileEntity(meta)) { + line.append('*'); + } else { + ItemStack stack = new ItemStack(block, 1, meta); + String str = "?";//OH YEAH NPEs + for (int i = 0; i < array.length; i++) { + if (array[i] != null && stack.getItem() == array[i].getItem() && stack.getItemDamage() == array[i].getItemDamage()) { + str = Integer.toString(i); + break; + } + } + line.append(str); + } + a++;//block in horizontal layer + } + if (ignoreAir) { + StringBuilder builder = new StringBuilder(); + char temp = '@'; + for (char ch : line.toString().toCharArray()) { + if (ch == '-') { + temp += 1; + if (temp == '~') { + builder.append('~'); + temp = '@'; + } + } else { + if (temp > '@') { + builder.append(temp); + temp = '@'; + } + builder.append(ch); + } + } + while (builder.length() > 0 && builder.charAt(builder.length() - 1) == '~') { + builder.deleteCharAt(builder.length() - 1); + } + if (builder.length() == 0) { + builder.append("E,"); + } else { + builder.insert(0, '"'); + builder.append('"').append(','); + } + addMe.append(builder); + } else { + if (line.length() == 0) { + line.append("E,"); + } else { + line.insert(0, '"'); + line.append('"').append(','); + } + addMe.append(line); + } + b--;//horizontal layer + } + //region less verbose + addMe.append('}').append(','); + String builtStr = addMe.toString().replaceAll("(E,)+(?=})", E/*Remove Empty strings at end*/); + Matcher matcher = matchE_.matcher(builtStr); + while (matcher.find()) { + byte lenEE = (byte) (matcher.group(1).length() >> 1); + builtStr = builtStr.replaceFirst("E,(E,)+", "\"\\\\u00" + String.format("%02X", lenEE - 1) + "\","); + //builtStr=builtStr.replaceFirst("E,(E,)+\"","\"\\\\u00"+String.format("%02X", lenEE)); + } + //endregion + output.add(builtStr); + c++;//depth + } + output.add("}"); + return output.toArray(new String[0]); + } + + private static final Pattern matchE_ = Pattern.compile("(E,(E,)+)"); + + public static boolean isInputEqual(boolean aDecreaseStacksizeBySuccess, boolean aDontCheckStackSizes, FluidStack[] requiredFluidInputs, ItemStack[] requiredInputs, FluidStack[] givenFluidInputs, ItemStack... givenInputs) { + if (!GregTech_API.sPostloadFinished) { + return false; + } + if (requiredFluidInputs.length > 0 && givenFluidInputs == null) { + return false; + } + int amt; + for (FluidStack tFluid : requiredFluidInputs) { + if (tFluid != null) { + boolean temp = true; + amt = tFluid.amount; + for (FluidStack aFluid : givenFluidInputs) { + if (aFluid != null && aFluid.isFluidEqual(tFluid)) { + if (aDontCheckStackSizes) { + temp = false; + break; + } + amt -= aFluid.amount; + if (amt < 1) { + temp = false; + break; + } + } + } + if (temp) { + return false; + } + } + } + + if (requiredInputs.length > 0 && givenInputs == null) { + return false; + } + for (ItemStack tStack : requiredInputs) { + if (tStack != null) { + amt = tStack.stackSize; + boolean temp = true; + for (ItemStack aStack : givenInputs) { + if (GT_Utility.areUnificationsEqual(aStack, tStack, true) || GT_Utility.areUnificationsEqual(GT_OreDictUnificator.get(false, aStack), tStack, true)) { + if (aDontCheckStackSizes) { + temp = false; + break; + } + amt -= aStack.stackSize; + if (amt < 1) { + temp = false; + break; + } + } + } + if (temp) { + return false; + } + } + } + + if (aDecreaseStacksizeBySuccess) { + if (givenFluidInputs != null) { + for (FluidStack tFluid : requiredFluidInputs) { + if (tFluid != null) { + amt = tFluid.amount; + for (FluidStack aFluid : givenFluidInputs) { + if (aFluid != null && aFluid.isFluidEqual(tFluid)) { + if (aDontCheckStackSizes) { + aFluid.amount -= amt; + break; + } + if (aFluid.amount < amt) { + amt -= aFluid.amount; + aFluid.amount = 0; + } else { + aFluid.amount -= amt; + break; + } + } + } + } + } + } + + if (givenInputs != null) { + for (ItemStack tStack : requiredInputs) { + if (tStack != null) { + amt = tStack.stackSize; + for (ItemStack aStack : givenInputs) { + if (GT_Utility.areUnificationsEqual(aStack, tStack, true) || GT_Utility.areUnificationsEqual(GT_OreDictUnificator.get(false, aStack), tStack, true)) { + if (aDontCheckStackSizes) { + aStack.stackSize -= amt; + break; + } + if (aStack.stackSize < amt) { + amt -= aStack.stackSize; + aStack.stackSize = 0; + } else { + aStack.stackSize -= amt; + break; + } + } + } + } + } + } + } + + return true; + } + + public static String getUniqueIdentifier(ItemStack is) { + return GameRegistry.findUniqueIdentifierFor(is.getItem()).modId + ':' + is.getUnlocalizedName(); + } + + public static byte getTier(long l) { + byte b = -1; + + do { + ++b; + if (b >= CommonValues.V.length) { + return b; + } + } while (l > CommonValues.V[b]); + + return b; + } + + public static String[] splitButDifferent(String string, String delimiter) { + String[] strings = new String[StringUtils.countMatches(string, delimiter) + 1]; + int lastEnd = 0; + for (int i = 0; i < strings.length - 1; i++) { + int nextEnd = string.indexOf(delimiter, lastEnd); + strings[i] = string.substring(lastEnd, nextEnd); + lastEnd = nextEnd + delimiter.length(); + } + strings[strings.length - 1] = string.substring(lastEnd); + return strings; + } + + public static String[] infoFromNBT(NBTTagCompound nbt) { + String[] strings = new String[nbt.getInteger("i")]; + for (int i = 0; i < strings.length; i++) { + strings[i] = nbt.getString(Integer.toString(i)); + } + return strings; + } + + public static boolean areBitsSet(int setBits, int testedValue) { + return (testedValue & setBits) == setBits; + } + + public static class ItemStack_NoNBT implements Comparable { + public final Item mItem; + public final int mStackSize; + public final int mMetaData; + + public ItemStack_NoNBT(Item aItem, long aStackSize, long aMetaData) { + this.mItem = aItem; + this.mStackSize = (byte) ((int) aStackSize); + this.mMetaData = (short) ((int) aMetaData); + } + + public ItemStack_NoNBT(ItemStack aStack) { + if (aStack == null) { + mItem = null; + mStackSize = mMetaData = 0; + } else { + mItem = aStack.getItem(); + mStackSize = aStack.stackSize; + mMetaData = Items.feather.getDamage(aStack); + } + } + + @Override + public int compareTo(ItemStack_NoNBT o) { + if (mMetaData > o.mMetaData) return 1; + if (mMetaData < o.mMetaData) return -1; + if (mStackSize > o.mStackSize) return 1; + if (mStackSize < o.mStackSize) return -1; + if (mItem != null && o.mItem != null) + return mItem.getUnlocalizedName().compareTo(o.mItem.getUnlocalizedName()); + if (mItem == null && o.mItem == null) return 0; + if (mItem != null) return 1; + return -1; + } + + @Override + public boolean equals(Object aStack) { + return aStack == this || + (aStack instanceof ItemStack_NoNBT && + ((mItem == ((ItemStack_NoNBT) aStack).mItem) || ((ItemStack_NoNBT) aStack).mItem.getUnlocalizedName().equals(this.mItem.getUnlocalizedName())) && + ((ItemStack_NoNBT) aStack).mStackSize == this.mStackSize && + ((ItemStack_NoNBT) aStack).mMetaData == this.mMetaData); + } + + @Override + public int hashCode() { + return (mItem != null ? mItem.getUnlocalizedName().hashCode() : 0) ^ (mMetaData << 16) ^ (mStackSize << 24); + } + + @Override + public String toString() { + return Integer.toString(hashCode()) + ' ' + (mItem == null ? "null" : mItem.getUnlocalizedName()) + ' ' + mMetaData + ' ' + mStackSize; + } + } + + public static void setTier(int tier,Object me){ + try{ + Field field=GT_MetaTileEntity_TieredMachineBlock.class.getField("mTier"); + field.setAccessible(true); + field.set(me,(byte)tier); + }catch (Exception e){ + //e.printStackTrace(); + } + } + + public static StringBuilder receiveString(StringBuilder previousValue, int startIndex, int index, int value){ + int sizeReq=index-startIndex; + if(value==0){ + previousValue.setLength(Math.min(previousValue.length(),sizeReq)); + }else { + previousValue.setLength(Math.max(previousValue.length(),sizeReq)); + previousValue.setCharAt(sizeReq,(char)value); + } + return previousValue; + } + + @Deprecated + public static double receiveDouble(double previousValue, int startIndex, int index, int value){ + return Double.longBitsToDouble(receiveLong(Double.doubleToLongBits(previousValue),startIndex,index,value)); + } + + public static long receiveLong(long previousValue, int startIndex, int index, int value){ + value &=0xFFFF; + switch (index-startIndex){ + case 0: + previousValue&= 0xFFFF_FFFF_FFFF_0000L; + previousValue|=value; + break; + case 1: + previousValue&=0xFFFF_FFFF_0000_FFFFL; + previousValue|=value<<16; + break; + case 2: + previousValue&=0xFFFF_0000_FFFF_FFFFL; + previousValue|=(long)value<<32; + break; + case 3: + previousValue&=0x0000_FFFF_FFFF_FFFFL; + previousValue|=(long)value<<48; + break; + } + return previousValue; + } + + public static void sendString(StringBuilder string,Container container, ICrafting crafter,int startIndex){ + for (int i = 0; i < string.length(); i++) { + crafter.sendProgressBarUpdate(container,startIndex++,string.charAt(i)); + } + crafter.sendProgressBarUpdate(container,startIndex,0); + } + + public static void sendDouble(double value,Container container, ICrafting crafter,int startIndex){ + sendLong(Double.doubleToLongBits(value),container,crafter,startIndex); + } + + public static void sendLong(long value,Container container, ICrafting crafter,int startIndex){ + crafter.sendProgressBarUpdate(container, startIndex++, (int)(value & 0xFFFFL)); + crafter.sendProgressBarUpdate(container, startIndex++, (int)((value & 0xFFFF0000L)>>>16)); + crafter.sendProgressBarUpdate(container, startIndex++, (int)((value & 0xFFFF00000000L)>>>32)); + crafter.sendProgressBarUpdate(container, startIndex, (int)((value & 0xFFFF000000000000L)>>>48)); + } + + @Deprecated + public static float receiveFloat(float previousValue, int startIndex, int index, int value){ + return Float.intBitsToFloat(receiveInteger(Float.floatToIntBits(previousValue),startIndex,index,value)); + } + + public static int receiveInteger(int previousValue, int startIndex, int index, int value){ + value &=0xFFFF; + switch (index-startIndex){ + case 0: + previousValue&= 0xFFFF_0000; + previousValue|=value; + break; + case 1: + previousValue&=0x0000_FFFF; + previousValue|=value<<16; + break; + } + return previousValue; + } + + public static void sendFloat(float value,Container container, ICrafting crafter,int startIndex){ + sendInteger(Float.floatToIntBits(value),container,crafter,startIndex); + } + + public static void sendInteger(int value,Container container, ICrafting crafter,int startIndex){ + crafter.sendProgressBarUpdate(container, startIndex++, (int)(value & 0xFFFFL)); + crafter.sendProgressBarUpdate(container, startIndex, (value & 0xFFFF0000)>>>16); + } + + public static String doubleToString(double value){ + if(value==(long)value){ + return Long.toString((long)value); + } + return Double.toString(value); + } + + public static boolean checkChunkExist(World world, ChunkCoordIntPair chunk){ + int x=chunk.getCenterXPos(); + int z=chunk.getCenterZPosition(); + return world.checkChunksExist(x, 0, z, x, 0, z); + } + + public static NBTTagCompound getPlayerData(UUID uuid1,UUID uuid2,String extension) { + try { + if (FMLCommonHandler.instance().getEffectiveSide().isServer()) { + if (uuid1 != null && uuid2!=null) { + IPlayerFileData playerNBTManagerObj = MinecraftServer.getServer().worldServerForDimension(0).getSaveHandler().getSaveHandler(); + SaveHandler sh = (SaveHandler)playerNBTManagerObj; + File dir = ObfuscationReflectionHelper.getPrivateValue(SaveHandler.class, sh, new String[]{"playersDirectory", "field_75771_c"}); + String id1=uuid1.toString(); + NBTTagCompound tagCompound=read(new File(dir, id1 + "."+extension)); + if(tagCompound!=null){ + return tagCompound; + } + tagCompound=readBackup(new File(dir, id1 + "."+extension+"_bak")); + if(tagCompound!=null){ + return tagCompound; + } + String id2=uuid2.toString(); + tagCompound=read(new File(dir, id2 + "."+extension)); + if(tagCompound!=null){ + return tagCompound; + } + tagCompound=readBackup(new File(dir, id2 + "."+extension+"_bak")); + if(tagCompound!=null){ + return tagCompound; + } + } + } + } catch (Exception ignored) {} + return new NBTTagCompound(); + } + + public static void savePlayerFile(EntityPlayer player,String extension, NBTTagCompound data) { + try { + if (FMLCommonHandler.instance().getEffectiveSide().isServer()) { + if (player != null) { + IPlayerFileData playerNBTManagerObj = MinecraftServer.getServer().worldServerForDimension(0).getSaveHandler().getSaveHandler(); + SaveHandler sh = (SaveHandler)playerNBTManagerObj; + File dir = ObfuscationReflectionHelper.getPrivateValue(SaveHandler.class, sh, new String[]{"playersDirectory", "field_75771_c"}); + String id1=player.getUniqueID().toString(); + write(new File(dir, id1 + "."+extension),data); + write(new File(dir, id1 + "."+extension+"_bak"),data); + String id2=UUID.nameUUIDFromBytes(player.getCommandSenderName().getBytes(forName("UTF-8"))).toString(); + write(new File(dir, id2 + "."+extension),data); + write(new File(dir, id2 + "."+extension+"_bak"),data); + } + } + } catch (Exception ignored) {} + } + + private static NBTTagCompound read(File file){ + if (file != null && file.exists()) { + try(FileInputStream fileInputStream= new FileInputStream(file)) { + return CompressedStreamTools.readCompressed(fileInputStream); + } catch (Exception var9) { + TecTech.LOGGER.error("Cannot read NBT File: "+file.getAbsolutePath()); + } + } + return null; + } + + private static NBTTagCompound readBackup(File file){ + if (file != null && file.exists()) { + try(FileInputStream fileInputStream= new FileInputStream(file)) { + return CompressedStreamTools.readCompressed(fileInputStream); + } catch (Exception var9) { + TecTech.LOGGER.error("Cannot read NBT File: "+file.getAbsolutePath()); + return new NBTTagCompound(); + } + } + return null; + } + + private static void write(File file,NBTTagCompound tagCompound){ + if (file != null) { + if(tagCompound==null){ + if(file.exists()) file.delete(); + }else { + try(FileOutputStream fileOutputStream= new FileOutputStream(file)) { + CompressedStreamTools.writeCompressed(tagCompound,fileOutputStream); + } catch (Exception var9) { + TecTech.LOGGER.error("Cannot write NBT File: "+file.getAbsolutePath()); + } + } + } + } + + public static AxisAlignedBB fromChunkCoordIntPair(ChunkCoordIntPair chunkCoordIntPair){ + int x=chunkCoordIntPair.chunkXPos<<4; + int z=chunkCoordIntPair.chunkZPos<<4; + return AxisAlignedBB.getBoundingBox(x,-128,z,x+16,512,z+16); + } + + public static AxisAlignedBB fromChunk(Chunk chunk){ + int x=chunk.xPosition<<4; + int z=chunk.zPosition<<4; + return AxisAlignedBB.getBoundingBox(x,-128,z,x+16,512,z+16); + } +} diff --git a/src/main/java/com/github/technus/tectech/util/Vec3Impl.java b/src/main/java/com/github/technus/tectech/util/Vec3Impl.java new file mode 100644 index 0000000000..84e6497560 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/util/Vec3Impl.java @@ -0,0 +1,146 @@ +package com.github.technus.tectech.util; + +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import net.minecraft.dispenser.IPosition; +import net.minecraftforge.common.util.ForgeDirection; + +public class Vec3Impl implements Comparable { + public static final Vec3Impl NULL_VECTOR = new Vec3Impl(0, 0, 0); + private final int val0; + private final int val1; + private final int val2; + + public Vec3Impl(int in0, int in1, int in2) { + this.val0 = in0; + this.val1 = in1; + this.val2 = in2; + } + + public Vec3Impl(IGregTechTileEntity baseMetaTileEntity) { + this(baseMetaTileEntity.getXCoord(),baseMetaTileEntity.getYCoord(),baseMetaTileEntity.getZCoord()); + } + + public boolean equals(Object o) { + if (this == o) { + return true; + } else if (o instanceof Vec3Impl) { + Vec3Impl vec3i = (Vec3Impl)o; + return val0 == vec3i.val0 && val1 == vec3i.val1 && val2 == vec3i.val2; + } + return false; + } + + public int hashCode() { + return (val1 + val2 * 31) * 31 + val0; + } + + public int compareTo(Vec3Impl o) { + return val1 == o.val1 ? val2 == o.val2 ? val0 - o.val0 : val2 - o.val2 : val1 - o.val1; + } + + /** + * Gets the coordinate. + */ + public int get(int index) { + switch (index){ + case 0: return val0; + case 1: return val1; + case 2: return val2; + default: return 0; + } + } + + /** + * Gets the X coordinate. + */ + public int get0() { + return this.val0; + } + + /** + * Gets the Y coordinate. + */ + public int get1() { + return this.val1; + } + + /** + * Gets the Z coordinate. + */ + public int get2() { + return this.val2; + } + + public Vec3Impl offset(ForgeDirection facing, int n) { + return n == 0 ? this : new Vec3Impl(val0 + facing.offsetX * n, val1 + facing.offsetY * n, val2 + facing.offsetZ * n); + } + + public Vec3Impl add(IGregTechTileEntity tileEntity) { + return new Vec3Impl(val0 + tileEntity.getXCoord(), val1 + tileEntity.getYCoord(), val2 + tileEntity.getZCoord()); + } + + public Vec3Impl sub(IGregTechTileEntity tileEntity) { + return new Vec3Impl(val0 - tileEntity.getXCoord(), val1 - tileEntity.getYCoord(), val2 - tileEntity.getZCoord()); + } + + public Vec3Impl add(Vec3Impl pos) { + return new Vec3Impl(val0 + pos.val0, val1 + pos.val1, val2 + pos.val2); + } + + public Vec3Impl sub(Vec3Impl pos) { + return new Vec3Impl(val0 - pos.val0, val1 - pos.val1, val2 - pos.val2); + } + + public Vec3Impl add(int pos0,int pos1,int pos2) { + return new Vec3Impl(val0 + pos0, val1 + pos1, val2 + pos2); + } + + public Vec3Impl sub(int pos0,int pos1,int pos2) { + return new Vec3Impl(val0 - pos0, val1 - pos1, val2 - pos2); + } + + public Vec3Impl crossProduct(Vec3Impl vec) { + return new Vec3Impl(val1 * vec.val2 - val2 * vec.val1, val2 * vec.val0 - val0 * vec.val2, + val0 * vec.val1 - val1 * vec.val0); + } + + public boolean withinDistance(Vec3Impl to, double distance) { + return this.distanceSq(to.val0, to.val1, to.val2, false) < distance * distance; + } + + public boolean withinDistance(IPosition to, double distance) { + return this.distanceSq(to.getX(), to.getY(), to.getZ(), true) < distance * distance; + } + + public double distanceSq(Vec3Impl to) { + return this.distanceSq(to.val0, to.val1, to.val2, true); + } + + public double distanceSq(IPosition to, boolean useCenter) { + return this.distanceSq(to.getX(), to.getY(), to.getZ(), useCenter); + } + + public double distanceSq(double x, double y, double z, boolean useCenter) { + double d0 = useCenter ? 0.5D : 0.0D; + double d1 = (double)val0 + d0 - x; + double d2 = (double)val1 + d0 - y; + double d3 = (double)val2 + d0 - z; + return d1 * d1 + d2 * d2 + d3 * d3; + } + + public int manhattanDistance(Vec3Impl to) { + float f = (float)Math.abs(to.val0 - val0); + float f1 = (float)Math.abs(to.val1 - val1); + float f2 = (float)Math.abs(to.val2 - val2); + return (int)(f + f1 + f2); + } + + @Override + public String toString() { + return "Vec3[" + val0 + ", " + val1 + ", " + val2 + "]"; + } + + public Vec3Impl abs() { + return new Vec3Impl(Math.abs(val0),Math.abs(val1),Math.abs(val2)); + } +} \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/util/XSTR.java b/src/main/java/com/github/technus/tectech/util/XSTR.java new file mode 100644 index 0000000000..31c9b6a65c --- /dev/null +++ b/src/main/java/com/github/technus/tectech/util/XSTR.java @@ -0,0 +1,278 @@ +package com.github.technus.tectech.util; +/* + A subclass of java.util.random that implements the Xorshift random number + generator +

+ - it is 30% faster than the generator from Java's library - it produces + random sequences of higher quality than java.util.Random - this class also + provides a clone() function +

+ Usage: XSRandom rand = new XSRandom(); //Instantiation x = rand.nextInt(); + //pull a random number +

+ To use the class in legacy code, you may also instantiate an XSRandom object + and assign it to a java.util.Random object: java.util.Random rand = new + XSRandom(); +

+ for an explanation of the algorithm, see + http://demesos.blogspot.com/2011/09/pseudo-random-number-generators.html + + @author Wilfried Elmenreich University of Klagenfurt/Lakeside Labs + * http://www.elmenreich.tk + *

+ * This code is released under the GNU Lesser General Public License Version 3 + * http://www.gnu.org/licenses/lgpl-3.0.txt + */ + +import java.util.Random; +import java.util.concurrent.atomic.AtomicLong; + +/** + * XSTR - Xorshift ThermiteRandom + * Modified by Bogdan-G + * 03.06.2016 + * version 0.0.4 + */ +public class XSTR extends Random { + + private static final long serialVersionUID = 6208727693524452904L; + private long seed; + private static final long GAMMA = 0x9e3779b97f4a7c15L; + private static final int PROBE_INCREMENT = 0x9e3779b9; + private static final long SEEDER_INCREMENT = 0xbb67ae8584caa73bL; + private static final double DOUBLE_UNIT = 0x1.0p-53; // 1.0 / (1L << 53) + private static final float FLOAT_UNIT = 0x1.0p-24f; // 1.0f / (1 << 24) + private static final AtomicLong seedUniquifier = new AtomicLong(8682522807148012L); + public static final XSTR XSTR_INSTANCE=new XSTR(){ + @Override + public synchronized void setSeed(long seed) { + if(!Thread.currentThread().getStackTrace()[2].getClassName().equals(Random.class.getName())) { + throw new NoSuchMethodError("This is meant to be shared!, leave seed state alone!"); + } + } + }; + + /* + MODIFIED BY: Robotia + Modification: Implemented Random class seed generator + */ + + /** + * Creates a new pseudo random number generator. The seed is initialized to + * the current time, as if by + * setSeed(System.currentTimeMillis());. + */ + public XSTR() { + this(seedUniquifier() ^ System.nanoTime()); + } + + private static long seedUniquifier() { + // L'Ecuyer, "Tables of Linear Congruential Generators of + // Different Sizes and Good Lattice Structure", 1999 + while (true) { + long current = seedUniquifier.get(); + long next = current * 181783497276652981L; + if (seedUniquifier.compareAndSet(current, next)) { + return next; + } + } + } + + /** + * Creates a new pseudo random number generator, starting with the specified + * seed, using setSeed(seed);. + * + * @param seed the initial seed + */ + public XSTR(long seed) { + this.seed = seed; + } + + @Override + public boolean nextBoolean() { + return next(1) != 0; + } + + @Override + public double nextDouble() { + return (((long) next(26) << 27) + next(27)) * DOUBLE_UNIT; + } + + /** + * Returns the current state of the seed, can be used to clone the object + * + * @return the current seed + */ + public synchronized long getSeed() { + return seed; + } + + /** + * Sets the seed for this pseudo random number generator. As described + * above, two instances of the same random class, starting with the same + * seed, produce the same results, if the same methods are called. + * + * @param seed the new seed + */ + @Override + public synchronized void setSeed(long seed) { + this.seed = seed; + } + + /** + * @return Returns an XSRandom object with the same state as the original + */ + @Override + public XSTR clone() { + return new XSTR(getSeed()); + } + + /** + * Implementation of George Marsaglia's elegant Xorshift random generator + * 30% faster and better quality than the built-in java.util.random see also + * see http://www.javamex.com/tutorials/random_numbers/xorshift.shtml + * + * @param nbits will shift nbits bits + * @return next seed + */ + @Override + public int next(int nbits) { + long x = seed; + x ^= x << 21; + x ^= x >>> 35; + x ^= x << 4; + seed = x; + x &= (1L << nbits) - 1; + return (int) x; + } + + private boolean haveNextNextGaussian = false; + private double nextNextGaussian = 0; + + @Override + public synchronized double nextGaussian() { + // See Knuth, ACP, Section 3.4.1 Algorithm C. + if (haveNextNextGaussian) { + haveNextNextGaussian = false; + return nextNextGaussian; + } else { + double v1, v2, vs; + do { + v1 = 2 * nextDouble() - 1; // between -1 and 1 + v2 = 2 * nextDouble() - 1; // between -1 and 1 + vs = v1 * v1 + v2 * v2; + } while (vs >= 1 || vs == 0); + double multiplier = StrictMath.sqrt(-2 * StrictMath.log(vs) / vs); + nextNextGaussian = v2 * multiplier; + haveNextNextGaussian = true; + return v1 * multiplier; + } + } + + /** + * Returns a pseudorandom, uniformly distributed {@code int} value between 0 + * (inclusive) and the specified value (exclusive), drawn from this random + * number generator's sequence. The general contract of {@code nextInt} is + * that one {@code int} value in the specified range is pseudorandomly + * generated and returned. All {@code bound} possible {@code int} values are + * produced with (approximately) equal probability. The method + * {@code nextInt(int bound)} is implemented by class {@code Random} as if + * by: + *

 {@code
+     * public int nextInt(int bound) {
+     *   if (bound <= 0)
+     *     throw new IllegalArgumentException("bound must be positive");
+     *
+     *   if ((bound & -bound) == bound)  // i.e., bound is a power of 2
+     *     return (int)((bound * (long)next(31)) >> 31);
+     *
+     *   int bits, val;
+     *   do {
+     *       bits = next(31);
+     *       val = bits % bound;
+     *   } while (bits - val + (bound-1) < 0);
+     *   return val;
+     * }}
+ * + *

The hedge "approx + * imately" is used in the foregoing description only because the next + * method is only approximately an unbiased source of independently chosen + * bits. If it were a perfect source of randomly chosen bits, then the + * algorithm shown would choose {@code int} values from the stated range + * with perfect uniformity. + *

+ * The algorithm is slightly tricky. It rejects values that would result in + * an uneven distribution (due to the fact that 2^31 is not divisible by n). + * The probability of a value being rejected depends on n. The worst case is + * n=2^30+1, for which the probability of a reject is 1/2, and the expected + * number of iterations before the loop terminates is 2. + *

+ * The algorithm treats the case where n is a power of two specially: it + * returns the correct number of high-order bits from the underlying + * pseudo-random number generator. In the absence of special treatment, the + * correct number of low-order bits would be returned. Linear + * congruential pseudo-random number generators such as the one implemented + * by this class are known to have short periods in the sequence of values + * of their low-order bits. Thus, this special case greatly increases the + * length of the sequence of values returned by successive calls to this + * method if n is a small power of two. + * + * @param bound the upper bound (exclusive). Must be positive. + * @return the next pseudorandom, uniformly distributed {@code int} value + * between zero (inclusive) and {@code bound} (exclusive) from this random + * number generator's sequence + * @throws IllegalArgumentException if bound is not positive + * @since 1.2 + */ + @Override + public int nextInt(int bound) { + //if (bound <= 0) { + //throw new RuntimeException("BadBound"); + //} + + /*int r = next(31); + int m = bound - 1; + if ((bound & m) == 0) // i.e., bound is a power of 2 + { + r = (int) ((bound * (long) r) >> 31); + } else { + for (int u = r; + u - (r = u % bound) + m < 0; + u = next(31)) + ; + } + return r;*/ + //speedup, new nextInt ~+40% + long last = seed ^ seed << 21; + last ^= last >>> 35; + last ^= last << 4; + seed = last; + int out = (int) last % bound; + return out < 0 ? -out : out; + } + + @Override + public int nextInt() { + return next(32); + } + + @Override + public float nextFloat() { + return next(24) * FLOAT_UNIT; + } + + @Override + public long nextLong() { + // it's okay that the bottom word remains signed. + return ((long) next(32) << 32) + next(32); + } + + @Override + public void nextBytes(byte[] bytes_arr) { + for (int iba = 0, lenba = bytes_arr.length; iba < lenba; ) { + for (int rndba = nextInt(), nba = Math.min(lenba - iba, Integer.SIZE / Byte.SIZE); nba-- > 0; rndba >>= Byte.SIZE) { + bytes_arr[iba++] = (byte) rndba; + } + } + } +} \ No newline at end of file -- cgit From 5d3a02a84779d1381620bc27dc3807726ffcf46d Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 19 Apr 2020 23:16:28 +0200 Subject: Idk why but ok --- .../tectech/mechanics/alignment/IntegerAxisSwap.java | 17 +++++++++++++++++ .../mechanics/alignment/enumerable/ExtendedFacing.java | 7 +++++++ 2 files changed, 24 insertions(+) diff --git a/src/main/java/com/github/technus/tectech/mechanics/alignment/IntegerAxisSwap.java b/src/main/java/com/github/technus/tectech/mechanics/alignment/IntegerAxisSwap.java index 40cb6c3220..1c44164731 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/alignment/IntegerAxisSwap.java +++ b/src/main/java/com/github/technus/tectech/mechanics/alignment/IntegerAxisSwap.java @@ -1,6 +1,7 @@ package com.github.technus.tectech.mechanics.alignment; import com.github.technus.tectech.util.Vec3Impl; +import net.minecraft.util.Vec3; import net.minecraftforge.common.util.ForgeDirection; import static com.github.technus.tectech.mechanics.alignment.enumerable.Direction.getAxisVector; @@ -40,6 +41,22 @@ public class IntegerAxisSwap { forFirstAxis.get2()*point.get0()+forSecondAxis.get2()*point.get1()+forThirdAxis.get2()*point.get2() ); } + + public Vec3 translate(Vec3 point){ + return Vec3.createVectorHelper( + forFirstAxis.get0()*point.xCoord +forFirstAxis.get1()*point.yCoord +forFirstAxis.get2()*point.zCoord, + forSecondAxis.get0()*point.xCoord+forSecondAxis.get1()*point.yCoord+forSecondAxis.get2()*point.zCoord, + forThirdAxis.get0()*point.xCoord +forThirdAxis.get1()*point.yCoord +forThirdAxis.get2()*point.zCoord + ); + } + + public Vec3 inverseTranslate(Vec3 point){ + return Vec3.createVectorHelper( + forFirstAxis.get0()*point.xCoord+forSecondAxis.get0()*point.yCoord+forThirdAxis.get0()*point.zCoord, + forFirstAxis.get1()*point.xCoord+forSecondAxis.get1()*point.yCoord+forThirdAxis.get1()*point.zCoord, + forFirstAxis.get2()*point.xCoord+forSecondAxis.get2()*point.yCoord+forThirdAxis.get2()*point.zCoord + ); + } public void translate(int[] point,int[] out){ out[0]=forFirstAxis.get0()*point[0] +forFirstAxis.get1()*point[1] +forFirstAxis.get2()*point[2]; diff --git a/src/main/java/com/github/technus/tectech/mechanics/alignment/enumerable/ExtendedFacing.java b/src/main/java/com/github/technus/tectech/mechanics/alignment/enumerable/ExtendedFacing.java index 68cc50a5ee..5c8c902484 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/alignment/enumerable/ExtendedFacing.java +++ b/src/main/java/com/github/technus/tectech/mechanics/alignment/enumerable/ExtendedFacing.java @@ -3,6 +3,7 @@ package com.github.technus.tectech.mechanics.alignment.enumerable; import com.github.technus.tectech.mechanics.alignment.IAlignment; import com.github.technus.tectech.mechanics.alignment.IntegerAxisSwap; import com.github.technus.tectech.util.Vec3Impl; +import net.minecraft.util.Vec3; import net.minecraftforge.common.util.ForgeDirection; import java.util.*; @@ -292,6 +293,9 @@ public enum ExtendedFacing { * @param abcOffset A,B,C offset (facing relative L-->R,U-->D,F-->B) * @return X,Y,Z offset in world */ + public Vec3 getWorldOffset(Vec3 abcOffset) { + return integerAxisSwap.inverseTranslate(abcOffset); + } public Vec3Impl getWorldOffset(Vec3Impl abcOffset) { return integerAxisSwap.inverseTranslate(abcOffset); } @@ -308,6 +312,9 @@ public enum ExtendedFacing { * @param xyzOffset X,Y,Z offset in world * @return A,B,C offset (facing relative L-->R,U-->D,F-->B) */ + public Vec3 getOffsetABC(Vec3 xyzOffset){ + return integerAxisSwap.translate(xyzOffset); + } public Vec3Impl getOffsetABC(Vec3Impl xyzOffset){ return integerAxisSwap.translate(xyzOffset); } -- cgit From 1fbd3db52ce5e81ffdf563f4c498001b49ba2cbc Mon Sep 17 00:00:00 2001 From: Tec Date: Mon, 20 Apr 2020 06:53:12 +0200 Subject: Refactor to provider and add another helper method for compatiblility --- .../tectech/mechanics/alignment/IAlignment.java | 32 ++++++++++++++++------ .../mechanics/alignment/IAlignmentProvider.java | 5 ++++ .../thing/item/FrontRotationTriggerItem.java | 15 ++++++---- .../base/GT_MetaTileEntity_MultiblockBase_EM.java | 3 +- .../render/TT_RenderedExtendedFacingTexture.java | 8 ++++-- 5 files changed, 43 insertions(+), 20 deletions(-) create mode 100644 src/main/java/com/github/technus/tectech/mechanics/alignment/IAlignmentProvider.java diff --git a/src/main/java/com/github/technus/tectech/mechanics/alignment/IAlignment.java b/src/main/java/com/github/technus/tectech/mechanics/alignment/IAlignment.java index d7b48f8865..a2a6301070 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/alignment/IAlignment.java +++ b/src/main/java/com/github/technus/tectech/mechanics/alignment/IAlignment.java @@ -8,12 +8,25 @@ import net.minecraftforge.common.util.ForgeDirection; import java.util.Arrays; -public interface IAlignment extends IAlignmentLimits { +public interface IAlignment extends IAlignmentLimits,IAlignmentProvider { int DIRECTIONS_COUNT= Direction.VALUES.length; int ROTATIONS_COUNT= Rotation.VALUES.length; int FLIPS_COUNT= Flip.VALUES.length; int STATES_COUNT = ExtendedFacing.VALUES.length; + ExtendedFacing getExtendedFacing(); + + void setExtendedFacing(ExtendedFacing alignment); + + IAlignmentLimits getAlignmentLimits(); + + void setAlignmentLimits(IAlignmentLimits limits); + + @Override + default IAlignment getAlignment(){ + return this; + } + static int getAlignmentIndex(ForgeDirection direction, Rotation rotation, Flip flip){ return (direction.ordinal()*ROTATIONS_COUNT+rotation.getIndex())*FLIPS_COUNT+flip.getIndex(); } @@ -42,14 +55,6 @@ public interface IAlignment extends IAlignmentLimits { setExtendedFacing(getExtendedFacing().with(flip)); } - ExtendedFacing getExtendedFacing(); - - void setExtendedFacing(ExtendedFacing alignment); - - IAlignmentLimits getAlignmentLimits(); - - void setAlignmentLimits(IAlignmentLimits limits); - default boolean toolSetDirection(ForgeDirection direction){ if(direction==null || direction==ForgeDirection.UNKNOWN){ for (int i = 0,j=getDirection().ordinal()+1, valuesLength = Direction.VALUES.length; i < valuesLength; i++) { @@ -75,6 +80,15 @@ public interface IAlignment extends IAlignmentLimits { return false; } + default boolean canSetToDirectionAny(ForgeDirection direction){ + for (ExtendedFacing extendedFacing : ExtendedFacing.FOR_FACING.get(direction)) { + if(isNewExtendedFacingValid(extendedFacing)){ + return true; + } + } + return false; + } + default boolean toolSetRotation(Rotation rotation) { if(rotation==null){ int flips = Flip.VALUES.length; diff --git a/src/main/java/com/github/technus/tectech/mechanics/alignment/IAlignmentProvider.java b/src/main/java/com/github/technus/tectech/mechanics/alignment/IAlignmentProvider.java new file mode 100644 index 0000000000..07dc972aac --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/alignment/IAlignmentProvider.java @@ -0,0 +1,5 @@ +package com.github.technus.tectech.mechanics.alignment; + +public interface IAlignmentProvider { + IAlignment getAlignment(); +} \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/item/FrontRotationTriggerItem.java b/src/main/java/com/github/technus/tectech/thing/item/FrontRotationTriggerItem.java index efcfcfb7a3..5edc238a91 100644 --- a/src/main/java/com/github/technus/tectech/thing/item/FrontRotationTriggerItem.java +++ b/src/main/java/com/github/technus/tectech/thing/item/FrontRotationTriggerItem.java @@ -1,6 +1,7 @@ package com.github.technus.tectech.thing.item; import com.github.technus.tectech.mechanics.alignment.IAlignment; +import com.github.technus.tectech.mechanics.alignment.IAlignmentProvider; import com.github.technus.tectech.util.CommonValues; import cpw.mods.fml.common.registry.GameRegistry; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; @@ -42,19 +43,21 @@ public final class FrontRotationTriggerItem extends Item { if (aPlayer instanceof EntityPlayerMP) { if (tTileEntity instanceof IGregTechTileEntity) { IMetaTileEntity metaTE = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity(); - if (metaTE instanceof IAlignment) { + if (metaTE instanceof IAlignmentProvider) { + IAlignment alignment = ((IAlignmentProvider) metaTE).getAlignment(); if(aPlayer.isSneaking()){ - ((IAlignment) metaTE).toolSetFlip(null); + alignment.toolSetFlip(null); }else { - ((IAlignment) metaTE).toolSetRotation(null); + alignment.toolSetRotation(null); } return true; } - } else if (tTileEntity instanceof IAlignment) { + } else if (tTileEntity instanceof IAlignmentProvider) { + IAlignment alignment = ((IAlignmentProvider) tTileEntity).getAlignment(); if(aPlayer.isSneaking()){ - ((IAlignment) tTileEntity).toolSetFlip(null); + alignment.toolSetFlip(null); }else { - ((IAlignment) tTileEntity).toolSetRotation(null); + alignment.toolSetRotation(null); } return true; } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java index 52bdd3574f..50e2aa575b 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java @@ -183,8 +183,7 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt @Override public boolean isFacingValid(byte aFacing) { - return getAlignmentLimits() - .isNewExtendedFacingValid(getExtendedFacing().with(ForgeDirection.getOrientation(aFacing))); + return canSetToDirectionAny(ForgeDirection.getOrientation(aFacing)); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/render/TT_RenderedExtendedFacingTexture.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/render/TT_RenderedExtendedFacingTexture.java index 4ecea706cc..44fa12ebb8 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/render/TT_RenderedExtendedFacingTexture.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/render/TT_RenderedExtendedFacingTexture.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.thing.metaTileEntity.multi.base.render; -import com.github.technus.tectech.mechanics.alignment.IAlignment; +import com.github.technus.tectech.mechanics.alignment.IAlignmentProvider; import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; import gregtech.api.enums.Dyes; import gregtech.api.interfaces.IColorModulationContainer; @@ -881,11 +881,13 @@ public class TT_RenderedExtendedFacingTexture implements ITexture,IColorModulati TileEntity te = w.getTileEntity(x, y, z); if (te instanceof IGregTechTileEntity) { IMetaTileEntity meta = ((IGregTechTileEntity) te).getMetaTileEntity(); - if (meta instanceof IAlignment) { - return ((IAlignment) meta).getExtendedFacing(); + if (meta instanceof IAlignmentProvider) { + return ((IAlignmentProvider) meta).getAlignment().getExtendedFacing(); }else{ return ExtendedFacing.of(ForgeDirection.getOrientation(meta.getBaseMetaTileEntity().getFrontFacing())); } + } else if (te instanceof IAlignmentProvider) { + return ((IAlignmentProvider) te).getAlignment().getExtendedFacing(); } } return ExtendedFacing.DEFAULT; -- cgit From 1c8a7217e61057acb29279a987eff4cafb1a5d78 Mon Sep 17 00:00:00 2001 From: Tec Date: Mon, 20 Apr 2020 06:58:16 +0200 Subject: Cleanup util --- src/main/java/com/github/technus/tectech/util/Util.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/util/Util.java b/src/main/java/com/github/technus/tectech/util/Util.java index cd055528b1..7e6e177e77 100644 --- a/src/main/java/com/github/technus/tectech/util/Util.java +++ b/src/main/java/com/github/technus/tectech/util/Util.java @@ -40,6 +40,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.lang.reflect.Field; +import java.nio.charset.StandardCharsets; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -190,10 +191,9 @@ public final class Util { } IGregTechTileEntity igt; - IMetaTileEntity imt = aBaseMetaTileEntity.getMetaTileEntity(); - int xyz[]=new int[3]; - int abc[]=new int[3]; + int[] xyz =new int[3]; + int[] abc =new int[3]; int pointer; int baseX = aBaseMetaTileEntity.getXCoord(), baseZ = aBaseMetaTileEntity.getZCoord(), @@ -336,10 +336,8 @@ public final class Util { } //TE Rotation - - - int xyz[]=new int[3]; - int abc[]=new int[3]; + int[] xyz =new int[3]; + int[] abc =new int[3]; int pointer; int baseX = tileEntity.xCoord, @@ -1045,7 +1043,7 @@ public final class Util { String id1=player.getUniqueID().toString(); write(new File(dir, id1 + "."+extension),data); write(new File(dir, id1 + "."+extension+"_bak"),data); - String id2=UUID.nameUUIDFromBytes(player.getCommandSenderName().getBytes(forName("UTF-8"))).toString(); + String id2=UUID.nameUUIDFromBytes(player.getCommandSenderName().getBytes(StandardCharsets.UTF_8)).toString(); write(new File(dir, id2 + "."+extension),data); write(new File(dir, id2 + "."+extension+"_bak"),data); } -- cgit From 9360d6afe97e029001f411d819f6d80dafdc95a3 Mon Sep 17 00:00:00 2001 From: Tec Date: Mon, 20 Apr 2020 17:19:19 +0200 Subject: Revoctor Structure util to new package, fix typo --- Baubles-1.7.10-1.0.1.10.jar | Bin 0 -> 95415 bytes EnderCore-1.7.10-0.2.0.39_beta.jar | Bin 0 -> 467824 bytes EnderIO-1.7.10-2.3.0.429_beta.jar | Bin 0 -> 4756103 bytes GalacticraftCore-Dev-1.7-3.0.12.504.jar | Bin 0 -> 10419213 bytes libs/AsieLib-1.7.10-0.4.9-deobf.jar | Bin 0 -> 154691 bytes libs/Computronics-1.7.10-1.6.6-deobf.jar | Bin 0 -> 1143582 bytes libs/GTNewHorizonsCoreMod-1.7.10-1.6.10.jar | Bin 0 -> 3425453 bytes libs/Galacticraft-API-1.7-3.0.12.504.jar | Bin 0 -> 119588 bytes libs/MicdoodleCore-1.7-3.0.12.504.jar | Bin 0 -> 64945 bytes libs/worldedit-forge-mc1.7.10-6.1.1-dist.jar | Bin 0 -> 1461467 bytes .../GT_MetaTileEntity_EM_essentiaDequantizer.java | 8 +- .../GT_MetaTileEntity_EM_essentiaQuantizer.java | 8 +- .../tectech/loader/ConstructableLoader.java | 47 ++ .../mechanics/constructable/IConstructable.java | 16 + .../constructable/IMultiblockInfoContainer.java | 30 ++ .../tectech/mechanics/constructable/Structure.java | 526 +++++++++++++++++++++ .../mechanics/constructible/IConstructable.java | 15 - .../thing/item/ConstructableTriggerItem.java | 115 ++--- .../multi/GT_MetaTileEntity_EM_annihilation.java | 8 +- .../multi/GT_MetaTileEntity_EM_bhg.java | 12 +- .../multi/GT_MetaTileEntity_EM_collider.java | 12 +- .../multi/GT_MetaTileEntity_EM_computer.java | 18 +- .../multi/GT_MetaTileEntity_EM_crafting.java | 8 +- .../multi/GT_MetaTileEntity_EM_dataBank.java | 8 +- .../multi/GT_MetaTileEntity_EM_decay.java | 8 +- .../multi/GT_MetaTileEntity_EM_dequantizer.java | 8 +- .../multi/GT_MetaTileEntity_EM_infuser.java | 8 +- .../multi/GT_MetaTileEntity_EM_junction.java | 8 +- .../multi/GT_MetaTileEntity_EM_quantizer.java | 8 +- .../multi/GT_MetaTileEntity_EM_research.java | 8 +- .../multi/GT_MetaTileEntity_EM_scanner.java | 8 +- .../multi/GT_MetaTileEntity_EM_stabilizer.java | 8 +- .../multi/GT_MetaTileEntity_EM_switch.java | 8 +- .../multi/GT_MetaTileEntity_EM_transformer.java | 8 +- .../multi/GT_MetaTileEntity_EM_wormhole.java | 8 +- .../multi/GT_MetaTileEntity_TM_microwave.java | 8 +- .../GT_MetaTileEntity_TM_proccessingStack.java | 4 +- .../multi/GT_MetaTileEntity_TM_teslaCoil.java | 7 +- .../base/GT_MetaTileEntity_MultiblockBase_EM.java | 4 +- .../em_machine/GT_MetaTileEntity_EM_machine.java | 8 +- .../GT_MetaTileEntity_DebugStructureWriter.java | 6 +- .../java/com/github/technus/tectech/util/Util.java | 522 -------------------- 42 files changed, 772 insertions(+), 706 deletions(-) create mode 100644 Baubles-1.7.10-1.0.1.10.jar create mode 100644 EnderCore-1.7.10-0.2.0.39_beta.jar create mode 100644 EnderIO-1.7.10-2.3.0.429_beta.jar create mode 100644 GalacticraftCore-Dev-1.7-3.0.12.504.jar create mode 100644 libs/AsieLib-1.7.10-0.4.9-deobf.jar create mode 100644 libs/Computronics-1.7.10-1.6.6-deobf.jar create mode 100644 libs/GTNewHorizonsCoreMod-1.7.10-1.6.10.jar create mode 100644 libs/Galacticraft-API-1.7-3.0.12.504.jar create mode 100644 libs/MicdoodleCore-1.7-3.0.12.504.jar create mode 100644 libs/worldedit-forge-mc1.7.10-6.1.1-dist.jar create mode 100644 src/main/java/com/github/technus/tectech/loader/ConstructableLoader.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/constructable/IConstructable.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/constructable/IMultiblockInfoContainer.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/constructable/Structure.java delete mode 100644 src/main/java/com/github/technus/tectech/mechanics/constructible/IConstructable.java diff --git a/Baubles-1.7.10-1.0.1.10.jar b/Baubles-1.7.10-1.0.1.10.jar new file mode 100644 index 0000000000..40f23088c7 Binary files /dev/null and b/Baubles-1.7.10-1.0.1.10.jar differ diff --git a/EnderCore-1.7.10-0.2.0.39_beta.jar b/EnderCore-1.7.10-0.2.0.39_beta.jar new file mode 100644 index 0000000000..1fdf703497 Binary files /dev/null and b/EnderCore-1.7.10-0.2.0.39_beta.jar differ diff --git a/EnderIO-1.7.10-2.3.0.429_beta.jar b/EnderIO-1.7.10-2.3.0.429_beta.jar new file mode 100644 index 0000000000..9be1d55c41 Binary files /dev/null and b/EnderIO-1.7.10-2.3.0.429_beta.jar differ diff --git a/GalacticraftCore-Dev-1.7-3.0.12.504.jar b/GalacticraftCore-Dev-1.7-3.0.12.504.jar new file mode 100644 index 0000000000..329f7ae19b Binary files /dev/null and b/GalacticraftCore-Dev-1.7-3.0.12.504.jar differ diff --git a/libs/AsieLib-1.7.10-0.4.9-deobf.jar b/libs/AsieLib-1.7.10-0.4.9-deobf.jar new file mode 100644 index 0000000000..78d4f64b4a Binary files /dev/null and b/libs/AsieLib-1.7.10-0.4.9-deobf.jar differ diff --git a/libs/Computronics-1.7.10-1.6.6-deobf.jar b/libs/Computronics-1.7.10-1.6.6-deobf.jar new file mode 100644 index 0000000000..e6f5b07a69 Binary files /dev/null and b/libs/Computronics-1.7.10-1.6.6-deobf.jar differ diff --git a/libs/GTNewHorizonsCoreMod-1.7.10-1.6.10.jar b/libs/GTNewHorizonsCoreMod-1.7.10-1.6.10.jar new file mode 100644 index 0000000000..b579b93cc6 Binary files /dev/null and b/libs/GTNewHorizonsCoreMod-1.7.10-1.6.10.jar differ diff --git a/libs/Galacticraft-API-1.7-3.0.12.504.jar b/libs/Galacticraft-API-1.7-3.0.12.504.jar new file mode 100644 index 0000000000..6935478027 Binary files /dev/null and b/libs/Galacticraft-API-1.7-3.0.12.504.jar differ diff --git a/libs/MicdoodleCore-1.7-3.0.12.504.jar b/libs/MicdoodleCore-1.7-3.0.12.504.jar new file mode 100644 index 0000000000..b678294b0d Binary files /dev/null and b/libs/MicdoodleCore-1.7-3.0.12.504.jar differ diff --git a/libs/worldedit-forge-mc1.7.10-6.1.1-dist.jar b/libs/worldedit-forge-mc1.7.10-6.1.1-dist.jar new file mode 100644 index 0000000000..0361359748 Binary files /dev/null and b/libs/worldedit-forge-mc1.7.10-6.1.1-dist.jar differ diff --git a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaDequantizer.java b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaDequantizer.java index ab6b723e09..eb9b97deee 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaDequantizer.java +++ b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaDequantizer.java @@ -1,5 +1,6 @@ package com.github.technus.tectech.compatibility.thaumcraft.thing.metaTileEntity.multi; +import com.github.technus.tectech.mechanics.constructable.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.definitions.ePrimalAspectDefinition; @@ -7,7 +8,7 @@ import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInsta import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.thing.casing.TT_Container_Casings; -import com.github.technus.tectech.mechanics.constructible.IConstructable; +import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_quantizer; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; @@ -24,7 +25,6 @@ import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.util.ForgeDirection; import static com.github.technus.tectech.util.CommonValues.V; -import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.compatibility.thaumcraft.thing.metaTileEntity.multi.EssentiaCompat.essentiaContainerCompat; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -123,7 +123,7 @@ public class GT_MetaTileEntity_EM_essentiaDequantizer extends GT_MetaTileEntity_ } @Override - public void construct(int stackSize, boolean hintsOnly) { + public void construct(ItemStack stackSize, boolean hintsOnly) { IGregTechTileEntity iGregTechTileEntity = getBaseMetaTileEntity(); int xDir = ForgeDirection.getOrientation(iGregTechTileEntity.getBackFacing()).offsetX; int yDir = ForgeDirection.getOrientation(iGregTechTileEntity.getBackFacing()).offsetY; @@ -139,7 +139,7 @@ public class GT_MetaTileEntity_EM_essentiaDequantizer extends GT_MetaTileEntity_ iGregTechTileEntity.getWorld().setBlock(iGregTechTileEntity.getXCoord() + xDir, iGregTechTileEntity.getYCoord() + yDir, iGregTechTileEntity.getZCoord() + zDir, TT_Container_Casings.sHintCasingsTT, 12, 2); } } - StructureBuilderExtreme(shape, blockType, blockMeta, 1, 1, 0, iGregTechTileEntity, getExtendedFacing(), hintsOnly); + Structure.builder(shape, blockType, blockMeta, 1, 1, 0, iGregTechTileEntity, getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaQuantizer.java b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaQuantizer.java index 309d029b8e..0259aec7a7 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaQuantizer.java +++ b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaQuantizer.java @@ -1,5 +1,6 @@ package com.github.technus.tectech.compatibility.thaumcraft.thing.metaTileEntity.multi; +import com.github.technus.tectech.mechanics.constructable.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.definitions.ePrimalAspectDefinition; @@ -7,7 +8,7 @@ import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInsta import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.thing.casing.TT_Container_Casings; -import com.github.technus.tectech.mechanics.constructible.IConstructable; +import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_quantizer; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; @@ -24,7 +25,6 @@ import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.util.ForgeDirection; import static com.github.technus.tectech.util.CommonValues.V; -import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.compatibility.thaumcraft.thing.metaTileEntity.multi.EssentiaCompat.essentiaContainerCompat; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -127,7 +127,7 @@ public class GT_MetaTileEntity_EM_essentiaQuantizer extends GT_MetaTileEntity_Mu } @Override - public void construct(int stackSize, boolean hintsOnly) { + public void construct(ItemStack stackSize, boolean hintsOnly) { IGregTechTileEntity iGregTechTileEntity = getBaseMetaTileEntity(); int xDir = ForgeDirection.getOrientation(iGregTechTileEntity.getBackFacing()).offsetX; int yDir = ForgeDirection.getOrientation(iGregTechTileEntity.getBackFacing()).offsetY; @@ -143,7 +143,7 @@ public class GT_MetaTileEntity_EM_essentiaQuantizer extends GT_MetaTileEntity_Mu iGregTechTileEntity.getWorld().setBlock(iGregTechTileEntity.getXCoord() + xDir, iGregTechTileEntity.getYCoord() + yDir, iGregTechTileEntity.getZCoord() + zDir, TT_Container_Casings.sHintCasingsTT, 12, 2); } } - StructureBuilderExtreme(shape, blockType, blockMeta, 1, 1, 0, iGregTechTileEntity, getExtendedFacing(), hintsOnly); + Structure.builder(shape, blockType, blockMeta, 1, 1, 0, iGregTechTileEntity, getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/loader/ConstructableLoader.java b/src/main/java/com/github/technus/tectech/loader/ConstructableLoader.java new file mode 100644 index 0000000000..2dc56754f8 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/loader/ConstructableLoader.java @@ -0,0 +1,47 @@ +package com.github.technus.tectech.loader; + +import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; +import com.github.technus.tectech.mechanics.constructable.IMultiblockInfoContainer; +import com.github.technus.tectech.mechanics.constructable.Structure; +import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_ElectricBlastFurnace; +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; + +import static com.github.technus.tectech.mechanics.constructable.IMultiblockInfoContainer.*; +import static gregtech.api.GregTech_API.sBlockCasings1; + +public class ConstructableLoader implements Runnable { + + @Override + public void run() { + registerMetaClass(GT_MetaTileEntity_ElectricBlastFurnace .class, new IMultiblockInfoContainer() { + //region Structure + private final String[][] shape = new String[][]{ + {"000","\"\"\"","\"\"\""," . ",}, + {"0!0","\"A\"","\"A\""," ",}, + {"000","\"\"\"","\"\"\""," ",}, + }; + private final Block[] blockType = new Block[]{sBlockCasings1}; + private final byte[] blockMeta = new byte[]{11}; + private final String[] desc=new String[]{ + EnumChatFormatting.AQUA+"Hint Details:", + "1 - Classic Hatches or Heat Proof Casing", + "2 - Muffler Hatch", + "3 - Coil blocks" + }; + //endregion + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly, TileEntity tileEntity, ExtendedFacing aSide) { + Structure.builder(shape, blockType, blockMeta, 1, 3, 0, tileEntity, aSide, hintsOnly); + } + + @Override + public String[] getDescription(int stackSize) { + return desc; + } + }); + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/constructable/IConstructable.java b/src/main/java/com/github/technus/tectech/mechanics/constructable/IConstructable.java new file mode 100644 index 0000000000..d7c3c86098 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/constructable/IConstructable.java @@ -0,0 +1,16 @@ +package com.github.technus.tectech.mechanics.constructable; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.item.ItemStack; + +/** + * Created by Tec on 24.03.2017. + */ +public interface IConstructable { + void construct(ItemStack stackSize, boolean hintsOnly); + + @SideOnly(Side.CLIENT) + String[] getStructureDescription(int stackSize); +} + diff --git a/src/main/java/com/github/technus/tectech/mechanics/constructable/IMultiblockInfoContainer.java b/src/main/java/com/github/technus/tectech/mechanics/constructable/IMultiblockInfoContainer.java new file mode 100644 index 0000000000..29769fafb8 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/constructable/IMultiblockInfoContainer.java @@ -0,0 +1,30 @@ +package com.github.technus.tectech.mechanics.constructable; + +import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; + +import java.util.HashMap; + +/** + * To implement IConstructable on not own TileEntities + */ +public interface IMultiblockInfoContainer { + HashMap MULTIBLOCK_MAP = new HashMap<>(); + + static void registerTileClass(Class clazz, IMultiblockInfoContainer info){ + MULTIBLOCK_MAP.put(clazz.getCanonicalName(),info); + } + + static void registerMetaClass(Class clazz, IMultiblockInfoContainer info){ + MULTIBLOCK_MAP.put(clazz.getCanonicalName(),info); + } + + void construct(ItemStack stackSize, boolean hintsOnly, TileEntity tileEntity, ExtendedFacing aSide); + + @SideOnly(Side.CLIENT) + String[] getDescription(int stackSize); +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/constructable/Structure.java b/src/main/java/com/github/technus/tectech/mechanics/constructable/Structure.java new file mode 100644 index 0000000000..00ffb32525 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/constructable/Structure.java @@ -0,0 +1,526 @@ +package com.github.technus.tectech.mechanics.constructable; + +import com.github.technus.tectech.TecTech; +import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; +import com.github.technus.tectech.thing.casing.TT_Container_Casings; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; +import static gregtech.api.enums.GT_Values.E; + +public class Structure { + private static final Pattern matchE_ = Pattern.compile("(E,(E,)+)"); + + private Structure(){} + + //Check Machine Structure based on string[][] (effectively char[][][]), ond offset of the controller + //This only checks for REGULAR BLOCKS! + public static boolean checker( + String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR-1 blocks + Block[] blockType,//use numbers 0-9 for casing types + byte[] blockMeta,//use numbers 0-9 for casing types + IHatchAdder[] addingMethods, + short[] casingTextures, + Block[] blockTypeFallback,//use numbers 0-9 for casing types + byte[] blockMetaFallback,//use numbers 0-9 for casing types + int horizontalOffset, int verticalOffset, int depthOffset, + IGregTechTileEntity aBaseMetaTileEntity, + ExtendedFacing extendedFacing, + boolean forceCheck) { + World world = aBaseMetaTileEntity.getWorld(); + if (world.isRemote) { + return false; + } + //TE Rotation + if(extendedFacing==null){ + extendedFacing=ExtendedFacing.of(ForgeDirection.getOrientation(aBaseMetaTileEntity.getFrontFacing())); + } + + IGregTechTileEntity igt; + + int[] xyz =new int[3]; + int[] abc =new int[3]; + int pointer; + int baseX = aBaseMetaTileEntity.getXCoord(), + baseZ = aBaseMetaTileEntity.getZCoord(), + baseY = aBaseMetaTileEntity.getYCoord(); + //a,b,c - relative to block face! + //x,y,z - relative to block position on map! + //yPos - absolute height of checked block + + //perform your duties + abc[2] = -depthOffset; + for (String[] _structure : structure) {//front to back + abc[1] = verticalOffset; + for (String __structure : _structure) {//top to bottom + abc[0] = -horizontalOffset; + for (char block : __structure.toCharArray()) {//left to right + if (block < ' ') {//Control chars allow skipping + abc[1] -= block; + break; + } else if (block > '@') {//characters allow to skip check A-1 skip, B-2 skips etc. + abc[0] += block - '@'; + }//else if (block < '+')//used to mark THINGS + // a++; + else if (block == '.') { + abc[0]++; + } else { + //get x y z from rotation + extendedFacing.getWorldOffset(abc,xyz); + xyz[0]+=baseX; + xyz[1]+=baseY; + xyz[2]+=baseZ; + + //that must be here since in some cases other axis (b,c) controls y + if (xyz[1] < 0 || xyz[1] >= 256) { + return false; + } + + //Check block + if (world.blockExists(xyz[0], xyz[1], xyz[2])) {//this actually checks if the chunk is loaded at this pos + switch (block) { + case '-'://must be air + if (world.getBlock(xyz[0], xyz[1], xyz[2]).getMaterial() != Material.air) { + return false; + } + break; + case '+'://must not be air + if (world.getBlock(xyz[0], xyz[1], xyz[2]).getMaterial() == Material.air) { + return false; + } + break; + default://check for block (countable) + if ((pointer = block - '0') >= 0) { + //countable air -> net.minecraft.block.BlockAir + if (world.getBlock(xyz[0], xyz[1], xyz[2]) != blockType[pointer]) { + if (DEBUG_MODE) { + TecTech.LOGGER.info("Struct-block-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + world.getBlock(xyz[0], xyz[1], xyz[2]).getUnlocalizedName() + ' ' + blockType[pointer].getUnlocalizedName()); + } + return false; + } + if (world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) != blockMeta[pointer]) { + if (DEBUG_MODE) { + TecTech.LOGGER.info("Struct-meta-id-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) + ' ' + blockMeta[pointer]); + } + return false; + } + } else //noinspection ConstantConditions + if ((pointer = block - ' ') >= 0) { + igt = aBaseMetaTileEntity.getIGregTechTileEntity(xyz[0], xyz[1], xyz[2]); + if (igt == null || !addingMethods[pointer].apply(igt, casingTextures[pointer])) { + if (world.getBlock(xyz[0], xyz[1], xyz[2]) != blockTypeFallback[pointer]) { + if (DEBUG_MODE) { + TecTech.LOGGER.info("Fallback-struct-block-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + world.getBlock(xyz[0], xyz[1], xyz[2]).getUnlocalizedName() + ' ' + (blockTypeFallback[pointer] == null ? "null" : blockTypeFallback[pointer].getUnlocalizedName())); + } + return false; + } + if (world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) != blockMetaFallback[pointer]) { + if (DEBUG_MODE) { + TecTech.LOGGER.info("Fallback-Struct-meta-id-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) + ' ' + blockMetaFallback[pointer]); + } + return false; + } + } + } + } + } else if (forceCheck) { + return false; + } + abc[0]++;//block in horizontal layer + } + } + abc[1]--;//horizontal layer + } + abc[2]++;//depth + } + return true; + } + + public static boolean builder(String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR+1 blocks + Block[] blockType,//use numbers 0-9 for casing types + byte[] blockMeta,//use numbers 0-9 for casing types + int horizontalOffset, int verticalOffset, int depthOffset, + IGregTechTileEntity tileEntity, ExtendedFacing extendedFacing, boolean hintsOnly) { + return builder(structure, blockType, blockMeta, horizontalOffset, verticalOffset, depthOffset, + tileEntity.getWorld(),tileEntity.getXCoord(),tileEntity.getYCoord(),tileEntity.getZCoord(), + extendedFacing, hintsOnly); + } + + public static boolean builder(String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR+1 blocks + Block[] blockType,//use numbers 0-9 for casing types + byte[] blockMeta,//use numbers 0-9 for casing types + int horizontalOffset, int verticalOffset, int depthOffset, + TileEntity tileEntity, ExtendedFacing extendedFacing, boolean hintsOnly) { + return builder(structure, blockType, blockMeta, horizontalOffset, verticalOffset, depthOffset, + tileEntity.getWorldObj(),tileEntity.xCoord,tileEntity.yCoord,tileEntity.zCoord, + extendedFacing, hintsOnly); + } + + public static boolean builder(String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR+1 blocks + Block[] blockType,//use numbers 0-9 for casing types + byte[] blockMeta,//use numbers 0-9 for casing types + int horizontalOffset, int verticalOffset, int depthOffset, + World world,int baseX,int baseZ,int baseY, ExtendedFacing extendedFacing, boolean hintsOnly) { + if (world==null || (!world.isRemote && hintsOnly)) { + return false; + } + + //TE Rotation + int[] xyz =new int[3]; + int[] abc =new int[3]; + int pointer; + + //a,b,c - relative to block face! + //x,y,z - relative to block position on map! + + //perform your duties + abc[2] = -depthOffset; + for (String[] _structure : structure) {//front to back + abc[1] = verticalOffset; + for (String __structure : _structure) {//top to bottom + abc[0] = -horizontalOffset; + for (char block : __structure.toCharArray()) {//left to right + if (block < ' ') {//Control chars allow skipping + abc[1] -= block; + break; + } + if (block > '@')//characters allow to skip check a-1 skip, b-2 skips etc. + { + abc[0] += block - '@'; + }//else if (block < '+')//used to mark THINGS + // a++; + else if (block == '.')// this TE + { + abc[0]++; + } else { + //get x y z from rotation + extendedFacing.getWorldOffset(abc,xyz); + xyz[0]+=baseX; + xyz[1]+=baseY; + xyz[2]+=baseZ; + + //that must be here since in some cases other axis (b,c) controls y + if (xyz[1] < 0 || xyz[1] >= 256) { + return false; + } + + //Check block + if (world.blockExists(xyz[0], xyz[1], xyz[2])) {//this actually checks if the chunk is loaded + if (hintsOnly) { + switch (block) { + case '-'://must be air + TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, 13); + break; + case '+'://must not be air + TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, 14); + break; + default: //check for block + if ((pointer = block - '0') >= 0) { + if (world.getBlock(xyz[0], xyz[1], xyz[2]) != blockType[pointer] || world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) != blockMeta[pointer]) { + TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], blockType[pointer], blockMeta[pointer]); + } + } else if ((pointer = block - ' ') >= 0) { + if (pointer >= 0 && pointer < 12) { + TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, pointer); + } else { + TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, 12); + } + } else { + TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, 15); + } + } + } else { + switch (block) { + case '-'://must be air + world.setBlock(xyz[0], xyz[1], xyz[2], Blocks.air, 0, 2); + break; + case '+'://must not be air + world.setBlock(xyz[0], xyz[1], xyz[2], TT_Container_Casings.sBlockCasingsTT, 14, 2); + break; + default: //check for block + if ((pointer = block - '0') >= 0) { + world.setBlock(xyz[0], xyz[1], xyz[2], blockType[pointer], blockMeta[pointer], 2); + } else if (block - ' ' < 0) { + world.setBlock(xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, 15, 2); + } //else { + //switch(pointer){ + // case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: + // world.setBlock(x, y, z, TT_Container_Casings.sHintCasingsTT, pointer, 2); break; + // default:world.setBlock(x, y, z, TT_Container_Casings.sHintCasingsTT, 12, 2); + //} + //} + } + } + } + abc[0]++;//block in horizontal layer + } + } + abc[1]--;//horizontal layer + } + abc[2]++;//depth + } + return true; + } + + + public static String[] writer(IGregTechTileEntity aBaseMetaTileEntity, + int horizontalOffset, int verticalOffset, int depthOffset, + int horizontalSize, int verticalSize, int depthSize, boolean ignoreAir) { + //TE Rotation + byte facing = aBaseMetaTileEntity.getFrontFacing(); + World world = aBaseMetaTileEntity.getWorld(); + if (world.isRemote) { + return new String[]{"Not at Client m8"}; + } + + ItemStack[] array = new ItemStack[10]; + + int x, y, z, a, b, c; + int + baseX = aBaseMetaTileEntity.getXCoord(), + baseZ = aBaseMetaTileEntity.getZCoord(), + baseY = aBaseMetaTileEntity.getYCoord(); + //a,b,c - relative to block face! + //x,y,z - relative to block position on map! + //yPos - absolute height of checked block + + //perform your duties - #1 - count block types + c = -depthOffset; + for (int cz = 0; cz < depthSize; cz++) {//front to back + b = verticalOffset; + for (int by = 0; by < verticalSize; by++) {//top to bottom + a = -horizontalOffset; + for (int az = 0; az < horizontalSize; az++) {//left to right + //get x y z from rotation + switch (facing) {//translation + case 4: + x = baseX + c; + z = baseZ + a; + y = baseY + b; + break; + case 3: + x = baseX + a; + z = baseZ - c; + y = baseY + b; + break; + case 5: + x = baseX - c; + z = baseZ - a; + y = baseY + b; + break; + case 2: + x = baseX - a; + z = baseZ + c; + y = baseY + b; + break; + //Things get odd if the block faces up or down... + case 1: + x = baseX + a; + z = baseZ + b; + y = baseY - c; + break;//similar to 3 + case 0: + x = baseX - a; + z = baseZ - b; + y = baseY + c; + break;//similar to 2 + default: + return new String[]{"Invalid rotation"}; + } + + //that must be here since in some cases other axis (b,c) controls y + if (y < 0 || y >= 256) { + return new String[]{"Invalid position"}; + } + + //Check block + Block block = world.getBlock(x, y, z); + int meta = world.getBlockMetadata(x, y, z); + + if (!block.hasTileEntity(meta) && block.getMaterial() != Material.air) { + boolean err = true; + ItemStack is = new ItemStack(block, 1, meta); + for (int i = 0; i < array.length; i++) { + if (array[i] == null) { + array[i] = is; + err = false; + break; + } else if (is.getItem() == array[i].getItem() && is.getItemDamage() == array[i].getItemDamage()) { + err = false; + break; + } + } + if (err) { + return new String[]{"Too much different blocks"}; + } + } + + a++;//block in horizontal layer + } + b--;//horizontal layer + } + c++;//depth + } + + List output = new ArrayList<>(); + + output.add("Offsets: " + horizontalOffset + ' ' + verticalOffset + ' ' + depthOffset); + output.add("Sizes: " + horizontalSize + ' ' + verticalSize + ' ' + depthSize); + output.add(""); + + output.add("ID[]: Name[]"); + output.add(""); + for (int i = 0; i < array.length; i++) { + if (array[i] != null) { + output.add(i + ": " + array[i].getDisplayName()); + } + } + output.add(""); + output.add("ID[]: Block[] BlockMetaID[]"); + output.add(""); + for (int i = 0; i < array.length; i++) { + if (array[i] != null) { + output.add(i + ": " + array[i].getItem().getUnlocalizedName() + ' ' + array[i].getItemDamage()); + } + } + output.add(""); + output.add("String[][]"); + //perform your duties - #2 - write strings + output.add("{"); + c = -depthOffset; + for (int cz = 0; cz < depthSize; cz++) {//front to back + b = verticalOffset; + StringBuilder addMe = new StringBuilder().append('{'); + for (int by = 0; by < verticalSize; by++) {//top to bottom + a = -horizontalOffset; + StringBuilder line = new StringBuilder(); + for (int az = 0; az < horizontalSize; az++) {//left to right + //get x y z from rotation + switch (facing) {//translation + case 4: + x = baseX + c; + z = baseZ + a; + y = baseY + b; + break; + case 3: + x = baseX + a; + z = baseZ - c; + y = baseY + b; + break; + case 5: + x = baseX - c; + z = baseZ - a; + y = baseY + b; + break; + case 2: + x = baseX - a; + z = baseZ + c; + y = baseY + b; + break; + //Things get odd if the block faces up or down... + case 1: + x = baseX + a; + z = baseZ + b; + y = baseY - c; + break;//similar to 3 + case 0: + x = baseX - a; + z = baseZ - b; + y = baseY + c; + break;//similar to 2 + default: + return new String[]{"Invalid rotation"}; + } + + //Check block + Block block = world.getBlock(x, y, z); + int meta = world.getBlockMetadata(x, y, z); + + if (a == 0 && b == 0 && c == 0) { + line.append('.'); + } else if (block.getMaterial() == Material.air) { + line.append('-'); + } else if (block.hasTileEntity(meta)) { + line.append('*'); + } else { + ItemStack stack = new ItemStack(block, 1, meta); + String str = "?";//OH YEAH NPEs + for (int i = 0; i < array.length; i++) { + if (array[i] != null && stack.getItem() == array[i].getItem() && stack.getItemDamage() == array[i].getItemDamage()) { + str = Integer.toString(i); + break; + } + } + line.append(str); + } + a++;//block in horizontal layer + } + if (ignoreAir) { + StringBuilder builder = new StringBuilder(); + char temp = '@'; + for (char ch : line.toString().toCharArray()) { + if (ch == '-') { + temp += 1; + if (temp == '~') { + builder.append('~'); + temp = '@'; + } + } else { + if (temp > '@') { + builder.append(temp); + temp = '@'; + } + builder.append(ch); + } + } + while (builder.length() > 0 && builder.charAt(builder.length() - 1) == '~') { + builder.deleteCharAt(builder.length() - 1); + } + if (builder.length() == 0) { + builder.append("E,"); + } else { + builder.insert(0, '"'); + builder.append('"').append(','); + } + addMe.append(builder); + } else { + if (line.length() == 0) { + line.append("E,"); + } else { + line.insert(0, '"'); + line.append('"').append(','); + } + addMe.append(line); + } + b--;//horizontal layer + } + //region less verbose + addMe.append('}').append(','); + String builtStr = addMe.toString().replaceAll("(E,)+(?=})", E/*Remove Empty strings at end*/); + Matcher matcher = matchE_.matcher(builtStr); + while (matcher.find()) { + byte lenEE = (byte) (matcher.group(1).length() >> 1); + builtStr = builtStr.replaceFirst("E,(E,)+", "\"\\\\u00" + String.format("%02X", lenEE - 1) + "\","); + //builtStr=builtStr.replaceFirst("E,(E,)+\"","\"\\\\u00"+String.format("%02X", lenEE)); + } + //endregion + output.add(builtStr); + c++;//depth + } + output.add("}"); + return output.toArray(new String[0]); + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/constructible/IConstructable.java b/src/main/java/com/github/technus/tectech/mechanics/constructible/IConstructable.java deleted file mode 100644 index fdfa2904fb..0000000000 --- a/src/main/java/com/github/technus/tectech/mechanics/constructible/IConstructable.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.github.technus.tectech.mechanics.constructible; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -/** - * Created by Tec on 24.03.2017. - */ -public interface IConstructable { - void construct(int stackSize, boolean hintsOnly); - - @SideOnly(Side.CLIENT) - String[] getStructureDescription(int stackSize); -} - diff --git a/src/main/java/com/github/technus/tectech/thing/item/ConstructableTriggerItem.java b/src/main/java/com/github/technus/tectech/thing/item/ConstructableTriggerItem.java index 4af6b53658..7b7d1983fa 100644 --- a/src/main/java/com/github/technus/tectech/thing/item/ConstructableTriggerItem.java +++ b/src/main/java/com/github/technus/tectech/thing/item/ConstructableTriggerItem.java @@ -1,15 +1,15 @@ package com.github.technus.tectech.thing.item; +import com.github.technus.tectech.mechanics.alignment.IAlignment; +import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; +import com.github.technus.tectech.mechanics.constructable.IMultiblockInfoContainer; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.mechanics.constructible.IConstructable; +import com.github.technus.tectech.mechanics.constructable.IConstructable; import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_ElectricBlastFurnace; -import net.minecraft.block.Block; +import gregtech.api.interfaces.tileentity.IMachineBlockUpdateable; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.Item; @@ -18,14 +18,13 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.FakePlayer; +import net.minecraftforge.common.util.ForgeDirection; -import java.util.HashMap; import java.util.List; import static com.github.technus.tectech.Reference.MODID; -import static com.github.technus.tectech.util.Util.StructureBuilder; import static com.github.technus.tectech.loader.gui.CreativeTabTecTech.creativeTabTecTech; -import static gregtech.api.GregTech_API.sBlockCasings1; +import static com.github.technus.tectech.mechanics.constructable.IMultiblockInfoContainer.MULTIBLOCK_MAP; import static net.minecraft.util.StatCollector.translateToLocal; /** @@ -34,8 +33,6 @@ import static net.minecraft.util.StatCollector.translateToLocal; public final class ConstructableTriggerItem extends Item { public static ConstructableTriggerItem INSTANCE; - private static HashMap multiblockMap= new HashMap<>(); - private ConstructableTriggerItem() { setUnlocalizedName("em.constructable"); setTextureName(MODID + ":itemConstructable"); @@ -54,14 +51,28 @@ public final class ConstructableTriggerItem extends Item { if (tTileEntity instanceof IGregTechTileEntity) { IMetaTileEntity metaTE = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity(); if (metaTE instanceof IConstructable) { - ((IConstructable) metaTE).construct(aStack.stackSize, false); - } else if (multiblockMap.containsKey(metaTE.getClass().getCanonicalName())) { - multiblockMap.get(metaTE.getClass().getCanonicalName()).construct(aStack.stackSize, false, tTileEntity, ((IGregTechTileEntity) tTileEntity).getFrontFacing()); + ((IConstructable) metaTE).construct(aStack, false); + } else if (MULTIBLOCK_MAP.containsKey(metaTE.getClass().getCanonicalName())) { + IMultiblockInfoContainer iMultiblockInfoContainer = MULTIBLOCK_MAP.get(metaTE.getClass().getCanonicalName()); + if(metaTE instanceof IAlignment){ + iMultiblockInfoContainer.construct(aStack, false, tTileEntity, ( + (IAlignment) metaTE).getExtendedFacing()); + }else { + iMultiblockInfoContainer.construct(aStack, false, tTileEntity, + ExtendedFacing.of(ForgeDirection.getOrientation(((IGregTechTileEntity) tTileEntity).getFrontFacing()))); + } } } else if (tTileEntity instanceof IConstructable) { - ((IConstructable) tTileEntity).construct(aStack.stackSize, false); - } else if (multiblockMap.containsKey(tTileEntity.getClass().getCanonicalName())) { - multiblockMap.get(tTileEntity.getClass().getCanonicalName()).construct(aStack.stackSize, false, tTileEntity, aSide); + ((IConstructable) tTileEntity).construct(aStack, false); + } else if (MULTIBLOCK_MAP.containsKey(tTileEntity.getClass().getCanonicalName())) { + IMultiblockInfoContainer iMultiblockInfoContainer = MULTIBLOCK_MAP.get(tTileEntity.getClass().getCanonicalName()); + if(tTileEntity instanceof IAlignment){ + iMultiblockInfoContainer.construct(aStack, false, tTileEntity, + ((IAlignment) tTileEntity).getExtendedFacing()); + }else { + iMultiblockInfoContainer.construct(aStack, false, tTileEntity, + ExtendedFacing.of(ForgeDirection.getOrientation(aSide))); + } } } return true; @@ -70,21 +81,35 @@ public final class ConstructableTriggerItem extends Item { if(tTileEntity instanceof IGregTechTileEntity) { IMetaTileEntity metaTE = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity(); if (metaTE instanceof IConstructable) { - ((IConstructable) metaTE).construct(aStack.stackSize, true); + ((IConstructable) metaTE).construct(aStack, true); TecTech.proxy.printInchat(((IConstructable) metaTE).getStructureDescription(aStack.stackSize)); return false; - } else if(multiblockMap.containsKey(metaTE.getClass().getCanonicalName())){ - multiblockMap.get(metaTE.getClass().getCanonicalName()).construct(aStack.stackSize,true,tTileEntity,((IGregTechTileEntity) tTileEntity).getFrontFacing()); - TecTech.proxy.printInchat(multiblockMap.get(metaTE.getClass().getCanonicalName()).getDescription(aStack.stackSize)); + } else if(MULTIBLOCK_MAP.containsKey(metaTE.getClass().getCanonicalName())){ + IMultiblockInfoContainer iMultiblockInfoContainer = MULTIBLOCK_MAP.get(metaTE.getClass().getCanonicalName()); + if(metaTE instanceof IAlignment){ + iMultiblockInfoContainer.construct(aStack, true, tTileEntity, ( + (IAlignment) metaTE).getExtendedFacing()); + }else { + iMultiblockInfoContainer.construct(aStack, true, tTileEntity, + ExtendedFacing.of(ForgeDirection.getOrientation(((IGregTechTileEntity) tTileEntity).getFrontFacing()))); + } + TecTech.proxy.printInchat(MULTIBLOCK_MAP.get(metaTE.getClass().getCanonicalName()).getDescription(aStack.stackSize)); return false; } } else if(tTileEntity instanceof IConstructable){ - ((IConstructable) tTileEntity).construct(aStack.stackSize,true); + ((IConstructable) tTileEntity).construct(aStack,true); TecTech.proxy.printInchat(((IConstructable) tTileEntity).getStructureDescription(aStack.stackSize)); return false; - } else if(multiblockMap.containsKey(tTileEntity.getClass().getCanonicalName())){ - multiblockMap.get(tTileEntity.getClass().getCanonicalName()).construct(aStack.stackSize,true,tTileEntity, aSide); - TecTech.proxy.printInchat(multiblockMap.get(tTileEntity.getClass().getCanonicalName()).getDescription(aStack.stackSize)); + } else if(MULTIBLOCK_MAP.containsKey(tTileEntity.getClass().getCanonicalName())){ + IMultiblockInfoContainer iMultiblockInfoContainer = MULTIBLOCK_MAP.get(tTileEntity.getClass().getCanonicalName()); + if(tTileEntity instanceof IAlignment){ + iMultiblockInfoContainer.construct(aStack, true, tTileEntity, + ((IAlignment) tTileEntity).getExtendedFacing()); + }else { + iMultiblockInfoContainer.construct(aStack, true, tTileEntity, + ExtendedFacing.of(ForgeDirection.getOrientation(aSide))); + } + TecTech.proxy.printInchat(MULTIBLOCK_MAP.get(tTileEntity.getClass().getCanonicalName()).getDescription(aStack.stackSize)); return false; } //} else { @@ -122,47 +147,5 @@ public final class ConstructableTriggerItem extends Item { public static void run() { INSTANCE = new ConstructableTriggerItem(); GameRegistry.registerItem(INSTANCE, INSTANCE.getUnlocalizedName()); - - registerMetaClass(GT_MetaTileEntity_ElectricBlastFurnace.class, new IMultiblockInfoContainer() { - //region Structure - private final String[][] shape = new String[][]{ - {"000","\"\"\"","\"\"\""," . ",}, - {"0!0","\"A\"","\"A\""," ",}, - {"000","\"\"\"","\"\"\""," ",}, - }; - private final Block[] blockType = new Block[]{sBlockCasings1}; - private final byte[] blockMeta = new byte[]{11}; - private final String[] desc=new String[]{ - EnumChatFormatting.AQUA+"Hint Details:", - "1 - Classic Hatches or Heat Proof Casing", - "2 - Muffler Hatch", - "3 - Coil blocks" - }; - //endregion - - @Override - public void construct(int stackSize, boolean hintsOnly, TileEntity tileEntity, int aSide) { - StructureBuilder(shape, blockType, blockMeta, 1, 3, 0, tileEntity, aSide, hintsOnly); - } - - @Override - public String[] getDescription(int stackSize) { - return desc; - } - }); - } - - public interface IMultiblockInfoContainer { - void construct(int stackSize, boolean hintsOnly, TileEntity tileEntity, int aSide); - @SideOnly(Side.CLIENT) - String[] getDescription(int stackSize); - } - - public static void registerTileClass(Class clazz, IMultiblockInfoContainer info){ - multiblockMap.put(clazz.getCanonicalName(),info); - } - - public static void registerMetaClass(Class clazz, IMultiblockInfoContainer info){ - multiblockMap.put(clazz.getCanonicalName(),info); } } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_annihilation.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_annihilation.java index d52a3c23f7..4333d4c8c9 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_annihilation.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_annihilation.java @@ -1,8 +1,9 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; +import com.github.technus.tectech.mechanics.constructable.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.thing.block.QuantumGlassBlock; -import com.github.technus.tectech.mechanics.constructible.IConstructable; +import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; @@ -17,7 +18,6 @@ import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; -import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -103,8 +103,8 @@ public class GT_MetaTileEntity_EM_annihilation extends GT_MetaTileEntity_Multibl } @Override - public void construct(int stackSize, boolean hintsOnly) { - StructureBuilderExtreme(shape, blockType, blockMeta, 5, 5, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); + public void construct(ItemStack stackSize, boolean hintsOnly) { + Structure.builder(shape, blockType, blockMeta, 5, 5, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java index 74ebae9f57..c5aaa1d66f 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java @@ -1,8 +1,9 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; +import com.github.technus.tectech.mechanics.constructable.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.thing.block.QuantumGlassBlock; -import com.github.technus.tectech.mechanics.constructible.IConstructable; +import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; @@ -17,7 +18,6 @@ import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; -import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -297,11 +297,11 @@ public class GT_MetaTileEntity_EM_bhg extends GT_MetaTileEntity_MultiblockBase_E } @Override - public void construct(int stackSize, boolean hintsOnly) { - if ((stackSize & 1) == 1) { - StructureBuilderExtreme(shape, blockType, blockMeta, 16, 16, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); + public void construct(ItemStack stackSize, boolean hintsOnly) { + if ((stackSize.stackSize & 1) == 1) { + Structure.builder(shape, blockType, blockMeta, 16, 16, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } else { - StructureBuilderExtreme(shape2, blockType2, blockMeta2, 16, 16, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); + Structure.builder(shape2, blockType2, blockMeta2, 16, 16, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java index d37fcfdc4b..fe676910ee 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java @@ -1,5 +1,6 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; +import com.github.technus.tectech.mechanics.constructable.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.definitions.dComplexAspectDefinition; @@ -13,7 +14,7 @@ import com.github.technus.tectech.mechanics.elementalMatter.definitions.complex. import com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.eQuarkDefinition; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.thing.casing.TT_Container_Casings; -import com.github.technus.tectech.mechanics.constructible.IConstructable; +import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputElemental; import com.github.technus.tectech.thing.metaTileEntity.multi.base.*; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; @@ -33,7 +34,6 @@ import net.minecraftforge.common.util.ForgeDirection; import java.util.HashMap; -import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -665,7 +665,7 @@ public class GT_MetaTileEntity_EM_collider extends GT_MetaTileEntity_MultiblockB } @Override - public void construct(int stackSize, boolean hintsOnly) { + public void construct(ItemStack stackSize, boolean hintsOnly) { IGregTechTileEntity iGregTechTileEntity = getBaseMetaTileEntity(); int xDir = ForgeDirection.getOrientation(iGregTechTileEntity.getBackFacing()).offsetX * 4; int yDir = ForgeDirection.getOrientation(iGregTechTileEntity.getBackFacing()).offsetY * 4; @@ -681,10 +681,10 @@ public class GT_MetaTileEntity_EM_collider extends GT_MetaTileEntity_MultiblockB iGregTechTileEntity.getWorld().setBlock(iGregTechTileEntity.getXCoord() + xDir, iGregTechTileEntity.getYCoord() + yDir, iGregTechTileEntity.getZCoord() + zDir, TT_Container_Casings.sHintCasingsTT, 12, 2); } } - if ((stackSize & 1) == 1) { - StructureBuilderExtreme(shape, blockType, blockMeta1, 11, 1, 18, iGregTechTileEntity, getExtendedFacing(), hintsOnly); + if ((stackSize.stackSize & 1) == 1) { + Structure.builder(shape, blockType, blockMeta1, 11, 1, 18, iGregTechTileEntity, getExtendedFacing(), hintsOnly); } else { - StructureBuilderExtreme(shape, blockType, blockMeta2, 11, 1, 18, iGregTechTileEntity, getExtendedFacing(), hintsOnly); + Structure.builder(shape, blockType, blockMeta2, 11, 1, 18, iGregTechTileEntity, getExtendedFacing(), hintsOnly); } } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java index 1afbdf66e0..433b8b4950 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java @@ -1,11 +1,12 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; +import com.github.technus.tectech.mechanics.constructable.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.util.Util; import com.github.technus.tectech.util.Vec3Impl; import com.github.technus.tectech.mechanics.dataTransport.QuantumDataPacket; -import com.github.technus.tectech.mechanics.constructible.IConstructable; +import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputData; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_OutputData; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Rack; @@ -29,7 +30,6 @@ import net.minecraft.util.ResourceLocation; import java.util.ArrayList; import static com.github.technus.tectech.util.CommonValues.V; -import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -335,18 +335,18 @@ public class GT_MetaTileEntity_EM_computer extends GT_MetaTileEntity_MultiblockB } @Override - public void construct(int stackSize, boolean hintsOnly) { + public void construct(ItemStack stackSize, boolean hintsOnly) { IGregTechTileEntity igt = getBaseMetaTileEntity(); - StructureBuilderExtreme(front, blockType, blockMeta, 1, 2, 0, igt, getExtendedFacing(), hintsOnly); - StructureBuilderExtreme(cap, blockType, blockMeta, 1, 2, -1, igt, getExtendedFacing(), hintsOnly); + Structure.builder(front, blockType, blockMeta, 1, 2, 0, igt, getExtendedFacing(), hintsOnly); + Structure.builder(cap, blockType, blockMeta, 1, 2, -1, igt, getExtendedFacing(), hintsOnly); byte offset = -2; - for (int rackSlices = Math.min(stackSize, 12); rackSlices > 0; rackSlices--) { - StructureBuilderExtreme(slice, blockType, blockMeta, 1, 2, offset--, igt, getExtendedFacing(), hintsOnly); + for (int rackSlices = Math.min(stackSize.stackSize, 12); rackSlices > 0; rackSlices--) { + Structure.builder(slice, blockType, blockMeta, 1, 2, offset--, igt, getExtendedFacing(), hintsOnly); } - StructureBuilderExtreme(cap, blockType, blockMeta, 1, 2, offset--, igt, getExtendedFacing(), hintsOnly); - StructureBuilderExtreme(terminator, blockType, blockMeta, 1, 2, offset, igt, getExtendedFacing(), hintsOnly); + Structure.builder(cap, blockType, blockMeta, 1, 2, offset--, igt, getExtendedFacing(), hintsOnly); + Structure.builder(terminator, blockType, blockMeta, 1, 2, offset, igt, getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_crafting.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_crafting.java index 3083f36721..7a71f36d3b 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_crafting.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_crafting.java @@ -1,8 +1,9 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; +import com.github.technus.tectech.mechanics.constructable.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.thing.block.QuantumGlassBlock; -import com.github.technus.tectech.mechanics.constructible.IConstructable; +import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; @@ -17,7 +18,6 @@ import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; -import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -105,8 +105,8 @@ public class GT_MetaTileEntity_EM_crafting extends GT_MetaTileEntity_MultiblockB } @Override - public void construct(int stackSize, boolean hintsOnly) { - StructureBuilderExtreme(shape, blockType, blockMeta, 2, 2, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); + public void construct(ItemStack stackSize, boolean hintsOnly) { + Structure.builder(shape, blockType, blockMeta, 2, 2, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java index 57ab6d770d..647bbf4a3b 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java @@ -1,9 +1,10 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; +import com.github.technus.tectech.mechanics.constructable.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.Reference; import com.github.technus.tectech.mechanics.dataTransport.InventoryDataPacket; -import com.github.technus.tectech.mechanics.constructible.IConstructable; +import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputDataItems; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_OutputDataItems; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_Container_MultiMachineEM; @@ -28,7 +29,6 @@ import net.minecraft.util.ResourceLocation; import java.util.ArrayList; import static com.github.technus.tectech.util.CommonValues.V; -import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.recipe.TT_recipeAdder.nullItem; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; @@ -170,8 +170,8 @@ public class GT_MetaTileEntity_EM_dataBank extends GT_MetaTileEntity_MultiblockB } @Override - public void construct(int stackSize, boolean hintsOnly) { - StructureBuilderExtreme(shape, blockType, blockMeta, 2, 1, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); + public void construct(ItemStack stackSize, boolean hintsOnly) { + Structure.builder(shape, blockType, blockMeta, 2, 1, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java index ffea7781ee..be28a3d0c8 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java @@ -1,9 +1,10 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; +import com.github.technus.tectech.mechanics.constructable.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; -import com.github.technus.tectech.mechanics.constructible.IConstructable; +import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputElemental; import com.github.technus.tectech.thing.metaTileEntity.multi.base.*; @@ -27,7 +28,6 @@ import net.minecraft.util.EnumChatFormatting; import org.apache.commons.lang3.reflect.FieldUtils; import static com.github.technus.tectech.util.CommonValues.VN; -import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -243,8 +243,8 @@ public class GT_MetaTileEntity_EM_decay extends GT_MetaTileEntity_MultiblockBase } @Override - public void construct(int stackSize, boolean hintsOnly) { - StructureBuilderExtreme(shape, blockType, blockMeta, 2, 2, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); + public void construct(ItemStack stackSize, boolean hintsOnly) { + Structure.builder(shape, blockType, blockMeta, 2, 2, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java index cb13abf358..fed03d1845 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java @@ -1,5 +1,6 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; +import com.github.technus.tectech.mechanics.constructable.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; @@ -7,7 +8,7 @@ import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.iHasElem import com.github.technus.tectech.mechanics.elementalMatter.core.transformations.aOredictDequantizationInfo; import com.github.technus.tectech.mechanics.elementalMatter.core.transformations.iExchangeInfo; import com.github.technus.tectech.thing.block.QuantumGlassBlock; -import com.github.technus.tectech.mechanics.constructible.IConstructable; +import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputElemental; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; @@ -25,7 +26,6 @@ import net.minecraftforge.oredict.OreDictionary; import java.util.ArrayList; import static com.github.technus.tectech.util.CommonValues.V; -import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.mechanics.elementalMatter.core.templates.iElementalDefinition.STABLE_RAW_LIFE_TIME; import static com.github.technus.tectech.mechanics.elementalMatter.definitions.complex.dAtomDefinition.refMass; import static com.github.technus.tectech.mechanics.elementalMatter.definitions.complex.dAtomDefinition.refUnstableMass; @@ -148,8 +148,8 @@ public class GT_MetaTileEntity_EM_dequantizer extends GT_MetaTileEntity_Multiblo } @Override - public void construct(int stackSize, boolean hintsOnly) { - StructureBuilderExtreme(shape, blockType, blockMeta, 1, 1, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); + public void construct(ItemStack stackSize, boolean hintsOnly) { + Structure.builder(shape, blockType, blockMeta, 1, 1, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java index 23a36f0edb..aed3025d4f 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java @@ -1,10 +1,11 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; import cofh.api.energy.IEnergyContainerItem; +import com.github.technus.tectech.mechanics.constructable.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.Reference; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.mechanics.constructible.IConstructable; +import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_Container_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_GUIContainer_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; @@ -22,7 +23,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; -import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -182,8 +182,8 @@ public class GT_MetaTileEntity_EM_infuser extends GT_MetaTileEntity_MultiblockBa } @Override - public void construct(int stackSize, boolean hintsOnly) { - StructureBuilderExtreme(shape, blockType, blockMeta, 1, 2, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); + public void construct(ItemStack stackSize, boolean hintsOnly) { + Structure.builder(shape, blockType, blockMeta, 1, 2, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_junction.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_junction.java index 448f0a5563..8a76ee6ff1 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_junction.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_junction.java @@ -1,7 +1,8 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; +import com.github.technus.tectech.mechanics.constructable.Structure; import com.github.technus.tectech.util.CommonValues; -import com.github.technus.tectech.mechanics.constructible.IConstructable; +import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputElemental; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_OutputElemental; import com.github.technus.tectech.thing.metaTileEntity.multi.base.*; @@ -13,7 +14,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import static com.github.technus.tectech.util.CommonValues.V; -import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.*; @@ -169,8 +169,8 @@ public class GT_MetaTileEntity_EM_junction extends GT_MetaTileEntity_MultiblockB } @Override - public void construct(int stackSize, boolean hintsOnly) { - StructureBuilderExtreme(shape, blockType, blockMeta, 1, 1, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); + public void construct(ItemStack stackSize, boolean hintsOnly) { + Structure.builder(shape, blockType, blockMeta, 1, 1, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java index 4696164979..6315a2f295 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java @@ -1,5 +1,6 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; +import com.github.technus.tectech.mechanics.constructable.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.Reference; import com.github.technus.tectech.TecTech; @@ -11,7 +12,7 @@ import com.github.technus.tectech.mechanics.elementalMatter.core.transformations import com.github.technus.tectech.mechanics.elementalMatter.core.transformations.aOredictQuantizationInfo; import com.github.technus.tectech.mechanics.elementalMatter.core.transformations.bTransformationInfo; import com.github.technus.tectech.thing.block.QuantumGlassBlock; -import com.github.technus.tectech.mechanics.constructible.IConstructable; +import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import cpw.mods.fml.relauncher.Side; @@ -29,7 +30,6 @@ import net.minecraftforge.oredict.OreDictionary; import java.util.ArrayList; import static com.github.technus.tectech.util.CommonValues.V; -import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.util.Util.isInputEqual; import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; import static com.github.technus.tectech.mechanics.elementalMatter.core.templates.iElementalDefinition.DEFAULT_ENERGY_LEVEL; @@ -197,8 +197,8 @@ public class GT_MetaTileEntity_EM_quantizer extends GT_MetaTileEntity_Multiblock } @Override - public void construct(int stackSize, boolean hintsOnly) { - StructureBuilderExtreme(shape, blockType, blockMeta, 1, 1, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); + public void construct(ItemStack stackSize, boolean hintsOnly) { + Structure.builder(shape, blockType, blockMeta, 1, 1, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java index e9bb65c19f..2a739cb6c7 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java @@ -1,8 +1,9 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; +import com.github.technus.tectech.mechanics.constructable.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.recipe.TT_recipe; -import com.github.technus.tectech.mechanics.constructible.IConstructable; +import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Holder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; @@ -37,7 +38,6 @@ import java.util.LinkedHashMap; import static com.github.technus.tectech.util.CommonValues.V; import static com.github.technus.tectech.util.CommonValues.VN; -import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.recipe.TT_recipe.E_RECIPE_ID; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; @@ -552,8 +552,8 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB } @Override - public void construct(int stackSize, boolean hintsOnly) { - StructureBuilderExtreme(shape, blockType, blockMeta, 1, 3, 4, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); + public void construct(ItemStack stackSize, boolean hintsOnly) { + Structure.builder(shape, blockType, blockMeta, 1, 3, 4, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java index be869b2ba9..48479b9d71 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java @@ -1,5 +1,6 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; +import com.github.technus.tectech.mechanics.constructable.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; @@ -11,7 +12,7 @@ import com.github.technus.tectech.thing.CustomItemList; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.thing.block.QuantumStuffBlock; import com.github.technus.tectech.thing.item.ElementalDefinitionScanStorage_EM; -import com.github.technus.tectech.mechanics.constructible.IConstructable; +import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; import com.github.technus.tectech.thing.metaTileEntity.multi.base.*; import gregtech.api.enums.ItemList; @@ -34,7 +35,6 @@ import org.apache.commons.lang3.reflect.FieldUtils; import static com.github.technus.tectech.util.CommonValues.V; import static com.github.technus.tectech.util.CommonValues.VN; -import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.util.Util.areBitsSet; import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; import static com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.cPrimitiveDefinition.nbtE__; @@ -513,8 +513,8 @@ public class GT_MetaTileEntity_EM_scanner extends GT_MetaTileEntity_MultiblockBa } @Override - public void construct(int stackSize, boolean hintsOnly) { - StructureBuilderExtreme(shape, blockType, blockMeta, 2, 2, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); + public void construct(ItemStack stackSize, boolean hintsOnly) { + Structure.builder(shape, blockType, blockMeta, 2, 2, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_stabilizer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_stabilizer.java index 9c88c4ecf3..ece01f7489 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_stabilizer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_stabilizer.java @@ -1,8 +1,9 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; +import com.github.technus.tectech.mechanics.constructable.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.thing.block.QuantumGlassBlock; -import com.github.technus.tectech.mechanics.constructible.IConstructable; +import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; @@ -11,7 +12,6 @@ import net.minecraft.block.Block; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; -import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; import static net.minecraft.util.StatCollector.translateToLocal; @@ -69,8 +69,8 @@ public class GT_MetaTileEntity_EM_stabilizer extends GT_MetaTileEntity_Multibloc } @Override - public void construct(int stackSize, boolean hintsOnly) { - StructureBuilderExtreme(shape, blockType, blockMeta, 2, 2, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); + public void construct(ItemStack stackSize, boolean hintsOnly) { + Structure.builder(shape, blockType, blockMeta, 2, 2, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java index 47949ea36e..39f9441cb7 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java @@ -1,9 +1,10 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; +import com.github.technus.tectech.mechanics.constructable.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.Reference; import com.github.technus.tectech.mechanics.dataTransport.QuantumDataPacket; -import com.github.technus.tectech.mechanics.constructible.IConstructable; +import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputData; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_OutputData; import com.github.technus.tectech.thing.metaTileEntity.multi.base.*; @@ -21,7 +22,6 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; import static com.github.technus.tectech.util.CommonValues.V; -import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -216,8 +216,8 @@ public class GT_MetaTileEntity_EM_switch extends GT_MetaTileEntity_MultiblockBas } @Override - public void construct(int stackSize, boolean hintsOnly) { - StructureBuilderExtreme(shape, blockType, blockMeta, 1, 1, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); + public void construct(ItemStack stackSize, boolean hintsOnly) { + Structure.builder(shape, blockType, blockMeta, 1, 1, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java index 81fd5eb6ad..c2e759e96c 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java @@ -1,8 +1,9 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; +import com.github.technus.tectech.mechanics.constructable.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.Reference; -import com.github.technus.tectech.mechanics.constructible.IConstructable; +import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_Container_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_GUIContainer_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; @@ -20,7 +21,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; -import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -149,8 +149,8 @@ public class GT_MetaTileEntity_EM_transformer extends GT_MetaTileEntity_Multiblo } @Override - public void construct(int stackSize, boolean hintsOnly) { - StructureBuilderExtreme(shape, blockType, blockMeta, 1, 1, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); + public void construct(ItemStack stackSize, boolean hintsOnly) { + Structure.builder(shape, blockType, blockMeta, 1, 1, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_wormhole.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_wormhole.java index 1f9d88e4fd..2b2ebdd1a4 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_wormhole.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_wormhole.java @@ -1,8 +1,9 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; +import com.github.technus.tectech.mechanics.constructable.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.thing.block.QuantumGlassBlock; -import com.github.technus.tectech.mechanics.constructible.IConstructable; +import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; @@ -17,7 +18,6 @@ import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; -import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -104,8 +104,8 @@ public class GT_MetaTileEntity_EM_wormhole extends GT_MetaTileEntity_MultiblockB } @Override - public void construct(int stackSize, boolean hintsOnly) { - StructureBuilderExtreme(shape, blockType, blockMeta, 4, 4, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); + public void construct(ItemStack stackSize, boolean hintsOnly) { + Structure.builder(shape, blockType, blockMeta, 4, 4, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java index 497efd6f71..9c40d6ebc9 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java @@ -1,8 +1,9 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; +import com.github.technus.tectech.mechanics.constructable.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.Reference; -import com.github.technus.tectech.mechanics.constructible.IConstructable; +import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.*; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import com.github.technus.tectech.util.Vec3Impl; @@ -24,7 +25,6 @@ import net.minecraft.util.EnumChatFormatting; import java.util.ArrayList; import java.util.HashSet; -import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.loader.MainLoader.microwaving; import static com.github.technus.tectech.recipe.TT_recipeAdder.nullItem; import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.*; @@ -245,8 +245,8 @@ public class GT_MetaTileEntity_TM_microwave extends GT_MetaTileEntity_Multiblock } @Override - public void construct(int stackSize, boolean hintsOnly) { - StructureBuilderExtreme(shape, blockType, blockMeta, 2, 2, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); + public void construct(ItemStack stackSize, boolean hintsOnly) { + Structure.builder(shape, blockType, blockMeta, 2, 2, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java index bf18a545ef..678f211744 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; import com.github.technus.tectech.util.CommonValues; -import com.github.technus.tectech.mechanics.constructible.IConstructable; +import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_Container_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_GUIContainer_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; @@ -121,7 +121,7 @@ public class GT_MetaTileEntity_TM_proccessingStack extends GT_MetaTileEntity_Mul } @Override - public void construct(int stackSize, boolean hintsOnly) { + public void construct(ItemStack stackSize, boolean hintsOnly) { //StructureBuilderExtreme(shape, blockType, blockMeta, 2, 2, 0, getBaseMetaTileEntity(), this, hintsOnly); } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java index 85ccc5d881..327b54e561 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java @@ -1,5 +1,6 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; +import com.github.technus.tectech.mechanics.constructable.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.loader.NetworkDispatcher; @@ -7,7 +8,7 @@ import com.github.technus.tectech.mechanics.data.RendererMessage; import com.github.technus.tectech.mechanics.data.ThaumSpark; import com.github.technus.tectech.thing.cover.GT_Cover_TM_TeslaCoil; import com.github.technus.tectech.thing.cover.GT_Cover_TM_TeslaCoil_Ultimate; -import com.github.technus.tectech.mechanics.constructible.IConstructable; +import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Capacitor; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DynamoMulti; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; @@ -821,8 +822,8 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock } @Override - public void construct(int stackSize, boolean hintsOnly) { - StructureBuilderExtreme(shape, blockType, blockMetas[(stackSize - 1) % 6], 3, 16, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); + public void construct(ItemStack stackSize, boolean hintsOnly) { + Structure.builder(shape, blockType, blockMetas[(stackSize.stackSize - 1) % 6], 3, 16, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java index 50e2aa575b..2f23aae431 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java @@ -6,6 +6,7 @@ import com.github.technus.tectech.mechanics.alignment.*; import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; import com.github.technus.tectech.mechanics.alignment.enumerable.Flip; import com.github.technus.tectech.mechanics.alignment.enumerable.Rotation; +import com.github.technus.tectech.mechanics.constructable.Structure; import com.github.technus.tectech.util.Util; import com.github.technus.tectech.util.Vec3Impl; import com.github.technus.tectech.loader.NetworkDispatcher; @@ -41,7 +42,6 @@ import net.minecraftforge.fluids.FluidStack; import java.util.ArrayList; import static com.github.technus.tectech.util.CommonValues.*; -import static com.github.technus.tectech.util.Util.StructureCheckerExtreme; import static com.github.technus.tectech.util.Util.getTier; import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; @@ -200,7 +200,7 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt Block[] blockTypeFallback,//use numbers 0-9 for casing types byte[] blockMetaFallback,//use numbers 0-9 for casing types int horizontalOffset, int verticalOffset, int depthOffset) { - return StructureCheckerExtreme(structure, blockType, blockMeta, addingMethods, casingTextures, blockTypeFallback, blockMetaFallback, + return Structure.checker(structure, blockType, blockMeta, addingMethods, casingTextures, blockTypeFallback, blockMetaFallback, horizontalOffset, verticalOffset, depthOffset, getBaseMetaTileEntity(), getExtendedFacing(), !mMachine); } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java index dce8f56ce9..f6f3ec9a63 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java @@ -1,12 +1,13 @@ package com.github.technus.tectech.thing.metaTileEntity.multi.em_machine; +import com.github.technus.tectech.mechanics.constructable.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.util.Util; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.thing.block.QuantumStuffBlock; -import com.github.technus.tectech.mechanics.constructible.IConstructable; +import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.*; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; @@ -21,7 +22,6 @@ import net.minecraftforge.common.util.ForgeDirection; import java.util.HashMap; import java.util.function.Supplier; -import static com.github.technus.tectech.util.Util.StructureBuilderExtreme; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.*; @@ -349,8 +349,8 @@ public class GT_MetaTileEntity_EM_machine extends GT_MetaTileEntity_MultiblockBa } @Override - public void construct(int stackSize, boolean hintsOnly) { - StructureBuilderExtreme(shape, blockType, blockMeta, 2, 2, 1, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); + public void construct(ItemStack stackSize, boolean hintsOnly) { + Structure.builder(shape, blockType, blockMeta, 2, 2, 1, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugStructureWriter.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugStructureWriter.java index f40752bcf5..194d357b1c 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugStructureWriter.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugStructureWriter.java @@ -1,5 +1,6 @@ package com.github.technus.tectech.thing.metaTileEntity.single; +import com.github.technus.tectech.mechanics.constructable.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.util.Util; @@ -20,7 +21,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; -import static com.github.technus.tectech.util.Util.StructureWriter; import static com.github.technus.tectech.thing.metaTileEntity.Textures.MACHINE_CASINGS_TT; import static net.minecraft.util.StatCollector.translateToLocal; @@ -107,7 +107,7 @@ public class GT_MetaTileEntity_DebugStructureWriter extends GT_MetaTileEntity_Ti @Override public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { if (aBaseMetaTileEntity.isAllowedToWork()) { - result = StructureWriter(getBaseMetaTileEntity(), numbers[0], numbers[1], numbers[2], numbers[3], numbers[4], numbers[5], false); + result = Structure.writer(getBaseMetaTileEntity(), numbers[0], numbers[1], numbers[2], numbers[3], numbers[4], numbers[5], false); for (String s : result) { TecTech.LOGGER.info(s); } @@ -117,7 +117,7 @@ public class GT_MetaTileEntity_DebugStructureWriter extends GT_MetaTileEntity_Ti @Override public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) { - result = StructureWriter(getBaseMetaTileEntity(), numbers[0], numbers[1], numbers[2], numbers[3], numbers[4], numbers[5], true); + result = Structure.writer(getBaseMetaTileEntity(), numbers[0], numbers[1], numbers[2], numbers[3], numbers[4], numbers[5], true); for (String s : result) { TecTech.LOGGER.info(s); } diff --git a/src/main/java/com/github/technus/tectech/util/Util.java b/src/main/java/com/github/technus/tectech/util/Util.java index 7e6e177e77..b81506d27c 100644 --- a/src/main/java/com/github/technus/tectech/util/Util.java +++ b/src/main/java/com/github/technus/tectech/util/Util.java @@ -167,528 +167,6 @@ public final class Util { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; } - //Check Machine Structure based on string[][] (effectively char[][][]), ond offset of the controller - //This only checks for REGULAR BLOCKS! - public static boolean StructureCheckerExtreme( - String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR-1 blocks - Block[] blockType,//use numbers 0-9 for casing types - byte[] blockMeta,//use numbers 0-9 for casing types - IHatchAdder[] addingMethods, - short[] casingTextures, - Block[] blockTypeFallback,//use numbers 0-9 for casing types - byte[] blockMetaFallback,//use numbers 0-9 for casing types - int horizontalOffset, int verticalOffset, int depthOffset, - IGregTechTileEntity aBaseMetaTileEntity, - ExtendedFacing extendedFacing, - boolean forceCheck) { - World world = aBaseMetaTileEntity.getWorld(); - if (world.isRemote) { - return false; - } - //TE Rotation - if(extendedFacing==null){ - extendedFacing=ExtendedFacing.of(ForgeDirection.getOrientation(aBaseMetaTileEntity.getFrontFacing())); - } - - IGregTechTileEntity igt; - - int[] xyz =new int[3]; - int[] abc =new int[3]; - int pointer; - int baseX = aBaseMetaTileEntity.getXCoord(), - baseZ = aBaseMetaTileEntity.getZCoord(), - baseY = aBaseMetaTileEntity.getYCoord(); - //a,b,c - relative to block face! - //x,y,z - relative to block position on map! - //yPos - absolute height of checked block - - //perform your duties - abc[2] = -depthOffset; - for (String[] _structure : structure) {//front to back - abc[1] = verticalOffset; - for (String __structure : _structure) {//top to bottom - abc[0] = -horizontalOffset; - for (char block : __structure.toCharArray()) {//left to right - if (block < ' ') {//Control chars allow skipping - abc[1] -= block; - break; - } else if (block > '@') {//characters allow to skip check A-1 skip, B-2 skips etc. - abc[0] += block - '@'; - }//else if (block < '+')//used to mark THINGS - // a++; - else if (block == '.') { - abc[0]++; - } else { - //get x y z from rotation - extendedFacing.getWorldOffset(abc,xyz); - xyz[0]+=baseX; - xyz[1]+=baseY; - xyz[2]+=baseZ; - - //that must be here since in some cases other axis (b,c) controls y - if (xyz[1] < 0 || xyz[1] >= 256) { - return false; - } - - //Check block - if (world.blockExists(xyz[0], xyz[1], xyz[2])) {//this actually checks if the chunk is loaded at this pos - switch (block) { - case '-'://must be air - if (world.getBlock(xyz[0], xyz[1], xyz[2]).getMaterial() != Material.air) { - return false; - } - break; - case '+'://must not be air - if (world.getBlock(xyz[0], xyz[1], xyz[2]).getMaterial() == Material.air) { - return false; - } - break; - default://check for block (countable) - if ((pointer = block - '0') >= 0) { - //countable air -> net.minecraft.block.BlockAir - if (world.getBlock(xyz[0], xyz[1], xyz[2]) != blockType[pointer]) { - if (DEBUG_MODE) { - TecTech.LOGGER.info("Struct-block-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + world.getBlock(xyz[0], xyz[1], xyz[2]).getUnlocalizedName() + ' ' + blockType[pointer].getUnlocalizedName()); - } - return false; - } - if (world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) != blockMeta[pointer]) { - if (DEBUG_MODE) { - TecTech.LOGGER.info("Struct-meta-id-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) + ' ' + blockMeta[pointer]); - } - return false; - } - } else //noinspection ConstantConditions - if ((pointer = block - ' ') >= 0) { - igt = aBaseMetaTileEntity.getIGregTechTileEntity(xyz[0], xyz[1], xyz[2]); - if (igt == null || !addingMethods[pointer].apply(igt, casingTextures[pointer])) { - if (world.getBlock(xyz[0], xyz[1], xyz[2]) != blockTypeFallback[pointer]) { - if (DEBUG_MODE) { - TecTech.LOGGER.info("Fallback-struct-block-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + world.getBlock(xyz[0], xyz[1], xyz[2]).getUnlocalizedName() + ' ' + (blockTypeFallback[pointer] == null ? "null" : blockTypeFallback[pointer].getUnlocalizedName())); - } - return false; - } - if (world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) != blockMetaFallback[pointer]) { - if (DEBUG_MODE) { - TecTech.LOGGER.info("Fallback-Struct-meta-id-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) + ' ' + blockMetaFallback[pointer]); - } - return false; - } - } - } - } - } else if (forceCheck) { - return false; - } - abc[0]++;//block in horizontal layer - } - } - abc[1]--;//horizontal layer - } - abc[2]++;//depth - } - return true; - } - - public static boolean StructureBuilder(String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR+1 blocks - Block[] blockType,//use numbers 0-9 for casing types - byte[] blockMeta,//use numbers 0-9 for casing types - int horizontalOffset, int verticalOffset, int depthOffset, - IGregTechTileEntity aBaseMetaTileEntity, boolean hintsOnly) { - byte facing = aBaseMetaTileEntity.getFrontFacing(); - return StructureBuilderExtreme(structure, blockType, blockMeta, - horizontalOffset, verticalOffset, depthOffset, - aBaseMetaTileEntity.getWorld().getTileEntity(aBaseMetaTileEntity.getXCoord(), aBaseMetaTileEntity.getYCoord(), aBaseMetaTileEntity.getZCoord()), null, - facing, hintsOnly); - } - - public static boolean StructureBuilderExtreme(String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR+1 blocks - Block[] blockType,//use numbers 0-9 for casing types - byte[] blockMeta,//use numbers 0-9 for casing types - int horizontalOffset, int verticalOffset, int depthOffset, - IGregTechTileEntity aBaseMetaTileEntity, ExtendedFacing extendedFacing, boolean hintsOnly) { - byte facing = aBaseMetaTileEntity.getFrontFacing(); - return StructureBuilderExtreme(structure, blockType, blockMeta, - horizontalOffset, verticalOffset, depthOffset, - aBaseMetaTileEntity.getWorld().getTileEntity(aBaseMetaTileEntity.getXCoord(), aBaseMetaTileEntity.getYCoord(), aBaseMetaTileEntity.getZCoord()), extendedFacing, - facing, hintsOnly); - } - - public static boolean StructureBuilder(String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR+1 blocks - Block[] blockType,//use numbers 0-9 for casing types - byte[] blockMeta,//use numbers 0-9 for casing types - int horizontalOffset, int verticalOffset, int depthOffset, - TileEntity tileEntity, int facing, boolean hintsOnly) { - return StructureBuilderExtreme(structure, blockType, blockMeta, horizontalOffset, verticalOffset, depthOffset, tileEntity, null, facing, hintsOnly); - } - - public static boolean StructureBuilderExtreme(String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR+1 blocks - Block[] blockType,//use numbers 0-9 for casing types - byte[] blockMeta,//use numbers 0-9 for casing types - int horizontalOffset, int verticalOffset, int depthOffset, - TileEntity tileEntity, ExtendedFacing extendedFacing, int simpleFacing, boolean hintsOnly) { - if (!tileEntity.hasWorldObj()) { - return false; - } - World world = tileEntity.getWorldObj(); - if (!world.isRemote && hintsOnly) { - return false; - } - - //TE Rotation - int[] xyz =new int[3]; - int[] abc =new int[3]; - int pointer; - int - baseX = tileEntity.xCoord, - baseZ = tileEntity.zCoord, - baseY = tileEntity.yCoord; - //a,b,c - relative to block face! - //x,y,z - relative to block position on map! - if (extendedFacing == null) { - extendedFacing=ExtendedFacing.of(ForgeDirection.getOrientation(simpleFacing)); - } - - //perform your duties - abc[2] = -depthOffset; - for (String[] _structure : structure) {//front to back - abc[1] = verticalOffset; - for (String __structure : _structure) {//top to bottom - abc[0] = -horizontalOffset; - for (char block : __structure.toCharArray()) {//left to right - if (block < ' ') {//Control chars allow skipping - abc[1] -= block; - break; - } - if (block > '@')//characters allow to skip check a-1 skip, b-2 skips etc. - { - abc[0] += block - '@'; - }//else if (block < '+')//used to mark THINGS - // a++; - else if (block == '.')// this TE - { - abc[0]++; - } else { - //get x y z from rotation - extendedFacing.getWorldOffset(abc,xyz); - xyz[0]+=baseX; - xyz[1]+=baseY; - xyz[2]+=baseZ; - - //that must be here since in some cases other axis (b,c) controls y - if (xyz[1] < 0 || xyz[1] >= 256) { - return false; - } - - //Check block - if (world.blockExists(xyz[0], xyz[1], xyz[2])) {//this actually checks if the chunk is loaded - if (hintsOnly) { - switch (block) { - case '-'://must be air - TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, 13); - break; - case '+'://must not be air - TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, 14); - break; - default: //check for block - if ((pointer = block - '0') >= 0) { - if (world.getBlock(xyz[0], xyz[1], xyz[2]) != blockType[pointer] || world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) != blockMeta[pointer]) { - TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], blockType[pointer], blockMeta[pointer]); - } - } else if ((pointer = block - ' ') >= 0) { - if (pointer >= 0 && pointer < 12) { - TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, pointer); - } else { - TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, 12); - } - } else { - TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, 15); - } - } - } else { - switch (block) { - case '-'://must be air - world.setBlock(xyz[0], xyz[1], xyz[2], Blocks.air, 0, 2); - break; - case '+'://must not be air - world.setBlock(xyz[0], xyz[1], xyz[2], TT_Container_Casings.sBlockCasingsTT, 14, 2); - break; - default: //check for block - if ((pointer = block - '0') >= 0) { - world.setBlock(xyz[0], xyz[1], xyz[2], blockType[pointer], blockMeta[pointer], 2); - } else if (block - ' ' < 0) { - world.setBlock(xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, 15, 2); - } //else { - //switch(pointer){ - // case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: - // world.setBlock(x, y, z, TT_Container_Casings.sHintCasingsTT, pointer, 2); break; - // default:world.setBlock(x, y, z, TT_Container_Casings.sHintCasingsTT, 12, 2); - //} - //} - } - } - } - abc[0]++;//block in horizontal layer - } - } - abc[1]--;//horizontal layer - } - abc[2]++;//depth - } - return true; - } - - - public static String[] StructureWriter(IGregTechTileEntity aBaseMetaTileEntity, - int horizontalOffset, int verticalOffset, int depthOffset, - int horizontalSize, int verticalSize, int depthSize, boolean ignoreAir) { - //TE Rotation - byte facing = aBaseMetaTileEntity.getFrontFacing(); - World world = aBaseMetaTileEntity.getWorld(); - if (world.isRemote) { - return new String[]{"Not at Client m8"}; - } - - ItemStack[] array = new ItemStack[10]; - - int x, y, z, a, b, c; - int - baseX = aBaseMetaTileEntity.getXCoord(), - baseZ = aBaseMetaTileEntity.getZCoord(), - baseY = aBaseMetaTileEntity.getYCoord(); - //a,b,c - relative to block face! - //x,y,z - relative to block position on map! - //yPos - absolute height of checked block - - //perform your duties - #1 - count block types - c = -depthOffset; - for (int cz = 0; cz < depthSize; cz++) {//front to back - b = verticalOffset; - for (int by = 0; by < verticalSize; by++) {//top to bottom - a = -horizontalOffset; - for (int az = 0; az < horizontalSize; az++) {//left to right - //get x y z from rotation - switch (facing) {//translation - case 4: - x = baseX + c; - z = baseZ + a; - y = baseY + b; - break; - case 3: - x = baseX + a; - z = baseZ - c; - y = baseY + b; - break; - case 5: - x = baseX - c; - z = baseZ - a; - y = baseY + b; - break; - case 2: - x = baseX - a; - z = baseZ + c; - y = baseY + b; - break; - //Things get odd if the block faces up or down... - case 1: - x = baseX + a; - z = baseZ + b; - y = baseY - c; - break;//similar to 3 - case 0: - x = baseX - a; - z = baseZ - b; - y = baseY + c; - break;//similar to 2 - default: - return new String[]{"Invalid rotation"}; - } - - //that must be here since in some cases other axis (b,c) controls y - if (y < 0 || y >= 256) { - return new String[]{"Invalid position"}; - } - - //Check block - Block block = world.getBlock(x, y, z); - int meta = world.getBlockMetadata(x, y, z); - - if (!block.hasTileEntity(meta) && block.getMaterial() != Material.air) { - boolean err = true; - ItemStack is = new ItemStack(block, 1, meta); - for (int i = 0; i < array.length; i++) { - if (array[i] == null) { - array[i] = is; - err = false; - break; - } else if (is.getItem() == array[i].getItem() && is.getItemDamage() == array[i].getItemDamage()) { - err = false; - break; - } - } - if (err) { - return new String[]{"Too much different blocks"}; - } - } - - a++;//block in horizontal layer - } - b--;//horizontal layer - } - c++;//depth - } - - List output = new ArrayList<>(); - - output.add("Offsets: " + horizontalOffset + ' ' + verticalOffset + ' ' + depthOffset); - output.add("Sizes: " + horizontalSize + ' ' + verticalSize + ' ' + depthSize); - output.add(""); - - output.add("ID[]: Name[]"); - output.add(""); - for (int i = 0; i < array.length; i++) { - if (array[i] != null) { - output.add(i + ": " + array[i].getDisplayName()); - } - } - output.add(""); - output.add("ID[]: Block[] BlockMetaID[]"); - output.add(""); - for (int i = 0; i < array.length; i++) { - if (array[i] != null) { - output.add(i + ": " + array[i].getItem().getUnlocalizedName() + ' ' + array[i].getItemDamage()); - } - } - output.add(""); - output.add("String[][]"); - //perform your duties - #2 - write strings - output.add("{"); - c = -depthOffset; - for (int cz = 0; cz < depthSize; cz++) {//front to back - b = verticalOffset; - StringBuilder addMe = new StringBuilder().append('{'); - for (int by = 0; by < verticalSize; by++) {//top to bottom - a = -horizontalOffset; - StringBuilder line = new StringBuilder(); - for (int az = 0; az < horizontalSize; az++) {//left to right - //get x y z from rotation - switch (facing) {//translation - case 4: - x = baseX + c; - z = baseZ + a; - y = baseY + b; - break; - case 3: - x = baseX + a; - z = baseZ - c; - y = baseY + b; - break; - case 5: - x = baseX - c; - z = baseZ - a; - y = baseY + b; - break; - case 2: - x = baseX - a; - z = baseZ + c; - y = baseY + b; - break; - //Things get odd if the block faces up or down... - case 1: - x = baseX + a; - z = baseZ + b; - y = baseY - c; - break;//similar to 3 - case 0: - x = baseX - a; - z = baseZ - b; - y = baseY + c; - break;//similar to 2 - default: - return new String[]{"Invalid rotation"}; - } - - //Check block - Block block = world.getBlock(x, y, z); - int meta = world.getBlockMetadata(x, y, z); - - if (a == 0 && b == 0 && c == 0) { - line.append('.'); - } else if (block.getMaterial() == Material.air) { - line.append('-'); - } else if (block.hasTileEntity(meta)) { - line.append('*'); - } else { - ItemStack stack = new ItemStack(block, 1, meta); - String str = "?";//OH YEAH NPEs - for (int i = 0; i < array.length; i++) { - if (array[i] != null && stack.getItem() == array[i].getItem() && stack.getItemDamage() == array[i].getItemDamage()) { - str = Integer.toString(i); - break; - } - } - line.append(str); - } - a++;//block in horizontal layer - } - if (ignoreAir) { - StringBuilder builder = new StringBuilder(); - char temp = '@'; - for (char ch : line.toString().toCharArray()) { - if (ch == '-') { - temp += 1; - if (temp == '~') { - builder.append('~'); - temp = '@'; - } - } else { - if (temp > '@') { - builder.append(temp); - temp = '@'; - } - builder.append(ch); - } - } - while (builder.length() > 0 && builder.charAt(builder.length() - 1) == '~') { - builder.deleteCharAt(builder.length() - 1); - } - if (builder.length() == 0) { - builder.append("E,"); - } else { - builder.insert(0, '"'); - builder.append('"').append(','); - } - addMe.append(builder); - } else { - if (line.length() == 0) { - line.append("E,"); - } else { - line.insert(0, '"'); - line.append('"').append(','); - } - addMe.append(line); - } - b--;//horizontal layer - } - //region less verbose - addMe.append('}').append(','); - String builtStr = addMe.toString().replaceAll("(E,)+(?=})", E/*Remove Empty strings at end*/); - Matcher matcher = matchE_.matcher(builtStr); - while (matcher.find()) { - byte lenEE = (byte) (matcher.group(1).length() >> 1); - builtStr = builtStr.replaceFirst("E,(E,)+", "\"\\\\u00" + String.format("%02X", lenEE - 1) + "\","); - //builtStr=builtStr.replaceFirst("E,(E,)+\"","\"\\\\u00"+String.format("%02X", lenEE)); - } - //endregion - output.add(builtStr); - c++;//depth - } - output.add("}"); - return output.toArray(new String[0]); - } - - private static final Pattern matchE_ = Pattern.compile("(E,(E,)+)"); - public static boolean isInputEqual(boolean aDecreaseStacksizeBySuccess, boolean aDontCheckStackSizes, FluidStack[] requiredFluidInputs, ItemStack[] requiredInputs, FluidStack[] givenFluidInputs, ItemStack... givenInputs) { if (!GregTech_API.sPostloadFinished) { return false; -- cgit From dbf60f779468c195fd094e1f3057b09753979262 Mon Sep 17 00:00:00 2001 From: Tec Date: Mon, 20 Apr 2020 17:21:26 +0200 Subject: run this loader --- src/main/java/com/github/technus/tectech/loader/MainLoader.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/github/technus/tectech/loader/MainLoader.java b/src/main/java/com/github/technus/tectech/loader/MainLoader.java index f7bec9adc0..f8fbcda2da 100644 --- a/src/main/java/com/github/technus/tectech/loader/MainLoader.java +++ b/src/main/java/com/github/technus/tectech/loader/MainLoader.java @@ -121,7 +121,7 @@ public final class MainLoader { } public static void postLoad() { - ProgressManager.ProgressBar progressBarPostLoad = ProgressManager.push("TecTech Post Loader", 5); + ProgressManager.ProgressBar progressBarPostLoad = ProgressManager.push("TecTech Post Loader", 6); progressBarPostLoad.step("Dreamcraft Compatibility"); if(Loader.isModLoaded(Reference.DREAMCRAFT)){ @@ -157,6 +157,10 @@ public final class MainLoader { fixBlocks(); TecTech.LOGGER.info("Blocks nerf done"); + progressBarPostLoad.step("Initialize more constructable stuff"); + new ConstructableLoader().run(); + TecTech.LOGGER.info("Constructable initialized"); + ProgressManager.pop(progressBarPostLoad); } -- cgit From 1899aad0102fec9cc0312b59ed3bc1687447a4bb Mon Sep 17 00:00:00 2001 From: Tec Date: Mon, 20 Apr 2020 17:24:17 +0200 Subject: untrack those --- Baubles-1.7.10-1.0.1.10.jar | Bin 95415 -> 0 bytes EnderCore-1.7.10-0.2.0.39_beta.jar | Bin 467824 -> 0 bytes EnderIO-1.7.10-2.3.0.429_beta.jar | Bin 4756103 -> 0 bytes GalacticraftCore-Dev-1.7-3.0.12.504.jar | Bin 10419213 -> 0 bytes libs/AsieLib-1.7.10-0.4.9-deobf.jar | Bin 154691 -> 0 bytes libs/Computronics-1.7.10-1.6.6-deobf.jar | Bin 1143582 -> 0 bytes libs/GT-PlusPlus-1.7.0-prerelease-8-final.jar | Bin 4458558 -> 0 bytes libs/GTNewHorizonsCoreMod-1.7.10-1.6.10.jar | Bin 3425453 -> 0 bytes libs/Galacticraft-API-1.7-3.0.12.504.jar | Bin 119588 -> 0 bytes libs/MicdoodleCore-1.7-3.0.12.504.jar | Bin 64945 -> 0 bytes libs/OpenModularTurrets-1.7.10-2.2.10-237-deobf.jar | Bin 988221 -> 0 bytes libs/worldedit-forge-mc1.7.10-6.1.1-dist.jar | Bin 1461467 -> 0 bytes 12 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Baubles-1.7.10-1.0.1.10.jar delete mode 100644 EnderCore-1.7.10-0.2.0.39_beta.jar delete mode 100644 EnderIO-1.7.10-2.3.0.429_beta.jar delete mode 100644 GalacticraftCore-Dev-1.7-3.0.12.504.jar delete mode 100644 libs/AsieLib-1.7.10-0.4.9-deobf.jar delete mode 100644 libs/Computronics-1.7.10-1.6.6-deobf.jar delete mode 100644 libs/GT-PlusPlus-1.7.0-prerelease-8-final.jar delete mode 100644 libs/GTNewHorizonsCoreMod-1.7.10-1.6.10.jar delete mode 100644 libs/Galacticraft-API-1.7-3.0.12.504.jar delete mode 100644 libs/MicdoodleCore-1.7-3.0.12.504.jar delete mode 100644 libs/OpenModularTurrets-1.7.10-2.2.10-237-deobf.jar delete mode 100644 libs/worldedit-forge-mc1.7.10-6.1.1-dist.jar diff --git a/Baubles-1.7.10-1.0.1.10.jar b/Baubles-1.7.10-1.0.1.10.jar deleted file mode 100644 index 40f23088c7..0000000000 Binary files a/Baubles-1.7.10-1.0.1.10.jar and /dev/null differ diff --git a/EnderCore-1.7.10-0.2.0.39_beta.jar b/EnderCore-1.7.10-0.2.0.39_beta.jar deleted file mode 100644 index 1fdf703497..0000000000 Binary files a/EnderCore-1.7.10-0.2.0.39_beta.jar and /dev/null differ diff --git a/EnderIO-1.7.10-2.3.0.429_beta.jar b/EnderIO-1.7.10-2.3.0.429_beta.jar deleted file mode 100644 index 9be1d55c41..0000000000 Binary files a/EnderIO-1.7.10-2.3.0.429_beta.jar and /dev/null differ diff --git a/GalacticraftCore-Dev-1.7-3.0.12.504.jar b/GalacticraftCore-Dev-1.7-3.0.12.504.jar deleted file mode 100644 index 329f7ae19b..0000000000 Binary files a/GalacticraftCore-Dev-1.7-3.0.12.504.jar and /dev/null differ diff --git a/libs/AsieLib-1.7.10-0.4.9-deobf.jar b/libs/AsieLib-1.7.10-0.4.9-deobf.jar deleted file mode 100644 index 78d4f64b4a..0000000000 Binary files a/libs/AsieLib-1.7.10-0.4.9-deobf.jar and /dev/null differ diff --git a/libs/Computronics-1.7.10-1.6.6-deobf.jar b/libs/Computronics-1.7.10-1.6.6-deobf.jar deleted file mode 100644 index e6f5b07a69..0000000000 Binary files a/libs/Computronics-1.7.10-1.6.6-deobf.jar and /dev/null differ diff --git a/libs/GT-PlusPlus-1.7.0-prerelease-8-final.jar b/libs/GT-PlusPlus-1.7.0-prerelease-8-final.jar deleted file mode 100644 index 181475fc38..0000000000 Binary files a/libs/GT-PlusPlus-1.7.0-prerelease-8-final.jar and /dev/null differ diff --git a/libs/GTNewHorizonsCoreMod-1.7.10-1.6.10.jar b/libs/GTNewHorizonsCoreMod-1.7.10-1.6.10.jar deleted file mode 100644 index b579b93cc6..0000000000 Binary files a/libs/GTNewHorizonsCoreMod-1.7.10-1.6.10.jar and /dev/null differ diff --git a/libs/Galacticraft-API-1.7-3.0.12.504.jar b/libs/Galacticraft-API-1.7-3.0.12.504.jar deleted file mode 100644 index 6935478027..0000000000 Binary files a/libs/Galacticraft-API-1.7-3.0.12.504.jar and /dev/null differ diff --git a/libs/MicdoodleCore-1.7-3.0.12.504.jar b/libs/MicdoodleCore-1.7-3.0.12.504.jar deleted file mode 100644 index b678294b0d..0000000000 Binary files a/libs/MicdoodleCore-1.7-3.0.12.504.jar and /dev/null differ diff --git a/libs/OpenModularTurrets-1.7.10-2.2.10-237-deobf.jar b/libs/OpenModularTurrets-1.7.10-2.2.10-237-deobf.jar deleted file mode 100644 index e854bf7df9..0000000000 Binary files a/libs/OpenModularTurrets-1.7.10-2.2.10-237-deobf.jar and /dev/null differ diff --git a/libs/worldedit-forge-mc1.7.10-6.1.1-dist.jar b/libs/worldedit-forge-mc1.7.10-6.1.1-dist.jar deleted file mode 100644 index 0361359748..0000000000 Binary files a/libs/worldedit-forge-mc1.7.10-6.1.1-dist.jar and /dev/null differ -- cgit From bd8530d9043b1c873bd0a52e55911069a126bb88 Mon Sep 17 00:00:00 2001 From: Tec Date: Mon, 20 Apr 2020 17:29:15 +0200 Subject: This need to exist --- libs/GT-PlusPlus-1.7.0-prerelease-8-final.jar | Bin 0 -> 4458558 bytes libs/OpenModularTurrets-1.7.10-2.2.10-237-deobf.jar | Bin 0 -> 988221 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 libs/GT-PlusPlus-1.7.0-prerelease-8-final.jar create mode 100644 libs/OpenModularTurrets-1.7.10-2.2.10-237-deobf.jar diff --git a/libs/GT-PlusPlus-1.7.0-prerelease-8-final.jar b/libs/GT-PlusPlus-1.7.0-prerelease-8-final.jar new file mode 100644 index 0000000000..181475fc38 Binary files /dev/null and b/libs/GT-PlusPlus-1.7.0-prerelease-8-final.jar differ diff --git a/libs/OpenModularTurrets-1.7.10-2.2.10-237-deobf.jar b/libs/OpenModularTurrets-1.7.10-2.2.10-237-deobf.jar new file mode 100644 index 0000000000..e854bf7df9 Binary files /dev/null and b/libs/OpenModularTurrets-1.7.10-2.2.10-237-deobf.jar differ -- cgit From 5dc7c8557880c55e6ee4d63150a24d24bc1529ac Mon Sep 17 00:00:00 2001 From: Tec Date: Mon, 20 Apr 2020 17:29:40 +0200 Subject: ignore that --- .gitignore | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.gitignore b/.gitignore index e97facd823..02507f643c 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,9 @@ GregTech.lang mods/ classes/ logs/ +libs/AsieLib-1.7.10-0.4.9-deobf.jar +libs/Computronics-1.7.10-1.6.6-deobf.jar +libs/Galacticraft-API-1.7-3.0.12.504.jar +libs/GTNewHorizonsCoreMod-1.7.10-1.6.10.jar +libs/MicdoodleCore-1.7-3.0.12.504.jar +libs/worldedit-forge-mc1.7.10-6.1.1-dist.jar -- cgit From 8f03f87dcf3ee70ff9d1cd6e7d496a4aab9fc0c1 Mon Sep 17 00:00:00 2001 From: Tec Date: Mon, 20 Apr 2020 17:44:52 +0200 Subject: that spacebar... --- .../java/com/github/technus/tectech/loader/ConstructableLoader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/github/technus/tectech/loader/ConstructableLoader.java b/src/main/java/com/github/technus/tectech/loader/ConstructableLoader.java index 2dc56754f8..93752cc02f 100644 --- a/src/main/java/com/github/technus/tectech/loader/ConstructableLoader.java +++ b/src/main/java/com/github/technus/tectech/loader/ConstructableLoader.java @@ -16,7 +16,7 @@ public class ConstructableLoader implements Runnable { @Override public void run() { - registerMetaClass(GT_MetaTileEntity_ElectricBlastFurnace .class, new IMultiblockInfoContainer() { + registerMetaClass(GT_MetaTileEntity_ElectricBlastFurnace.class, new IMultiblockInfoContainer() { //region Structure private final String[][] shape = new String[][]{ {"000","\"\"\"","\"\"\""," . ",}, -- cgit From 06ba23f08d8a1694c102a4ccd44a562a95a3f76f Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Sat, 25 Apr 2020 07:49:42 +0200 Subject: compat for new advanced smd parts (#27) If you just edit DreamCraft recipe loader you can push yourself @Dream-Master --- build.properties | 4 +- .../dreamcraft/DreamCraftRecipeLoader.java | 52 +++++++++++----------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/build.properties b/build.properties index 8dd601eb38..c75d05a3da 100644 --- a/build.properties +++ b/build.properties @@ -6,8 +6,8 @@ ic2.version=2.2.790-experimental codechickenlib.version=1.1.3.140 codechickencore.version=1.0.7.47 nei.version=1.0.5.120 -gregtech.jenkinsbuild=512 -gregtech.version=5.09.33.41 +gregtech.jenkinsbuild=520 +gregtech.version=5.09.33.42-Test cofhcore.version=[1.7.10]3.1.4-329-dev yamcore.version=0.5.79 baubles.version=1.0.1.10 diff --git a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java index 86468de1b2..b863e35901 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java +++ b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java @@ -971,10 +971,10 @@ public class DreamCraftRecipeLoader implements Runnable { GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Tritanium, 2), ItemList.Circuit_Wetwaresupercomputer.get(2L), ItemList.ZPM_Coil.get(16L), - ItemList.Circuit_Parts_CapacitorSMD.get(64L), - ItemList.Circuit_Parts_ResistorSMD.get(64L), - ItemList.Circuit_Parts_TransistorSMD.get(64L), - ItemList.Circuit_Parts_DiodeSMD.get(64L), + ItemList.Circuit_Parts_CapacitorASMD.get(16L), + ItemList.Circuit_Parts_ResistorASMD.get(16L), + ItemList.Circuit_Parts_TransistorASMD.get(16L), + ItemList.Circuit_Parts_DiodeASMD.get(16L), ItemList.Circuit_Chip_Ram.get(48L), GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorZPM, 64L), GT_OreDictUnificator.get(OrePrefixes.foil, (Materials.AnySyntheticRubber), 64L), @@ -989,10 +989,10 @@ public class DreamCraftRecipeLoader implements Runnable { 48000, 128, 500000, 8, new ItemStack[]{ ItemList.Circuit_Board_Bio_Ultra.get(2L), ItemList.Circuit_Biowarecomputer.get(2L), - ItemList.Circuit_Parts_TransistorSMD.get(16L), - ItemList.Circuit_Parts_ResistorSMD.get(16L), - ItemList.Circuit_Parts_CapacitorSMD.get(16L), - ItemList.Circuit_Parts_DiodeSMD.get(48L), + ItemList.Circuit_Parts_TransistorASMD.get(16L), + ItemList.Circuit_Parts_ResistorASMD.get(16L), + ItemList.Circuit_Parts_CapacitorASMD.get(16L), + ItemList.Circuit_Parts_DiodeASMD.get(16L), ItemList.Circuit_Chip_NOR.get(32L), ItemList.Circuit_Chip_Ram.get(64L), GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.NiobiumTitanium, 32L), @@ -1009,10 +1009,10 @@ public class DreamCraftRecipeLoader implements Runnable { GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Tritanium, 4L), ItemList.Circuit_Biowaresupercomputer.get(2L), ItemList.UV_Coil.get(16L), - ItemList.Circuit_Parts_CapacitorSMD.get(64L), - ItemList.Circuit_Parts_ResistorSMD.get(64L), - ItemList.Circuit_Parts_TransistorSMD.get(64L), - ItemList.Circuit_Parts_DiodeSMD.get(64L), + ItemList.Circuit_Parts_CapacitorASMD.get(24L), + ItemList.Circuit_Parts_ResistorASMD.get(24L), + ItemList.Circuit_Parts_TransistorASMD.get(24L), + ItemList.Circuit_Parts_DiodeASMD.get(24L), ItemList.Circuit_Chip_Ram.get(64L), GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUHV, 64), GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Silicone, 64), @@ -1028,10 +1028,10 @@ public class DreamCraftRecipeLoader implements Runnable { 192000, 512, 2000000, 32, new ItemStack[]{ GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Tritanium, 8), ItemList.Circuit_Biomainframe.get(2L), - ItemList.Circuit_Parts_CapacitorSMD.get(64L), - ItemList.Circuit_Parts_ResistorSMD.get(64L), - ItemList.Circuit_Parts_TransistorSMD.get(64L), - ItemList.Circuit_Parts_DiodeSMD.get(64L), + ItemList.Circuit_Parts_CapacitorASMD.get(32L), + ItemList.Circuit_Parts_ResistorASMD.get(32L), + ItemList.Circuit_Parts_TransistorASMD.get(32L), + ItemList.Circuit_Parts_DiodeASMD.get(32L), ItemList.Circuit_Chip_Ram.get(64L), ItemList.Circuit_Chip_NPIC.get(64L), GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Draconium, 64), @@ -1050,10 +1050,10 @@ public class DreamCraftRecipeLoader implements Runnable { ItemList.Circuit_Board_Bio_Ultra.get(1L), getItemContainer("PicoWafer").get(4L), getItemContainer("NanoCircuit").get(2L), - ItemList.Circuit_Parts_TransistorSMD.get(64L), - ItemList.Circuit_Parts_ResistorSMD.get(64L), - ItemList.Circuit_Parts_CapacitorSMD.get(64L), - ItemList.Circuit_Parts_DiodeSMD.get(64L), + ItemList.Circuit_Parts_TransistorASMD.get(484L), + ItemList.Circuit_Parts_ResistorASMD.get(48L), + ItemList.Circuit_Parts_CapacitorASMD.get(48L), + ItemList.Circuit_Parts_DiodeASMD.get(48L), ItemList.Circuit_Chip_PPIC.get(64L), GT_OreDictUnificator.get(OrePrefixes.foil, Materials.NiobiumTitanium, 16), GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.Osmium, 32), @@ -1069,10 +1069,10 @@ public class DreamCraftRecipeLoader implements Runnable { 720000, 2048, 8000000, 128, new ItemStack[]{ GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Neutronium, 16), getItemContainer("PikoCircuit").get(8L), - ItemList.Circuit_Parts_CapacitorSMD.get(64L), - ItemList.Circuit_Parts_DiodeSMD.get(64L), - ItemList.Circuit_Parts_TransistorSMD.get(64L), - ItemList.Circuit_Parts_ResistorSMD.get(64L), + ItemList.Circuit_Parts_CapacitorASMD.get(64L), + ItemList.Circuit_Parts_DiodeASMD.get(64L), + ItemList.Circuit_Parts_TransistorASMD.get(64L), + ItemList.Circuit_Parts_ResistorASMD.get(64L), ItemList.Circuit_Chip_QPIC.get(64L), GT_OreDictUnificator.get(OrePrefixes.foil, Materials.NiobiumTitanium, 64), GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.Indium, 64), @@ -1153,7 +1153,7 @@ public class DreamCraftRecipeLoader implements Runnable { ItemList.Field_Generator_UV.get(2), ItemList.Circuit_Wafer_HPIC.get(64), ItemList.Circuit_Wafer_HPIC.get(64), - ItemList.Circuit_Parts_DiodeSMD.get(64), + ItemList.Circuit_Parts_DiodeASMD.get(32), GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUHV, 32), }, new FluidStack[]{ Materials.SolderingAlloy.getMolten(2880), @@ -1172,7 +1172,7 @@ public class DreamCraftRecipeLoader implements Runnable { ItemList.Circuit_Wafer_UHPIC.get(64), ItemList.Circuit_Wafer_UHPIC.get(64), ItemList.Circuit_Wafer_SoC2.get(32), - ItemList.Circuit_Parts_DiodeSMD.get(64), + ItemList.Circuit_Parts_DiodeASMD.get(64), GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.Neutronium, 64), }, new FluidStack[]{ Materials.SolderingAlloy.getMolten(3760), -- cgit From 2254062705725663f6b50ebd11dcd4ac8b5d1431 Mon Sep 17 00:00:00 2001 From: Tec Date: Sat, 25 Apr 2020 23:12:49 +0200 Subject: new structure api --- .../GT_MetaTileEntity_EM_essentiaDequantizer.java | 6 +- .../GT_MetaTileEntity_EM_essentiaQuantizer.java | 6 +- .../tectech/loader/ConstructableLoader.java | 4 +- .../alignment/enumerable/ExtendedFacing.java | 17 +- .../mechanics/constructable/IConstructable.java | 2 +- .../constructable/IMultiblockInfoContainer.java | 2 +- .../tectech/mechanics/constructable/Structure.java | 526 --------------------- .../tectech/mechanics/structure/IBlockAdder.java | 14 + .../mechanics/structure/IBlockPosConsumer.java | 7 + .../tectech/mechanics/structure/IHatchAdder.java | 14 + .../mechanics/structure/IStructureDefinition.java | 137 ++++++ .../mechanics/structure/IStructureElement.java | 47 ++ .../structure/IStructureElementProvider.java | 5 + .../mechanics/structure/IStructureFallback.java | 40 ++ .../structure/IStructureFallbackProvider.java | 40 ++ .../mechanics/structure/IStructureNavigate.java | 23 + .../tectech/mechanics/structure/ITileAdder.java | 12 + .../tectech/mechanics/structure/Structure.java | 265 +++++++++++ .../mechanics/structure/StructureDefinition.java | 170 +++++++ .../mechanics/structure/StructureUtility.java | 469 ++++++++++++++++++ .../thing/item/ConstructableTriggerItem.java | 13 +- .../multi/GT_MetaTileEntity_EM_annihilation.java | 6 +- .../multi/GT_MetaTileEntity_EM_bhg.java | 6 +- .../multi/GT_MetaTileEntity_EM_collider.java | 5 +- .../multi/GT_MetaTileEntity_EM_computer.java | 5 +- .../multi/GT_MetaTileEntity_EM_crafting.java | 6 +- .../multi/GT_MetaTileEntity_EM_dataBank.java | 6 +- .../multi/GT_MetaTileEntity_EM_decay.java | 5 +- .../multi/GT_MetaTileEntity_EM_dequantizer.java | 6 +- .../multi/GT_MetaTileEntity_EM_infuser.java | 6 +- .../multi/GT_MetaTileEntity_EM_junction.java | 5 +- .../multi/GT_MetaTileEntity_EM_quantizer.java | 6 +- .../multi/GT_MetaTileEntity_EM_research.java | 6 +- .../multi/GT_MetaTileEntity_EM_scanner.java | 5 +- .../multi/GT_MetaTileEntity_EM_stabilizer.java | 6 +- .../multi/GT_MetaTileEntity_EM_switch.java | 5 +- .../multi/GT_MetaTileEntity_EM_transformer.java | 41 +- .../multi/GT_MetaTileEntity_EM_wormhole.java | 6 +- .../multi/GT_MetaTileEntity_TM_microwave.java | 5 +- .../GT_MetaTileEntity_TM_proccessingStack.java | 4 +- .../multi/GT_MetaTileEntity_TM_teslaCoil.java | 5 +- .../base/GT_MetaTileEntity_MultiblockBase_EM.java | 25 +- .../metaTileEntity/multi/base/IHatchAdder.java | 8 - .../em_machine/GT_MetaTileEntity_EM_machine.java | 5 +- .../GT_MetaTileEntity_DebugStructureWriter.java | 35 +- .../java/com/github/technus/tectech/util/Util.java | 16 - .../com/github/technus/tectech/util/Vec3Impl.java | 28 +- 47 files changed, 1405 insertions(+), 676 deletions(-) delete mode 100644 src/main/java/com/github/technus/tectech/mechanics/constructable/Structure.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/IBlockAdder.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/IBlockPosConsumer.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/IHatchAdder.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementProvider.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/IStructureFallback.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/IStructureFallbackProvider.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/IStructureNavigate.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/ITileAdder.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/IHatchAdder.java diff --git a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaDequantizer.java b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaDequantizer.java index eb9b97deee..df5054ab4a 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaDequantizer.java +++ b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaDequantizer.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.compatibility.thaumcraft.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.definitions.ePrimalAspectDefinition; @@ -11,7 +11,7 @@ import com.github.technus.tectech.thing.casing.TT_Container_Casings; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_quantizer; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; @@ -143,7 +143,7 @@ public class GT_MetaTileEntity_EM_essentiaDequantizer extends GT_MetaTileEntity_ } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaQuantizer.java b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaQuantizer.java index 0259aec7a7..d48c345e8e 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaQuantizer.java +++ b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaQuantizer.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.compatibility.thaumcraft.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.definitions.ePrimalAspectDefinition; @@ -11,7 +11,7 @@ import com.github.technus.tectech.thing.casing.TT_Container_Casings; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_quantizer; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; @@ -147,7 +147,7 @@ public class GT_MetaTileEntity_EM_essentiaQuantizer extends GT_MetaTileEntity_Mu } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/loader/ConstructableLoader.java b/src/main/java/com/github/technus/tectech/loader/ConstructableLoader.java index 93752cc02f..665889dc1f 100644 --- a/src/main/java/com/github/technus/tectech/loader/ConstructableLoader.java +++ b/src/main/java/com/github/technus/tectech/loader/ConstructableLoader.java @@ -2,7 +2,7 @@ package com.github.technus.tectech.loader; import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; import com.github.technus.tectech.mechanics.constructable.IMultiblockInfoContainer; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.Structure; import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_ElectricBlastFurnace; import net.minecraft.block.Block; import net.minecraft.item.ItemStack; @@ -39,7 +39,7 @@ public class ConstructableLoader implements Runnable { } @Override - public String[] getDescription(int stackSize) { + public String[] getDescription(ItemStack stackSize) { return desc; } }); diff --git a/src/main/java/com/github/technus/tectech/mechanics/alignment/enumerable/ExtendedFacing.java b/src/main/java/com/github/technus/tectech/mechanics/alignment/enumerable/ExtendedFacing.java index 5c8c902484..2a93bcc540 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/alignment/enumerable/ExtendedFacing.java +++ b/src/main/java/com/github/technus/tectech/mechanics/alignment/enumerable/ExtendedFacing.java @@ -12,7 +12,6 @@ import static com.github.technus.tectech.mechanics.alignment.IAlignment.FLIPS_CO import static com.github.technus.tectech.mechanics.alignment.IAlignment.ROTATIONS_COUNT; import static java.lang.Math.abs; import static java.util.Arrays.stream; -import static java.util.stream.Collectors.reducing; import static java.util.stream.Collectors.toMap; public enum ExtendedFacing { @@ -144,32 +143,32 @@ public enum ExtendedFacing { switch (direction){ case DOWN: a= ForgeDirection.WEST; - b= ForgeDirection.NORTH; + b= ForgeDirection.SOUTH; c= ForgeDirection.UP; break; case UP: a= ForgeDirection.EAST; - b= ForgeDirection.NORTH; + b= ForgeDirection.SOUTH; c= ForgeDirection.DOWN; break; case NORTH: a= ForgeDirection.WEST; - b= ForgeDirection.UP; + b= ForgeDirection.DOWN; c= ForgeDirection.SOUTH; break; case SOUTH: a= ForgeDirection.EAST; - b= ForgeDirection.UP; + b= ForgeDirection.DOWN; c= ForgeDirection.NORTH; break; case WEST: a= ForgeDirection.SOUTH; - b= ForgeDirection.UP; + b= ForgeDirection.DOWN; c= ForgeDirection.EAST; break; case EAST: a= ForgeDirection.NORTH; - b= ForgeDirection.UP; + b= ForgeDirection.DOWN; c= ForgeDirection.WEST; break; default:throw new RuntimeException("Is impossible..."); @@ -187,7 +186,7 @@ public enum ExtendedFacing { default:throw new RuntimeException("Even more impossible..."); } switch (rotation) { - case COUNTER_CLOCKWISE: { + case CLOCKWISE: { ForgeDirection _a=a; a =b; b =_a.getOpposite(); @@ -197,7 +196,7 @@ public enum ExtendedFacing { a=a.getOpposite(); b=b.getOpposite(); break; - case CLOCKWISE: { + case COUNTER_CLOCKWISE: { ForgeDirection _a=a; a =b.getOpposite(); b =_a; diff --git a/src/main/java/com/github/technus/tectech/mechanics/constructable/IConstructable.java b/src/main/java/com/github/technus/tectech/mechanics/constructable/IConstructable.java index d7c3c86098..1de0381f1f 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/constructable/IConstructable.java +++ b/src/main/java/com/github/technus/tectech/mechanics/constructable/IConstructable.java @@ -11,6 +11,6 @@ public interface IConstructable { void construct(ItemStack stackSize, boolean hintsOnly); @SideOnly(Side.CLIENT) - String[] getStructureDescription(int stackSize); + String[] getStructureDescription(ItemStack stackSize); } diff --git a/src/main/java/com/github/technus/tectech/mechanics/constructable/IMultiblockInfoContainer.java b/src/main/java/com/github/technus/tectech/mechanics/constructable/IMultiblockInfoContainer.java index 29769fafb8..2506342f72 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/constructable/IMultiblockInfoContainer.java +++ b/src/main/java/com/github/technus/tectech/mechanics/constructable/IMultiblockInfoContainer.java @@ -26,5 +26,5 @@ public interface IMultiblockInfoContainer { void construct(ItemStack stackSize, boolean hintsOnly, TileEntity tileEntity, ExtendedFacing aSide); @SideOnly(Side.CLIENT) - String[] getDescription(int stackSize); + String[] getDescription(ItemStack stackSize); } diff --git a/src/main/java/com/github/technus/tectech/mechanics/constructable/Structure.java b/src/main/java/com/github/technus/tectech/mechanics/constructable/Structure.java deleted file mode 100644 index 00ffb32525..0000000000 --- a/src/main/java/com/github/technus/tectech/mechanics/constructable/Structure.java +++ /dev/null @@ -1,526 +0,0 @@ -package com.github.technus.tectech.mechanics.constructable; - -import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; -import com.github.technus.tectech.thing.casing.TT_Container_Casings; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; -import static gregtech.api.enums.GT_Values.E; - -public class Structure { - private static final Pattern matchE_ = Pattern.compile("(E,(E,)+)"); - - private Structure(){} - - //Check Machine Structure based on string[][] (effectively char[][][]), ond offset of the controller - //This only checks for REGULAR BLOCKS! - public static boolean checker( - String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR-1 blocks - Block[] blockType,//use numbers 0-9 for casing types - byte[] blockMeta,//use numbers 0-9 for casing types - IHatchAdder[] addingMethods, - short[] casingTextures, - Block[] blockTypeFallback,//use numbers 0-9 for casing types - byte[] blockMetaFallback,//use numbers 0-9 for casing types - int horizontalOffset, int verticalOffset, int depthOffset, - IGregTechTileEntity aBaseMetaTileEntity, - ExtendedFacing extendedFacing, - boolean forceCheck) { - World world = aBaseMetaTileEntity.getWorld(); - if (world.isRemote) { - return false; - } - //TE Rotation - if(extendedFacing==null){ - extendedFacing=ExtendedFacing.of(ForgeDirection.getOrientation(aBaseMetaTileEntity.getFrontFacing())); - } - - IGregTechTileEntity igt; - - int[] xyz =new int[3]; - int[] abc =new int[3]; - int pointer; - int baseX = aBaseMetaTileEntity.getXCoord(), - baseZ = aBaseMetaTileEntity.getZCoord(), - baseY = aBaseMetaTileEntity.getYCoord(); - //a,b,c - relative to block face! - //x,y,z - relative to block position on map! - //yPos - absolute height of checked block - - //perform your duties - abc[2] = -depthOffset; - for (String[] _structure : structure) {//front to back - abc[1] = verticalOffset; - for (String __structure : _structure) {//top to bottom - abc[0] = -horizontalOffset; - for (char block : __structure.toCharArray()) {//left to right - if (block < ' ') {//Control chars allow skipping - abc[1] -= block; - break; - } else if (block > '@') {//characters allow to skip check A-1 skip, B-2 skips etc. - abc[0] += block - '@'; - }//else if (block < '+')//used to mark THINGS - // a++; - else if (block == '.') { - abc[0]++; - } else { - //get x y z from rotation - extendedFacing.getWorldOffset(abc,xyz); - xyz[0]+=baseX; - xyz[1]+=baseY; - xyz[2]+=baseZ; - - //that must be here since in some cases other axis (b,c) controls y - if (xyz[1] < 0 || xyz[1] >= 256) { - return false; - } - - //Check block - if (world.blockExists(xyz[0], xyz[1], xyz[2])) {//this actually checks if the chunk is loaded at this pos - switch (block) { - case '-'://must be air - if (world.getBlock(xyz[0], xyz[1], xyz[2]).getMaterial() != Material.air) { - return false; - } - break; - case '+'://must not be air - if (world.getBlock(xyz[0], xyz[1], xyz[2]).getMaterial() == Material.air) { - return false; - } - break; - default://check for block (countable) - if ((pointer = block - '0') >= 0) { - //countable air -> net.minecraft.block.BlockAir - if (world.getBlock(xyz[0], xyz[1], xyz[2]) != blockType[pointer]) { - if (DEBUG_MODE) { - TecTech.LOGGER.info("Struct-block-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + world.getBlock(xyz[0], xyz[1], xyz[2]).getUnlocalizedName() + ' ' + blockType[pointer].getUnlocalizedName()); - } - return false; - } - if (world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) != blockMeta[pointer]) { - if (DEBUG_MODE) { - TecTech.LOGGER.info("Struct-meta-id-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) + ' ' + blockMeta[pointer]); - } - return false; - } - } else //noinspection ConstantConditions - if ((pointer = block - ' ') >= 0) { - igt = aBaseMetaTileEntity.getIGregTechTileEntity(xyz[0], xyz[1], xyz[2]); - if (igt == null || !addingMethods[pointer].apply(igt, casingTextures[pointer])) { - if (world.getBlock(xyz[0], xyz[1], xyz[2]) != blockTypeFallback[pointer]) { - if (DEBUG_MODE) { - TecTech.LOGGER.info("Fallback-struct-block-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + world.getBlock(xyz[0], xyz[1], xyz[2]).getUnlocalizedName() + ' ' + (blockTypeFallback[pointer] == null ? "null" : blockTypeFallback[pointer].getUnlocalizedName())); - } - return false; - } - if (world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) != blockMetaFallback[pointer]) { - if (DEBUG_MODE) { - TecTech.LOGGER.info("Fallback-Struct-meta-id-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) + ' ' + blockMetaFallback[pointer]); - } - return false; - } - } - } - } - } else if (forceCheck) { - return false; - } - abc[0]++;//block in horizontal layer - } - } - abc[1]--;//horizontal layer - } - abc[2]++;//depth - } - return true; - } - - public static boolean builder(String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR+1 blocks - Block[] blockType,//use numbers 0-9 for casing types - byte[] blockMeta,//use numbers 0-9 for casing types - int horizontalOffset, int verticalOffset, int depthOffset, - IGregTechTileEntity tileEntity, ExtendedFacing extendedFacing, boolean hintsOnly) { - return builder(structure, blockType, blockMeta, horizontalOffset, verticalOffset, depthOffset, - tileEntity.getWorld(),tileEntity.getXCoord(),tileEntity.getYCoord(),tileEntity.getZCoord(), - extendedFacing, hintsOnly); - } - - public static boolean builder(String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR+1 blocks - Block[] blockType,//use numbers 0-9 for casing types - byte[] blockMeta,//use numbers 0-9 for casing types - int horizontalOffset, int verticalOffset, int depthOffset, - TileEntity tileEntity, ExtendedFacing extendedFacing, boolean hintsOnly) { - return builder(structure, blockType, blockMeta, horizontalOffset, verticalOffset, depthOffset, - tileEntity.getWorldObj(),tileEntity.xCoord,tileEntity.yCoord,tileEntity.zCoord, - extendedFacing, hintsOnly); - } - - public static boolean builder(String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR+1 blocks - Block[] blockType,//use numbers 0-9 for casing types - byte[] blockMeta,//use numbers 0-9 for casing types - int horizontalOffset, int verticalOffset, int depthOffset, - World world,int baseX,int baseZ,int baseY, ExtendedFacing extendedFacing, boolean hintsOnly) { - if (world==null || (!world.isRemote && hintsOnly)) { - return false; - } - - //TE Rotation - int[] xyz =new int[3]; - int[] abc =new int[3]; - int pointer; - - //a,b,c - relative to block face! - //x,y,z - relative to block position on map! - - //perform your duties - abc[2] = -depthOffset; - for (String[] _structure : structure) {//front to back - abc[1] = verticalOffset; - for (String __structure : _structure) {//top to bottom - abc[0] = -horizontalOffset; - for (char block : __structure.toCharArray()) {//left to right - if (block < ' ') {//Control chars allow skipping - abc[1] -= block; - break; - } - if (block > '@')//characters allow to skip check a-1 skip, b-2 skips etc. - { - abc[0] += block - '@'; - }//else if (block < '+')//used to mark THINGS - // a++; - else if (block == '.')// this TE - { - abc[0]++; - } else { - //get x y z from rotation - extendedFacing.getWorldOffset(abc,xyz); - xyz[0]+=baseX; - xyz[1]+=baseY; - xyz[2]+=baseZ; - - //that must be here since in some cases other axis (b,c) controls y - if (xyz[1] < 0 || xyz[1] >= 256) { - return false; - } - - //Check block - if (world.blockExists(xyz[0], xyz[1], xyz[2])) {//this actually checks if the chunk is loaded - if (hintsOnly) { - switch (block) { - case '-'://must be air - TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, 13); - break; - case '+'://must not be air - TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, 14); - break; - default: //check for block - if ((pointer = block - '0') >= 0) { - if (world.getBlock(xyz[0], xyz[1], xyz[2]) != blockType[pointer] || world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) != blockMeta[pointer]) { - TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], blockType[pointer], blockMeta[pointer]); - } - } else if ((pointer = block - ' ') >= 0) { - if (pointer >= 0 && pointer < 12) { - TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, pointer); - } else { - TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, 12); - } - } else { - TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, 15); - } - } - } else { - switch (block) { - case '-'://must be air - world.setBlock(xyz[0], xyz[1], xyz[2], Blocks.air, 0, 2); - break; - case '+'://must not be air - world.setBlock(xyz[0], xyz[1], xyz[2], TT_Container_Casings.sBlockCasingsTT, 14, 2); - break; - default: //check for block - if ((pointer = block - '0') >= 0) { - world.setBlock(xyz[0], xyz[1], xyz[2], blockType[pointer], blockMeta[pointer], 2); - } else if (block - ' ' < 0) { - world.setBlock(xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, 15, 2); - } //else { - //switch(pointer){ - // case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: - // world.setBlock(x, y, z, TT_Container_Casings.sHintCasingsTT, pointer, 2); break; - // default:world.setBlock(x, y, z, TT_Container_Casings.sHintCasingsTT, 12, 2); - //} - //} - } - } - } - abc[0]++;//block in horizontal layer - } - } - abc[1]--;//horizontal layer - } - abc[2]++;//depth - } - return true; - } - - - public static String[] writer(IGregTechTileEntity aBaseMetaTileEntity, - int horizontalOffset, int verticalOffset, int depthOffset, - int horizontalSize, int verticalSize, int depthSize, boolean ignoreAir) { - //TE Rotation - byte facing = aBaseMetaTileEntity.getFrontFacing(); - World world = aBaseMetaTileEntity.getWorld(); - if (world.isRemote) { - return new String[]{"Not at Client m8"}; - } - - ItemStack[] array = new ItemStack[10]; - - int x, y, z, a, b, c; - int - baseX = aBaseMetaTileEntity.getXCoord(), - baseZ = aBaseMetaTileEntity.getZCoord(), - baseY = aBaseMetaTileEntity.getYCoord(); - //a,b,c - relative to block face! - //x,y,z - relative to block position on map! - //yPos - absolute height of checked block - - //perform your duties - #1 - count block types - c = -depthOffset; - for (int cz = 0; cz < depthSize; cz++) {//front to back - b = verticalOffset; - for (int by = 0; by < verticalSize; by++) {//top to bottom - a = -horizontalOffset; - for (int az = 0; az < horizontalSize; az++) {//left to right - //get x y z from rotation - switch (facing) {//translation - case 4: - x = baseX + c; - z = baseZ + a; - y = baseY + b; - break; - case 3: - x = baseX + a; - z = baseZ - c; - y = baseY + b; - break; - case 5: - x = baseX - c; - z = baseZ - a; - y = baseY + b; - break; - case 2: - x = baseX - a; - z = baseZ + c; - y = baseY + b; - break; - //Things get odd if the block faces up or down... - case 1: - x = baseX + a; - z = baseZ + b; - y = baseY - c; - break;//similar to 3 - case 0: - x = baseX - a; - z = baseZ - b; - y = baseY + c; - break;//similar to 2 - default: - return new String[]{"Invalid rotation"}; - } - - //that must be here since in some cases other axis (b,c) controls y - if (y < 0 || y >= 256) { - return new String[]{"Invalid position"}; - } - - //Check block - Block block = world.getBlock(x, y, z); - int meta = world.getBlockMetadata(x, y, z); - - if (!block.hasTileEntity(meta) && block.getMaterial() != Material.air) { - boolean err = true; - ItemStack is = new ItemStack(block, 1, meta); - for (int i = 0; i < array.length; i++) { - if (array[i] == null) { - array[i] = is; - err = false; - break; - } else if (is.getItem() == array[i].getItem() && is.getItemDamage() == array[i].getItemDamage()) { - err = false; - break; - } - } - if (err) { - return new String[]{"Too much different blocks"}; - } - } - - a++;//block in horizontal layer - } - b--;//horizontal layer - } - c++;//depth - } - - List output = new ArrayList<>(); - - output.add("Offsets: " + horizontalOffset + ' ' + verticalOffset + ' ' + depthOffset); - output.add("Sizes: " + horizontalSize + ' ' + verticalSize + ' ' + depthSize); - output.add(""); - - output.add("ID[]: Name[]"); - output.add(""); - for (int i = 0; i < array.length; i++) { - if (array[i] != null) { - output.add(i + ": " + array[i].getDisplayName()); - } - } - output.add(""); - output.add("ID[]: Block[] BlockMetaID[]"); - output.add(""); - for (int i = 0; i < array.length; i++) { - if (array[i] != null) { - output.add(i + ": " + array[i].getItem().getUnlocalizedName() + ' ' + array[i].getItemDamage()); - } - } - output.add(""); - output.add("String[][]"); - //perform your duties - #2 - write strings - output.add("{"); - c = -depthOffset; - for (int cz = 0; cz < depthSize; cz++) {//front to back - b = verticalOffset; - StringBuilder addMe = new StringBuilder().append('{'); - for (int by = 0; by < verticalSize; by++) {//top to bottom - a = -horizontalOffset; - StringBuilder line = new StringBuilder(); - for (int az = 0; az < horizontalSize; az++) {//left to right - //get x y z from rotation - switch (facing) {//translation - case 4: - x = baseX + c; - z = baseZ + a; - y = baseY + b; - break; - case 3: - x = baseX + a; - z = baseZ - c; - y = baseY + b; - break; - case 5: - x = baseX - c; - z = baseZ - a; - y = baseY + b; - break; - case 2: - x = baseX - a; - z = baseZ + c; - y = baseY + b; - break; - //Things get odd if the block faces up or down... - case 1: - x = baseX + a; - z = baseZ + b; - y = baseY - c; - break;//similar to 3 - case 0: - x = baseX - a; - z = baseZ - b; - y = baseY + c; - break;//similar to 2 - default: - return new String[]{"Invalid rotation"}; - } - - //Check block - Block block = world.getBlock(x, y, z); - int meta = world.getBlockMetadata(x, y, z); - - if (a == 0 && b == 0 && c == 0) { - line.append('.'); - } else if (block.getMaterial() == Material.air) { - line.append('-'); - } else if (block.hasTileEntity(meta)) { - line.append('*'); - } else { - ItemStack stack = new ItemStack(block, 1, meta); - String str = "?";//OH YEAH NPEs - for (int i = 0; i < array.length; i++) { - if (array[i] != null && stack.getItem() == array[i].getItem() && stack.getItemDamage() == array[i].getItemDamage()) { - str = Integer.toString(i); - break; - } - } - line.append(str); - } - a++;//block in horizontal layer - } - if (ignoreAir) { - StringBuilder builder = new StringBuilder(); - char temp = '@'; - for (char ch : line.toString().toCharArray()) { - if (ch == '-') { - temp += 1; - if (temp == '~') { - builder.append('~'); - temp = '@'; - } - } else { - if (temp > '@') { - builder.append(temp); - temp = '@'; - } - builder.append(ch); - } - } - while (builder.length() > 0 && builder.charAt(builder.length() - 1) == '~') { - builder.deleteCharAt(builder.length() - 1); - } - if (builder.length() == 0) { - builder.append("E,"); - } else { - builder.insert(0, '"'); - builder.append('"').append(','); - } - addMe.append(builder); - } else { - if (line.length() == 0) { - line.append("E,"); - } else { - line.insert(0, '"'); - line.append('"').append(','); - } - addMe.append(line); - } - b--;//horizontal layer - } - //region less verbose - addMe.append('}').append(','); - String builtStr = addMe.toString().replaceAll("(E,)+(?=})", E/*Remove Empty strings at end*/); - Matcher matcher = matchE_.matcher(builtStr); - while (matcher.find()) { - byte lenEE = (byte) (matcher.group(1).length() >> 1); - builtStr = builtStr.replaceFirst("E,(E,)+", "\"\\\\u00" + String.format("%02X", lenEE - 1) + "\","); - //builtStr=builtStr.replaceFirst("E,(E,)+\"","\"\\\\u00"+String.format("%02X", lenEE)); - } - //endregion - output.add(builtStr); - c++;//depth - } - output.add("}"); - return output.toArray(new String[0]); - } -} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IBlockAdder.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IBlockAdder.java new file mode 100644 index 0000000000..3dda99fed2 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IBlockAdder.java @@ -0,0 +1,14 @@ +package com.github.technus.tectech.mechanics.structure; + + +import net.minecraft.block.Block; + +public interface IBlockAdder { + /** + * Callback on block added + * @param block block attempted to add + * @param meta meta of block attempted to add + * @return is structure still valid + */ + boolean apply(Block block, Integer meta); +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IBlockPosConsumer.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IBlockPosConsumer.java new file mode 100644 index 0000000000..c3ea2d3e3f --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IBlockPosConsumer.java @@ -0,0 +1,7 @@ +package com.github.technus.tectech.mechanics.structure; + +import net.minecraft.world.World; + +public interface IBlockPosConsumer { + void consume(World world, int x, int y, int z); +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IHatchAdder.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IHatchAdder.java new file mode 100644 index 0000000000..10d4c398ec --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IHatchAdder.java @@ -0,0 +1,14 @@ +package com.github.technus.tectech.mechanics.structure; + + +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; + +public interface IHatchAdder { + /** + * Callback to add hatch + * @param iGregTechTileEntity hatch + * @param aShort requested texture index, or null if not... + * @return managed to add hatch (structure still valid) + */ + boolean apply(IGregTechTileEntity iGregTechTileEntity, Short aShort); +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java new file mode 100644 index 0000000000..656151dc86 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java @@ -0,0 +1,137 @@ +package com.github.technus.tectech.mechanics.structure; + +import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; +import net.minecraft.world.World; + +public interface IStructureDefinition { + /** + * Used internally + * @param name same name as for other methods here + * @return the array of elements to process + */ + IStructureElementProvider[] getElementsFor(String name); + + default boolean check(T object,String piece, World world, ExtendedFacing extendedFacing, + int basePositionX, int basePositionY, int basePositionZ, + int basePositionA, int basePositionB, int basePositionC, + boolean forceCheckAllBlocks){ + return iterate(object,getElementsFor(piece), world, extendedFacing, basePositionX, basePositionY, basePositionZ, + basePositionA, basePositionB, basePositionC,false,forceCheckAllBlocks); + } + + default boolean hints(T object,String piece, World world, ExtendedFacing extendedFacing, + int basePositionX, int basePositionY, int basePositionZ, + int basePositionA, int basePositionB, int basePositionC) { + return iterate(object,getElementsFor(piece), world, extendedFacing, basePositionX, basePositionY, basePositionZ, + basePositionA, basePositionB, basePositionC,true,null); + } + + default boolean build(T object,String piece, World world, ExtendedFacing extendedFacing, + int basePositionX, int basePositionY, int basePositionZ, + int basePositionA, int basePositionB, int basePositionC) { + return iterate(object,getElementsFor(piece), world, extendedFacing, basePositionX, basePositionY, basePositionZ, + basePositionA, basePositionB, basePositionC,false,null); + } + + default boolean buildOrHints(T object,String piece, World world, ExtendedFacing extendedFacing, + int basePositionX, int basePositionY, int basePositionZ, + int basePositionA, int basePositionB, int basePositionC, + boolean hintsOnly){ + return iterate(object,getElementsFor(piece), world, extendedFacing, basePositionX, basePositionY, basePositionZ, + basePositionA, basePositionB, basePositionC,hintsOnly,null); + } + + static boolean iterate(T object, IStructureElementProvider[] elements, World world, ExtendedFacing extendedFacing, + int basePositionX, int basePositionY, int basePositionZ, + int basePositionA, int basePositionB, int basePositionC, + boolean hintsOnly, Boolean checkBlocksIfNotNullForceCheckAllIfTrue){ + if(world.isRemote ^ hintsOnly){ + return false; + } + + //change base position to base offset + basePositionA=-basePositionA; + basePositionB=-basePositionB; + basePositionC=-basePositionC; + + int[] abc = new int[]{basePositionA,basePositionB,basePositionC}; + int[] xyz = new int[3]; + + if(checkBlocksIfNotNullForceCheckAllIfTrue!=null){ + if(checkBlocksIfNotNullForceCheckAllIfTrue){ + for (IStructureElementProvider elementProvider : elements) { + IStructureElement element=elementProvider.getStructureElement(object); + extendedFacing.getWorldOffset(abc, xyz); + xyz[0] += basePositionX; + xyz[1] += basePositionY; + xyz[2] += basePositionZ; + + if (world.blockExists(xyz[0], xyz[1], xyz[2])) { + if(!element.check(object, world, xyz[0], xyz[1], xyz[2])){ + return false; + } + }else { + return false; + } + + abc[0] =(element.resetA()?basePositionA:abc[0])+element.getStepA(); + abc[1] =(element.resetB()?basePositionA:abc[1])+element.getStepB(); + abc[2] =(element.resetC()?basePositionA:abc[2])+element.getStepC(); + } + } else { + for (IStructureElementProvider elementProvider : elements) { + IStructureElement element=elementProvider.getStructureElement(object); + extendedFacing.getWorldOffset(abc, xyz); + xyz[0] += basePositionX; + xyz[1] += basePositionY; + xyz[2] += basePositionZ; + + if (world.blockExists(xyz[0], xyz[1], xyz[2])) { + if(!element.check(object, world, xyz[0], xyz[1], xyz[2])){ + return false; + } + } + + abc[0] =(element.resetA()?basePositionA:abc[0])+element.getStepA(); + abc[1] =(element.resetB()?basePositionA:abc[1])+element.getStepB(); + abc[2] =(element.resetC()?basePositionA:abc[2])+element.getStepC(); + } + } + }else { + if(hintsOnly) { + for (IStructureElementProvider elementProvider : elements) { + IStructureElement element=elementProvider.getStructureElement(object); + extendedFacing.getWorldOffset(abc, xyz); + xyz[0] += basePositionX; + xyz[1] += basePositionY; + xyz[2] += basePositionZ; + + if (world.blockExists(xyz[0], xyz[1], xyz[2])) { + element.spawnHint(object, world, xyz[0], xyz[1], xyz[2]); + } + + abc[0] =(element.resetA()?basePositionA:abc[0])+element.getStepA(); + abc[1] =(element.resetB()?basePositionA:abc[1])+element.getStepB(); + abc[2] =(element.resetC()?basePositionA:abc[2])+element.getStepC(); + } + } else { + for (IStructureElementProvider elementProvider : elements) { + IStructureElement element=elementProvider.getStructureElement(object); + extendedFacing.getWorldOffset(abc, xyz); + xyz[0] += basePositionX; + xyz[1] += basePositionY; + xyz[2] += basePositionZ; + + if (world.blockExists(xyz[0], xyz[1], xyz[2])) { + element.placeBlock(object, world, xyz[0], xyz[1], xyz[2]); + } + + abc[0] =(element.resetA()?basePositionA:abc[0])+element.getStepA(); + abc[1] =(element.resetB()?basePositionA:abc[1])+element.getStepB(); + abc[2] =(element.resetC()?basePositionA:abc[2])+element.getStepC(); + } + } + } + return true; + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java new file mode 100644 index 0000000000..d33eac4119 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java @@ -0,0 +1,47 @@ +package com.github.technus.tectech.mechanics.structure; + +import net.minecraft.world.World; + +/** + * Use StructureUtility to instantiate + */ +public interface IStructureElement extends IStructureElementProvider { + boolean check(T t,World world,int x,int y,int z); + + default boolean spawnHint(T t,World world,int x,int y,int z){ + return false; + } + + default boolean placeBlock(T t,World world,int x,int y,int z){ + return false; + } + + default int getStepA(){ + return 1; + } + + default int getStepB(){ + return 0; + } + + default int getStepC(){ + return 0; + } + + default boolean resetA(){ + return false; + } + + default boolean resetB(){ + return false; + } + + default boolean resetC(){ + return false; + } + + @Override + default IStructureElement getStructureElement(T object){ + return this; + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementProvider.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementProvider.java new file mode 100644 index 0000000000..b38c2164c3 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementProvider.java @@ -0,0 +1,5 @@ +package com.github.technus.tectech.mechanics.structure; + +public interface IStructureElementProvider { + IStructureElement getStructureElement(T object); +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureFallback.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureFallback.java new file mode 100644 index 0000000000..354aaf60e9 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureFallback.java @@ -0,0 +1,40 @@ +package com.github.technus.tectech.mechanics.structure; + +import net.minecraft.world.World; + +/** + * Use StructureUtility to instantiate + */ +public interface IStructureFallback extends IStructureElement { + IStructureElement[] fallbacks(); + + @Override + default boolean check(T t, World world, int x, int y, int z){ + for (IStructureElement fallback : fallbacks()) { + if (fallback.check(t, world, x, y, z)) { + return true; + } + } + return false; + } + + @Override + default boolean spawnHint(T t, World world, int x, int y, int z) { + for (IStructureElement fallback : fallbacks()) { + if (fallback.spawnHint(t, world, x, y, z)) { + return true; + } + } + return false; + } + + @Override + default boolean placeBlock(T t, World world, int x, int y, int z) { + for (IStructureElement fallback : fallbacks()) { + if (fallback.placeBlock(t, world, x, y, z)) { + return true; + } + } + return false; + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureFallbackProvider.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureFallbackProvider.java new file mode 100644 index 0000000000..c0c24eaec4 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureFallbackProvider.java @@ -0,0 +1,40 @@ +package com.github.technus.tectech.mechanics.structure; + +import net.minecraft.world.World; + +/** + * Use StructureUtility to instantiate + */ +public interface IStructureFallbackProvider extends IStructureElement { + IStructureElementProvider[] fallbacks(); + + @Override + default boolean check(T t,World world, int x, int y, int z){ + for (IStructureElementProvider fallback : fallbacks()) { + if (fallback.getStructureElement(t).check(t, world, x, y, z)) { + return true; + } + } + return false; + } + + @Override + default boolean spawnHint(T t,World world, int x, int y, int z) { + for (IStructureElementProvider fallback : fallbacks()) { + if (fallback.getStructureElement(t).spawnHint(t, world, x, y, z)) { + return true; + } + } + return false; + } + + @Override + default boolean placeBlock(T t,World world, int x, int y, int z) { + for (IStructureElementProvider fallback : fallbacks()) { + if (fallback.getStructureElement(t).placeBlock(t, world, x, y, z)) { + return true; + } + } + return false; + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureNavigate.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureNavigate.java new file mode 100644 index 0000000000..bba3dc5239 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureNavigate.java @@ -0,0 +1,23 @@ +package com.github.technus.tectech.mechanics.structure; + +import net.minecraft.world.World; + +/** + * Use StructureUtility to instantiate + */ +public interface IStructureNavigate extends IStructureElement { + @Override + default boolean check(T t, World world, int x, int y, int z){ + return true; + } + + @Override + default boolean spawnHint(T t, World world, int x, int y, int z) { + return true; + } + + @Override + default boolean placeBlock(T t, World world, int x, int y, int z) { + return true; + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/ITileAdder.java b/src/main/java/com/github/technus/tectech/mechanics/structure/ITileAdder.java new file mode 100644 index 0000000000..9d983e1c4d --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/ITileAdder.java @@ -0,0 +1,12 @@ +package com.github.technus.tectech.mechanics.structure; + +import net.minecraft.tileentity.TileEntity; + +public interface ITileAdder { + /** + * Callback to add hatch + * @param tileEntity tile + * @return managed to add hatch (structure still valid) + */ + boolean apply(TileEntity tileEntity); +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java b/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java new file mode 100644 index 0000000000..77c47ad19e --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java @@ -0,0 +1,265 @@ +package com.github.technus.tectech.mechanics.structure; + +import com.github.technus.tectech.TecTech; +import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; +import com.github.technus.tectech.thing.casing.TT_Container_Casings; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import java.util.regex.Pattern; + +import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; + +@Deprecated +public class Structure { + private static final Pattern MATCH_E = Pattern.compile("(E,(E,)+)"); + + private Structure(){} + + //Check Machine Structure based on string[][] (effectively char[][][]), ond offset of the controller + //This only checks for REGULAR BLOCKS! + public static boolean checker( + String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR-1 blocks + Block[] blockType,//use numbers 0-9 for casing types + byte[] blockMeta,//use numbers 0-9 for casing types + IHatchAdder[] addingMethods, + short[] casingTextures, + Block[] blockTypeFallback,//use numbers 0-9 for casing types + byte[] blockMetaFallback,//use numbers 0-9 for casing types + int horizontalOffset, int verticalOffset, int depthOffset, + IGregTechTileEntity aBaseMetaTileEntity, + ExtendedFacing extendedFacing, + boolean forceCheck) { + World world = aBaseMetaTileEntity.getWorld(); + if (world.isRemote) { + return false; + } + //TE Rotation + if (extendedFacing == null) { + extendedFacing = ExtendedFacing.of(ForgeDirection.getOrientation(aBaseMetaTileEntity.getFrontFacing())); + } + + IGregTechTileEntity igt; + + int[] xyz = new int[3]; + int[] abc = new int[3]; + int pointer; + int baseX = aBaseMetaTileEntity.getXCoord(), + baseZ = aBaseMetaTileEntity.getZCoord(), + baseY = aBaseMetaTileEntity.getYCoord(); + //a,b,c - relative to block face! + //x,y,z - relative to block position on map! + //yPos - absolute height of checked block + + //perform your duties + abc[2] = -depthOffset; + for (String[] _structure : structure) {//front to back + abc[1] = -verticalOffset; + for (String __structure : _structure) {//top to bottom + abc[0] = -horizontalOffset; + for (char block : __structure.toCharArray()) {//left to right + if (block < ' ') { + //Control chars allow skipping + abc[1] += block; + break; + } else if (block > '@') { + //characters allow to skip check A-1 skip, B-2 skips etc. + abc[0] += block - '@'; + }//else if (block < '+')//used to mark THINGS + // a++; + else if (block == '.') { + abc[0]++; + } else { + //get x y z from rotation + extendedFacing.getWorldOffset(abc, xyz); + xyz[0] += baseX; + xyz[1] += baseY; + xyz[2] += baseZ; + + //that must be here since in some cases other axis (b,c) controls y + if (xyz[1] < 0 || xyz[1] >= 256) { + return false; + } + + //Check block + if (world.blockExists(xyz[0], xyz[1], xyz[2])) {//this actually checks if the chunk is loaded at this pos + switch (block) { + case '-'://must be air + if (world.getBlock(xyz[0], xyz[1], xyz[2]).getMaterial() != Material.air) { + return false; + } + break; + case '+'://must not be air + if (world.getBlock(xyz[0], xyz[1], xyz[2]).getMaterial() == Material.air) { + return false; + } + break; + default://check for block (countable) + if ((pointer = block - '0') >= 0) { + //countable air -> net.minecraft.block.BlockAir + if (world.getBlock(xyz[0], xyz[1], xyz[2]) != blockType[pointer]) { + if (DEBUG_MODE) { + TecTech.LOGGER.info("Struct-block-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + world.getBlock(xyz[0], xyz[1], xyz[2]).getUnlocalizedName() + ' ' + blockType[pointer].getUnlocalizedName()); + } + return false; + } + if (world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) != blockMeta[pointer]) { + if (DEBUG_MODE) { + TecTech.LOGGER.info("Struct-meta-id-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) + ' ' + blockMeta[pointer]); + } + return false; + } + } else if ((pointer = block - ' ') >= 0) { + igt = aBaseMetaTileEntity.getIGregTechTileEntity(xyz[0], xyz[1], xyz[2]); + if (igt == null || !addingMethods[pointer].apply(igt, casingTextures[pointer])) { + if (world.getBlock(xyz[0], xyz[1], xyz[2]) != blockTypeFallback[pointer]) { + if (DEBUG_MODE) { + TecTech.LOGGER.info("Fallback-struct-block-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + world.getBlock(xyz[0], xyz[1], xyz[2]).getUnlocalizedName() + ' ' + (blockTypeFallback[pointer] == null ? "null" : blockTypeFallback[pointer].getUnlocalizedName())); + } + return false; + } + if (world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) != blockMetaFallback[pointer]) { + if (DEBUG_MODE) { + TecTech.LOGGER.info("Fallback-Struct-meta-id-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) + ' ' + blockMetaFallback[pointer]); + } + return false; + } + } + } + } + } else if (forceCheck) { + return false; + } + abc[0]++;//block in horizontal layer + } + } + abc[1]++;//horizontal layer + } + abc[2]++;//depth + } + return true; + } + + public static boolean builder(String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR+1 blocks + Block[] blockType,//use numbers 0-9 for casing types + byte[] blockMeta,//use numbers 0-9 for casing types + int horizontalOffset, int verticalOffset, int depthOffset, + IGregTechTileEntity tileEntity, ExtendedFacing extendedFacing, boolean hintsOnly) { + return builder(structure, blockType, blockMeta, horizontalOffset, verticalOffset, depthOffset, + tileEntity.getWorld(), tileEntity.getXCoord(), tileEntity.getYCoord(), tileEntity.getZCoord(), + extendedFacing, hintsOnly); + } + + public static boolean builder(String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR+1 blocks + Block[] blockType,//use numbers 0-9 for casing types + byte[] blockMeta,//use numbers 0-9 for casing types + int horizontalOffset, int verticalOffset, int depthOffset, + TileEntity tileEntity, ExtendedFacing extendedFacing, boolean hintsOnly) { + return builder(structure, blockType, blockMeta, horizontalOffset, verticalOffset, depthOffset, + tileEntity.getWorldObj(), tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord, + extendedFacing, hintsOnly); + } + + public static boolean builder(String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR+1 blocks + Block[] blockType,//use numbers 0-9 for casing types + byte[] blockMeta,//use numbers 0-9 for casing types + int horizontalOffset, int verticalOffset, int depthOffset, + World world, int baseX, int baseY, int baseZ, ExtendedFacing extendedFacing, boolean hintsOnly) { + if (world == null || (!world.isRemote && hintsOnly)) { + return false; + } + + //TE Rotation + int[] xyz = new int[3]; + int[] abc = new int[3]; + int pointer; + + //a,b,c - relative to block face! + //x,y,z - relative to block position on map! + + //perform your duties + abc[2] = -depthOffset; + for (String[] _structure : structure) {//front to back + abc[1] = -verticalOffset; + for (String __structure : _structure) {//top to bottom + abc[0] = -horizontalOffset; + for (char block : __structure.toCharArray()) {//left to right + if (block < ' ') {//Control chars allow skipping + abc[1] += block; + break; + } + if (block > '@')//characters allow to skip check a-1 skip, b-2 skips etc. + { + abc[0] += block - '@'; + }//else if (block < '+')//used to mark THINGS + // a++; + else if (block == '.')// this TE + { + abc[0]++; + } else { + //get x y z from rotation + extendedFacing.getWorldOffset(abc, xyz); + xyz[0] += baseX; + xyz[1] += baseY; + xyz[2] += baseZ; + + //that must be here since in some cases other axis (b,c) controls y + if (xyz[1] < 0 || xyz[1] >= 256) { + return false; + } + + //Check block + if (world.blockExists(xyz[0], xyz[1], xyz[2])) {//this actually checks if the chunk is loaded + if (hintsOnly) { + switch (block) { + case '-'://must be air + TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, 13); + break; + case '+'://must not be air + TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, 14); + break; + default: //check for block + if ((pointer = block - '0') >= 0) { + if (world.getBlock(xyz[0], xyz[1], xyz[2]) != blockType[pointer] || world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) != blockMeta[pointer]) { + TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], blockType[pointer], blockMeta[pointer]); + } + } else if ((pointer = block - ' ') >= 0) { + if (pointer < 12) { + TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, pointer); + } else { + TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, 12); + } + } else { + TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, 15); + } + } + } else { + switch (block) { + case '-'://must be air + world.setBlock(xyz[0], xyz[1], xyz[2], Blocks.air, 0, 2); + break; + case '+'://must not be air + world.setBlock(xyz[0], xyz[1], xyz[2], TT_Container_Casings.sBlockCasingsTT, 14, 2); + break; + default: //check for block + if ((pointer = block - '0') >= 0) { + world.setBlock(xyz[0], xyz[1], xyz[2], blockType[pointer], blockMeta[pointer], 2); + } + } + } + } + abc[0]++;//block in horizontal layer + } + } + abc[1]++;//horizontal layer + } + abc[2]++;//depth + } + return true; + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java new file mode 100644 index 0000000000..52386d8373 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java @@ -0,0 +1,170 @@ +package com.github.technus.tectech.mechanics.structure; + +import java.util.*; + +import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; +import static com.github.technus.tectech.mechanics.structure.StructureUtility.*; + +public class StructureDefinition implements IStructureDefinition { + private final Map> elements; + private final Map shapes; + private final Map[]> compiled; + + public static Builder builder() { + return new Builder<>(); + } + + private StructureDefinition( + Map> elements, + Map shapes, + Map[]> compiled) { + this.elements =elements; + this.shapes=shapes; + this.compiled =compiled; + } + + public static class Builder { + private static final char A='\uA000'; + private static final char B='\uB000'; + private static final char C='\uC000'; + private static final char D='\uD000'; + private final Map> elements; + private final Map shapes; + + private Builder() { + elements = new HashMap<>(); + shapes = new HashMap<>(); + } + + public Map> getElements() { + return elements; + } + + public Map getShapes() { + return shapes; + } + + /** + * Adds shape + * +- is air/no air checks + * space bar is skip + * . is also skip (but marks controller position, optional and logically it is a space...) + * rest needs to be defined + * + * next char is next block(a) + * next string is next line(a,b) + * next string[] is next slice(a,b,c) + * + * char A000-FFFF range is reserved for generated skips + * @param name unlocalized/code name + * @param structurePiece generated or written struct - DO NOT STORE IT ANYWHERE, or at least set them to null afterwards + * @return this builder + */ + public Builder addShape(String name, String[][] structurePiece) { + StringBuilder builder = new StringBuilder(); + if (structurePiece.length > 0) { + for (String[] strings : structurePiece) { + if (strings.length > 0) { + for (String string : strings) { + builder.append(string).append(B); + } + builder.setLength(builder.length() - 1); + } + builder.append(C); + } + builder.setLength(builder.length() - 1); + } + int a=0,b=0,c=0; + char d=D; + for (int i = 0; i < builder.length(); i++) { + char ch = builder.charAt(i); + if(ch ==' ' || ch =='.'){ + builder.setCharAt(i,A); + } + if(ch==A){ + a++; + }else if(ch==B){ + a=0; + b++; + }else if(ch==C){ + a=0; + b=0; + c++; + }else if(a!=0 || b!=0 || c!=0){ + builder.setCharAt(i-1,d); + addElement(d,step(a,b,c)); + a=0; + b=0; + c=0; + d++; + } + } + + String built = builder.toString().replaceAll("[\\uA000\\uB000\\uC000]",""); + + if(built.contains("+")){ + addElement('+',notAir()); + } + if (built.contains("-")) { + addElement('-', isAir()); + } + shapes.put(name, built); + return this; + } + + public Builder addElement(Character name, IStructureElementProvider structurePiece) { + elements.put(name, structurePiece); + return this; + } + + public IStructureDefinition build() { + if(DEBUG_MODE){ + return new StructureDefinition<>(new HashMap<>(elements), new HashMap<>(shapes), compileMap()); + }else { + return compileMap()::get; + } + } + + @SuppressWarnings("unchecked") + private Map[]> compileMap() { + List mising = new ArrayList<>(); + shapes.values().stream().map(CharSequence::chars).forEach(intStream -> intStream.forEach(c -> { + IStructureElementProvider iStructureElement = elements.get((char) c); + if (iStructureElement == null) { + mising.add(c); + } + })); + if (mising.isEmpty()) { + Map[]> map = new HashMap<>(); + shapes.forEach((key, value) -> { + IStructureElementProvider[] compiled = new IStructureElementProvider[value.length()]; + for (char i = 0; i < compiled.length; i++) { + compiled[i] = this.elements.get(i); + } + map.put(key, compiled); + }); + return map; + } else { + throw new RuntimeException("Missing Structure Element bindings for (chars as integers): " + + Arrays.toString(mising.toArray())); + } + } + } + + public Map> getElements(){ + return elements; + } + + public Map getShapes() { + return shapes; + } + + public Map[]> getCompiled() { + return compiled; + } + + @Override + public IStructureElementProvider[] getElementsFor(String name) { + return compiled.get(name); + } +} \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java new file mode 100644 index 0000000000..71eb2065e8 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java @@ -0,0 +1,469 @@ +package com.github.technus.tectech.mechanics.structure; + +import com.github.technus.tectech.TecTech; +import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; +import com.github.technus.tectech.util.Vec3Impl; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +import java.util.*; + +public class StructureUtility { + private static final String NICE_CHARS ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789`~!@#$%^&*()_=|[]{};:'<>,./?"; + private static final Map STEP = new HashMap<>(); + private static final IStructureElement AIR= (t, world, x, y, z) -> world.getBlock(x, y, z).getMaterial() == Material.air; + private static final IStructureElement NOT_AIR= (t, world, x, y, z) -> world.getBlock(x, y, z).getMaterial() != Material.air; + + private StructureUtility(){ + + } + + @SuppressWarnings("unchecked") + public static IStructureElement isAir(){ + return AIR; + } + + @SuppressWarnings("unchecked") + public static IStructureElement notAir(){ + return NOT_AIR; + } + + /** + * Does not allow Block duplicates (with different meta) + */ + public static IStructureElement ofBlocksFlat(Map blocsMap,Block hintBlock,int hintMeta){ + if(blocsMap==null || blocsMap.isEmpty() || hintBlock==null){ + throw new IllegalArgumentException(); + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + return blocsMap.getOrDefault(world.getBlock(x, y, z), -1) == world.getBlockMetadata(x, y, z); + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z) { + world.setBlock(x,y,z,hintBlock,hintMeta,2); + return true; + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z) { + TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); + return true; + } + }; + } + + /** + * Allows block duplicates (with different meta) + */ + public static IStructureElement ofBlocks(Map> blocsMap,Block hintBlock,int hintMeta){ + if(blocsMap==null || blocsMap.isEmpty() || hintBlock==null){ + throw new IllegalArgumentException(); + } + for (Set value : blocsMap.values()) { + if(value.isEmpty()){ + throw new IllegalArgumentException(); + } + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + return blocsMap.getOrDefault(world.getBlock(x, y, z), Collections.emptySet()).contains(world.getBlockMetadata(x, y, z)); + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z) { + world.setBlock(x,y,z,hintBlock,hintMeta,2); + return true; + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z) { + TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); + return true; + } + }; + } + + public static IStructureElement ofBlock(Block block, int meta,Block hintBlock,int hintMeta){ + if(block==null || hintBlock==null){ + throw new IllegalArgumentException(); + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + return block == world.getBlock(x, y, z) && meta == world.getBlockMetadata(x, y, z); + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z) { + world.setBlock(x,y,z,hintBlock,hintMeta,2); + return true; + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z) { + TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); + return true; + } + }; + } + + public static IStructureElement ofBlock(Block block, int meta){ + return ofBlock(block, meta,block,meta); + } + + public static IStructureElement ofBlockAdder(IBlockAdder iBlockAdder,Block hintBlock,int hintMeta){ + if(iBlockAdder==null ||hintBlock==null){ + throw new IllegalArgumentException(); + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + return iBlockAdder.apply(world.getBlock(x, y, z), world.getBlockMetadata(x, y, z)); + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z) { + world.setBlock(x,y,z,hintBlock,hintMeta,2); + return true; + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z) { + TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); + return true; + } + }; + } + + public static IStructureElement ofTileAdder(ITileAdder iTileAdder,Block hintBlock,int hintMeta){ + if(iTileAdder==null ||hintBlock==null){ + throw new IllegalArgumentException(); + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + TileEntity tileEntity = world.getTileEntity(x, y, z); + return tileEntity instanceof IGregTechTileEntity && iTileAdder.apply(tileEntity); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z) { + TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); + return true; + } + }; + } + + public static IStructureElement ofHatchAdder(IHatchAdder iHatchAdder, Short textureIndex,Block hintBlock,int hintMeta){ + if(iHatchAdder==null ||hintBlock==null){ + throw new IllegalArgumentException(); + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + TileEntity tileEntity = world.getTileEntity(x, y, z); + return tileEntity instanceof IGregTechTileEntity && iHatchAdder.apply((IGregTechTileEntity) tileEntity, textureIndex); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z) { + TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); + return true; + } + }; + } + + public static IStructureNavigate step(Vec3Impl step){ + if(step==null || step.get0()<0 || step.get1()<0 || step.get2()<0){ + throw new IllegalArgumentException(); + } + return STEP.computeIfAbsent(step, vec3 -> { + if(vec3.get2()>0){ + return stepC(vec3.get0(), vec3.get1(), vec3.get2()); + }else if(vec3.get1()>0){ + return stepB(vec3.get0(), vec3.get1(), vec3.get2()); + }else { + return stepA(vec3.get0(), vec3.get1(), vec3.get2()); + } + }); + } + + public static IStructureNavigate step(int a,int b, int c){ + return step(new Vec3Impl(a,b,c)); + } + + private static IStructureNavigate stepA(int a,int b, int c){ + return new IStructureNavigate() { + @Override + public int getStepA() { + return a; + } + + @Override + public int getStepB() { + return b; + } + + @Override + public int getStepC() { + return c; + } + }; + } + + private static IStructureNavigate stepB(int a,int b, int c){ + return new IStructureNavigate() { + @Override + public int getStepA() { + return a; + } + + @Override + public int getStepB() { + return b; + } + + @Override + public int getStepC() { + return c; + } + + @Override + public boolean resetA() { + return true; + } + }; + } + + private static IStructureNavigate stepC(int a,int b, int c){ + return new IStructureNavigate() { + @Override + public int getStepA() { + return a; + } + + @Override + public int getStepB() { + return b; + } + + @Override + public int getStepC() { + return c; + } + + @Override + public boolean resetA() { + return true; + } + + @Override + public boolean resetB() { + return true; + } + }; + } + + public static IStructureFallback ofElementChain(IStructureElement... elementChain){ + if(elementChain==null || elementChain.length==0){ + throw new IllegalArgumentException(); + } + for (IStructureElementProvider iStructureElement : elementChain) { + if(iStructureElement==null){ + throw new IllegalArgumentException(); + } + } + return () -> elementChain; + } + + public static IStructureFallbackProvider ofProviderChain(IStructureElementProvider... elementChain){ + if(elementChain==null || elementChain.length==0){ + throw new IllegalArgumentException(); + } + for (IStructureElementProvider iStructureElement : elementChain) { + if(iStructureElement==null){ + throw new IllegalArgumentException(); + } + } + return () -> elementChain; + } + + /** + * Use only to get pseudo code... + * @param world + * @return + */ + public static String getPseudoJavaCode(World world, ExtendedFacing extendedFacing, + int basePositionX, int basePositionY, int basePositionZ, + int basePositionA, int basePositionB, int basePositionC, + int sizeA,int sizeB, int sizeC) { + Map> blocks = new TreeMap<>(Comparator.comparing(Block::getUnlocalizedName)); + Set> tiles = new TreeSet<>(Comparator.comparing(Class::getCanonicalName)); + Set> gtTiles = new TreeSet<>(Comparator.comparing(Class::getCanonicalName)); + iterate(world, extendedFacing, basePositionX, basePositionY, basePositionZ, + basePositionA, basePositionB, basePositionC, + sizeA, sizeB, sizeC, ((w, x, y, z) -> { + TileEntity tileEntity = w.getTileEntity(x, y, z); + if (tileEntity == null) { + Block block = w.getBlock(x, y, z); + if (block != null && block != Blocks.air) { + blocks.compute(block, (b, set) -> { + if (set == null) { + set = new TreeSet<>(); + } + set.add(world.getBlockMetadata(x, y, z)); + return set; + }); + } + } else { + if (tileEntity instanceof IGregTechTileEntity) { + IMetaTileEntity meta = ((IGregTechTileEntity) tileEntity).getMetaTileEntity(); + if (meta != null) { + gtTiles.add(meta.getClass()); + } else { + tiles.add(tileEntity.getClass()); + } + } else { + tiles.add(tileEntity.getClass()); + } + } + })); + Map map = new HashMap<>(); + StringBuilder builder = new StringBuilder(); + { + int i = 0; + char c; + builder.append("\n\nStructure:\n") + .append("\nBlocks:\n"); + for (Map.Entry> entry : blocks.entrySet()) { + Block block = entry.getKey(); + Set set = entry.getValue(); + for (Integer meta : set) { + c = NICE_CHARS.charAt(i++); + if(i>NICE_CHARS.length()){ + return "Too complicated for nice chars"; + } + map.put(block.getUnlocalizedName() + '\0' + meta, c); + builder.append(c).append(" -> ofBlock...(") + .append(block.getUnlocalizedName()).append(", ").append(meta).append(", ...);\n"); + } + } + builder.append("\nTiles:\n"); + for (Class tile : tiles) { + c = NICE_CHARS.charAt(i++); + if(i>NICE_CHARS.length()){ + return "Too complicated for nice chars"; + } + map.put(tile.getCanonicalName(), c); + builder.append(c).append(" -> ofTileAdder(") + .append(tile.getCanonicalName()).append(", ...);\n"); + } + builder.append("\nMeta:\n"); + for (Class gtTile : gtTiles) { + c = NICE_CHARS.charAt(i++); + if(i>NICE_CHARS.length()){ + return "Too complicated for nice chars"; + } + map.put(gtTile.getCanonicalName(), c); + builder.append(c).append(" -> ofHatchAdder(") + .append(gtTile.getCanonicalName()).append(", textureId, ...);\n"); + } + } + builder.append("\nOffsets:\n") + .append(basePositionA).append(' ').append(basePositionB).append(' ').append(basePositionC).append('\n'); + builder.append("\nScan:\n") + .append("new String[][]{{\n") + .append(" \""); + + iterate(world, extendedFacing, basePositionX, basePositionY, basePositionZ, + basePositionA, basePositionB, basePositionC, + sizeA, sizeB, sizeC, ((w, x, y, z) -> { + TileEntity tileEntity = w.getTileEntity(x, y, z); + if (tileEntity == null) { + Block block = w.getBlock(x, y, z); + if (block != null && block != Blocks.air) { + builder.append(map.get(block.getUnlocalizedName() + '\0' + world.getBlockMetadata(x, y, z))); + }else { + builder.append(' '); + } + } else { + if (tileEntity instanceof IGregTechTileEntity) { + IMetaTileEntity meta = ((IGregTechTileEntity) tileEntity).getMetaTileEntity(); + if (meta != null) { + builder.append(map.get(meta.getClass().getCanonicalName())); + } else { + builder.append(map.get(tileEntity.getClass().getCanonicalName())); + } + } else { + builder.append(map.get(tileEntity.getClass().getCanonicalName())); + } + } + }), + () -> builder.append("\",\n").append(" \""), + () -> { + builder.setLength(builder.length()-7); + builder.append("\n").append("},{\n").append(" \""); + }); + builder.setLength(builder.length()-8); + builder.append("};\n\n"); + return(builder.toString().replaceAll("\"\"","E")); + } + + public static void iterate(World world, ExtendedFacing extendedFacing, + int basePositionX, int basePositionY, int basePositionZ, + int basePositionA, int basePositionB, int basePositionC, + int sizeA,int sizeB, int sizeC, + IBlockPosConsumer iBlockPosConsumer){ + sizeA-=basePositionA; + sizeB-=basePositionB; + sizeC-=basePositionC; + + int[] abc = new int[3]; + int[] xyz = new int[3]; + + for (abc[2]=-basePositionC ; abc[2] < sizeC; abc[2]++) { + for (abc[1]=-basePositionB; abc[1] < sizeB; abc[1]++) { + for (abc[0]=-basePositionA ; abc[0] < sizeA; abc[0]++) { + extendedFacing.getWorldOffset(abc, xyz); + iBlockPosConsumer.consume(world, xyz[0]+basePositionX,xyz[1]+basePositionY,xyz[2]+basePositionZ); + } + + } + } + } + + public static void iterate(World world, ExtendedFacing extendedFacing, + int basePositionX, int basePositionY, int basePositionZ, + int basePositionA, int basePositionB, int basePositionC, + int sizeA, int sizeB, int sizeC, + IBlockPosConsumer iBlockPosConsumer, + Runnable nextB, + Runnable nextC){ + sizeA-=basePositionA; + sizeB-=basePositionB; + sizeC-=basePositionC; + + int[] abc = new int[3]; + int[] xyz = new int[3]; + + for (abc[2]=-basePositionC ; abc[2] < sizeC; abc[2]++) { + for (abc[1]=-basePositionB; abc[1] < sizeB; abc[1]++) { + for (abc[0]=-basePositionA ; abc[0] < sizeA; abc[0]++) { + extendedFacing.getWorldOffset(abc, xyz); + iBlockPosConsumer.consume(world, xyz[0]+basePositionX,xyz[1]+basePositionY,xyz[2]+basePositionZ); + } + nextB.run(); + } + nextC.run(); + } + } +} diff --git a/src/main/java/com/github/technus/tectech/thing/item/ConstructableTriggerItem.java b/src/main/java/com/github/technus/tectech/thing/item/ConstructableTriggerItem.java index 7b7d1983fa..4160ae2aba 100644 --- a/src/main/java/com/github/technus/tectech/thing/item/ConstructableTriggerItem.java +++ b/src/main/java/com/github/technus/tectech/thing/item/ConstructableTriggerItem.java @@ -1,15 +1,14 @@ package com.github.technus.tectech.thing.item; +import com.github.technus.tectech.TecTech; import com.github.technus.tectech.mechanics.alignment.IAlignment; import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; +import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.mechanics.constructable.IMultiblockInfoContainer; import com.github.technus.tectech.util.CommonValues; -import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.mechanics.constructable.IConstructable; import cpw.mods.fml.common.registry.GameRegistry; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.interfaces.tileentity.IMachineBlockUpdateable; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.Item; @@ -82,7 +81,7 @@ public final class ConstructableTriggerItem extends Item { IMetaTileEntity metaTE = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity(); if (metaTE instanceof IConstructable) { ((IConstructable) metaTE).construct(aStack, true); - TecTech.proxy.printInchat(((IConstructable) metaTE).getStructureDescription(aStack.stackSize)); + TecTech.proxy.printInchat(((IConstructable) metaTE).getStructureDescription(aStack)); return false; } else if(MULTIBLOCK_MAP.containsKey(metaTE.getClass().getCanonicalName())){ IMultiblockInfoContainer iMultiblockInfoContainer = MULTIBLOCK_MAP.get(metaTE.getClass().getCanonicalName()); @@ -93,12 +92,12 @@ public final class ConstructableTriggerItem extends Item { iMultiblockInfoContainer.construct(aStack, true, tTileEntity, ExtendedFacing.of(ForgeDirection.getOrientation(((IGregTechTileEntity) tTileEntity).getFrontFacing()))); } - TecTech.proxy.printInchat(MULTIBLOCK_MAP.get(metaTE.getClass().getCanonicalName()).getDescription(aStack.stackSize)); + TecTech.proxy.printInchat(MULTIBLOCK_MAP.get(metaTE.getClass().getCanonicalName()).getDescription(aStack)); return false; } } else if(tTileEntity instanceof IConstructable){ ((IConstructable) tTileEntity).construct(aStack,true); - TecTech.proxy.printInchat(((IConstructable) tTileEntity).getStructureDescription(aStack.stackSize)); + TecTech.proxy.printInchat(((IConstructable) tTileEntity).getStructureDescription(aStack)); return false; } else if(MULTIBLOCK_MAP.containsKey(tTileEntity.getClass().getCanonicalName())){ IMultiblockInfoContainer iMultiblockInfoContainer = MULTIBLOCK_MAP.get(tTileEntity.getClass().getCanonicalName()); @@ -109,7 +108,7 @@ public final class ConstructableTriggerItem extends Item { iMultiblockInfoContainer.construct(aStack, true, tTileEntity, ExtendedFacing.of(ForgeDirection.getOrientation(aSide))); } - TecTech.proxy.printInchat(MULTIBLOCK_MAP.get(tTileEntity.getClass().getCanonicalName()).getDescription(aStack.stackSize)); + TecTech.proxy.printInchat(MULTIBLOCK_MAP.get(tTileEntity.getClass().getCanonicalName()).getDescription(aStack)); return false; } //} else { diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_annihilation.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_annihilation.java index 4333d4c8c9..4151dbfec0 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_annihilation.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_annihilation.java @@ -1,11 +1,11 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -108,7 +108,7 @@ public class GT_MetaTileEntity_EM_annihilation extends GT_MetaTileEntity_Multibl } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java index c5aaa1d66f..d90f4af8d2 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java @@ -1,11 +1,11 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -306,7 +306,7 @@ public class GT_MetaTileEntity_EM_bhg extends GT_MetaTileEntity_MultiblockBase_E } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java index fe676910ee..490ca2084b 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java @@ -1,6 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.definitions.dComplexAspectDefinition; @@ -689,7 +690,7 @@ public class GT_MetaTileEntity_EM_collider extends GT_MetaTileEntity_MultiblockB } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java index 433b8b4950..e70cc10926 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java @@ -1,6 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.util.Util; @@ -350,7 +351,7 @@ public class GT_MetaTileEntity_EM_computer extends GT_MetaTileEntity_MultiblockB } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_crafting.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_crafting.java index 7a71f36d3b..a9e5b2f8a1 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_crafting.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_crafting.java @@ -1,11 +1,11 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -110,7 +110,7 @@ public class GT_MetaTileEntity_EM_crafting extends GT_MetaTileEntity_MultiblockB } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java index 647bbf4a3b..d5c9162d1d 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.Reference; import com.github.technus.tectech.mechanics.dataTransport.InventoryDataPacket; @@ -10,7 +10,7 @@ import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_H import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_Container_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_GUIContainer_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -175,7 +175,7 @@ public class GT_MetaTileEntity_EM_dataBank extends GT_MetaTileEntity_MultiblockB } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java index be28a3d0c8..3b17dfa9b9 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java @@ -1,6 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; @@ -248,7 +249,7 @@ public class GT_MetaTileEntity_EM_decay extends GT_MetaTileEntity_MultiblockBase } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java index fed03d1845..5dfa38294b 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; @@ -11,7 +11,7 @@ import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputElemental; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; @@ -153,7 +153,7 @@ public class GT_MetaTileEntity_EM_dequantizer extends GT_MetaTileEntity_Multiblo } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java index aed3025d4f..1fff071e9c 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; import cofh.api.energy.IEnergyContainerItem; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.Reference; import com.github.technus.tectech.TecTech; @@ -9,7 +9,7 @@ import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_Container_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_GUIContainer_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; @@ -187,7 +187,7 @@ public class GT_MetaTileEntity_EM_infuser extends GT_MetaTileEntity_MultiblockBa } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_junction.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_junction.java index 8a76ee6ff1..199bb8ee6f 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_junction.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_junction.java @@ -1,6 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputElemental; @@ -174,7 +175,7 @@ public class GT_MetaTileEntity_EM_junction extends GT_MetaTileEntity_MultiblockB } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java index 6315a2f295..ab86c0494f 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.Reference; import com.github.technus.tectech.TecTech; @@ -14,7 +14,7 @@ import com.github.technus.tectech.mechanics.elementalMatter.core.transformations import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.GregTech_API; @@ -202,7 +202,7 @@ public class GT_MetaTileEntity_EM_quantizer extends GT_MetaTileEntity_Multiblock } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java index 2a739cb6c7..c6f9c810a8 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java @@ -1,13 +1,13 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.recipe.TT_recipe; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Holder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import cpw.mods.fml.common.registry.GameRegistry; import gregtech.api.enums.ItemList; @@ -557,7 +557,7 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java index 48479b9d71..896d0f41bc 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java @@ -1,6 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; @@ -518,7 +519,7 @@ public class GT_MetaTileEntity_EM_scanner extends GT_MetaTileEntity_MultiblockBa } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_stabilizer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_stabilizer.java index ece01f7489..140383caac 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_stabilizer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_stabilizer.java @@ -1,11 +1,11 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import net.minecraft.block.Block; @@ -74,7 +74,7 @@ public class GT_MetaTileEntity_EM_stabilizer extends GT_MetaTileEntity_Multibloc } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java index 39f9441cb7..7398889c89 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java @@ -1,6 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.Reference; import com.github.technus.tectech.mechanics.dataTransport.QuantumDataPacket; @@ -221,7 +222,7 @@ public class GT_MetaTileEntity_EM_switch extends GT_MetaTileEntity_MultiblockBas } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java index c2e759e96c..4e2f916f2f 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java @@ -1,26 +1,27 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; -import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.Reference; import com.github.technus.tectech.mechanics.constructable.IConstructable; +import com.github.technus.tectech.mechanics.structure.IStructureDefinition; +import com.github.technus.tectech.mechanics.structure.StructureDefinition; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_Container_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_GUIContainer_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; +import com.github.technus.tectech.util.CommonValues; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import net.minecraft.block.Block; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; +import static com.github.technus.tectech.mechanics.structure.StructureUtility.ofBlock; +import static com.github.technus.tectech.mechanics.structure.StructureUtility.ofHatchAdder; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -32,21 +33,25 @@ import static net.minecraft.util.StatCollector.translateToLocal; */ public class GT_MetaTileEntity_EM_transformer extends GT_MetaTileEntity_MultiblockBase_EM implements IConstructable { //region structure - private static final String[][] shape = new String[][]{ - {" ", " . ", " ",}, - {" ", " 0 ", " ",}, - {" ", " ", " ",}, - }; - private static final Block[] blockType = new Block[]{sBlockCasings1}; - private static final byte[] blockMeta = new byte[]{15}; - private final IHatchAdder[] addingMethods = new IHatchAdder[]{this::addEnergyIOToMachineList}; - private static final short[] casingTextures = new short[]{textureOffset}; - private static final Block[] blockTypeFallback = new Block[]{sBlockCasingsTT}; - private static final byte[] blockMetaFallback = new byte[]{0}; private static final String[] description = new String[]{ EnumChatFormatting.AQUA + translateToLocal("tt.keyphrase.Hint_Details") + ":", translateToLocal("gt.blockmachines.multimachine.em.transformer.hint"),//1 - Energy IO Hatches or High Power Casing }; + private static final IStructureDefinition STRUCTURE_DEFINITION = + StructureDefinition.builder() + .addShape("main",new String[][]{ + {"111", "1.1", "111",}, + {"111", "101", "111",}, + {"111", "111", "111",}, + }) + .addElement('0', ofBlock(sBlockCasings1,15)) + .addElement('1', trafo->ofHatchAdder(trafo::addEnergyIOToMachineList,textureOffset,sBlockCasingsTT,0)) + .build(); + + @Override + public IStructureDefinition getStructure_EM() { + return STRUCTURE_DEFINITION; + } //endregion public GT_MetaTileEntity_EM_transformer(int aID, String aName, String aNameRegional) { @@ -78,7 +83,7 @@ public class GT_MetaTileEntity_EM_transformer extends GT_MetaTileEntity_Multiblo @Override public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { - return structureCheck_EM(shape, blockType, blockMeta, addingMethods, casingTextures, blockTypeFallback, blockMetaFallback, 1, 1, 0); + return structureCheck_EM("main", 1, 1, 0); } @Override @@ -150,11 +155,11 @@ public class GT_MetaTileEntity_EM_transformer extends GT_MetaTileEntity_Multiblo @Override public void construct(ItemStack stackSize, boolean hintsOnly) { - Structure.builder(shape, blockType, blockMeta, 1, 1, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); + //Structure.builder(shape, blockType, blockMeta, 1, 1, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_wormhole.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_wormhole.java index 2b2ebdd1a4..f909d000c7 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_wormhole.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_wormhole.java @@ -1,11 +1,11 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -109,7 +109,7 @@ public class GT_MetaTileEntity_EM_wormhole extends GT_MetaTileEntity_MultiblockB } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java index 9c40d6ebc9..ba926f1ace 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java @@ -1,6 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.Reference; import com.github.technus.tectech.mechanics.constructable.IConstructable; @@ -250,7 +251,7 @@ public class GT_MetaTileEntity_TM_microwave extends GT_MetaTileEntity_Multiblock } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java index 678f211744..47f36014ac 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java @@ -5,7 +5,7 @@ import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_Container_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_GUIContainer_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import gregtech.api.enums.Textures; import gregtech.api.interfaces.ITexture; @@ -126,7 +126,7 @@ public class GT_MetaTileEntity_TM_proccessingStack extends GT_MetaTileEntity_Mul } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java index 327b54e561..a4a234f9b4 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java @@ -1,6 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.loader.NetworkDispatcher; @@ -827,7 +828,7 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java index 2f23aae431..7735678f72 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java @@ -6,7 +6,9 @@ import com.github.technus.tectech.mechanics.alignment.*; import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; import com.github.technus.tectech.mechanics.alignment.enumerable.Flip; import com.github.technus.tectech.mechanics.alignment.enumerable.Rotation; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.IStructureDefinition; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.Util; import com.github.technus.tectech.util.Vec3Impl; import com.github.technus.tectech.loader.NetworkDispatcher; @@ -191,6 +193,27 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt toolSetDirection(ForgeDirection.getOrientation(getBaseMetaTileEntity().getFrontFacing())); } + /** + * Gets structure + * @return STATIC INSTANCE OF STRUCTURE + */ + public IStructureDefinition getStructure_EM(){ + throw new NoSuchMethodError("Implement it as STATIC INSTANCE"); + } + + @SuppressWarnings("unchecked") + private IStructureDefinition getStructure_EM_Internal(){ + return (IStructureDefinition)getStructure_EM(); + } + + public final boolean structureCheck_EM(String piece,int horizontalOffset, int verticalOffset, int depthOffset) { + IGregTechTileEntity baseMetaTileEntity = getBaseMetaTileEntity(); + return getStructure_EM_Internal().check(this,piece, baseMetaTileEntity.getWorld(),getExtendedFacing(), + baseMetaTileEntity.getXCoord(),baseMetaTileEntity.getYCoord(),baseMetaTileEntity.getZCoord(), + horizontalOffset,verticalOffset,depthOffset,!mMachine); + } + + @Deprecated public final boolean structureCheck_EM( String[][] structure,//0-9 casing, +- air no air, a-z ignore Block[] blockType,//use numbers 0-9 for casing types diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/IHatchAdder.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/IHatchAdder.java deleted file mode 100644 index b695472012..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/IHatchAdder.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.multi.base; - - -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; - -public interface IHatchAdder { - Boolean apply(IGregTechTileEntity iGregTechTileEntity, Short aShort); -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java index f6f3ec9a63..722580a221 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java @@ -1,6 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi.em_machine; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.util.Util; @@ -354,7 +355,7 @@ public class GT_MetaTileEntity_EM_machine extends GT_MetaTileEntity_MultiblockBa } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugStructureWriter.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugStructureWriter.java index 194d357b1c..42f25ddfde 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugStructureWriter.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugStructureWriter.java @@ -1,11 +1,12 @@ package com.github.technus.tectech.thing.metaTileEntity.single; -import com.github.technus.tectech.mechanics.constructable.Structure; -import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.util.Util; +import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; +import com.github.technus.tectech.mechanics.structure.StructureUtility; import com.github.technus.tectech.thing.metaTileEntity.single.gui.GT_Container_DebugStructureWriter; import com.github.technus.tectech.thing.metaTileEntity.single.gui.GT_GUIContainer_DebugStructureWriter; +import com.github.technus.tectech.util.CommonValues; +import com.github.technus.tectech.util.Util; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; @@ -20,6 +21,7 @@ import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; import static com.github.technus.tectech.thing.metaTileEntity.Textures.MACHINE_CASINGS_TT; import static net.minecraft.util.StatCollector.translateToLocal; @@ -105,21 +107,22 @@ public class GT_MetaTileEntity_DebugStructureWriter extends GT_MetaTileEntity_Ti } @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isAllowedToWork()) { - result = Structure.writer(getBaseMetaTileEntity(), numbers[0], numbers[1], numbers[2], numbers[3], numbers[4], numbers[5], false); - for (String s : result) { - TecTech.LOGGER.info(s); - } - aBaseMetaTileEntity.disableWorking(); - } + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + super.onFirstTick(aBaseMetaTileEntity); + aBaseMetaTileEntity.disableWorking(); } @Override - public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) { - result = Structure.writer(getBaseMetaTileEntity(), numbers[0], numbers[1], numbers[2], numbers[3], numbers[4], numbers[5], true); - for (String s : result) { - TecTech.LOGGER.info(s); + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isAllowedToWork()) { + String pseudoJavaCode = StructureUtility.getPseudoJavaCode(aBaseMetaTileEntity.getWorld(), + ExtendedFacing.of(ForgeDirection.getOrientation(aBaseMetaTileEntity.getFrontFacing())), + aBaseMetaTileEntity.getXCoord(), aBaseMetaTileEntity.getYCoord(), aBaseMetaTileEntity.getZCoord(), + numbers[0], numbers[1], numbers[2], + numbers[3], numbers[4], numbers[5]); + TecTech.LOGGER.info(pseudoJavaCode); + result = pseudoJavaCode.split("\\n"); + aBaseMetaTileEntity.disableWorking(); } } @@ -129,8 +132,6 @@ public class GT_MetaTileEntity_DebugStructureWriter extends GT_MetaTileEntity_Ti return true; } aBaseMetaTileEntity.openGUI(aPlayer); - //if (TecTechConfig.DEBUG_MODE && aPlayer.getHeldItem() != null) - // TecTech.LOGGER.info("UnlocalizedName: " + getUniqueIdentifier(aPlayer.getHeldItem())); return true; } diff --git a/src/main/java/com/github/technus/tectech/util/Util.java b/src/main/java/com/github/technus/tectech/util/Util.java index b81506d27c..1843770e3a 100644 --- a/src/main/java/com/github/technus/tectech/util/Util.java +++ b/src/main/java/com/github/technus/tectech/util/Util.java @@ -1,22 +1,14 @@ package com.github.technus.tectech.util; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; -import com.github.technus.tectech.thing.casing.TT_Container_Casings; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.ObfuscationReflectionHelper; import cpw.mods.fml.common.registry.GameRegistry; import gregtech.api.GregTech_API; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_TieredMachineBlock; import gregtech.api.util.GT_OreDictUnificator; import gregtech.api.util.GT_Utility; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.inventory.Container; import net.minecraft.inventory.ICrafting; @@ -25,14 +17,12 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.server.MinecraftServer; -import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.ChunkCoordIntPair; import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.storage.IPlayerFileData; import net.minecraft.world.storage.SaveHandler; -import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.FluidStack; import org.apache.commons.lang3.StringUtils; @@ -42,12 +32,6 @@ import java.io.FileOutputStream; import java.lang.reflect.Field; import java.nio.charset.StandardCharsets; import java.util.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; -import static gregtech.api.enums.GT_Values.E; -import static java.nio.charset.Charset.forName; /** * Created by Tec on 21.03.2017. diff --git a/src/main/java/com/github/technus/tectech/util/Vec3Impl.java b/src/main/java/com/github/technus/tectech/util/Vec3Impl.java index 84e6497560..9ba96d741a 100644 --- a/src/main/java/com/github/technus/tectech/util/Vec3Impl.java +++ b/src/main/java/com/github/technus/tectech/util/Vec3Impl.java @@ -20,20 +20,6 @@ public class Vec3Impl implements Comparable { this(baseMetaTileEntity.getXCoord(),baseMetaTileEntity.getYCoord(),baseMetaTileEntity.getZCoord()); } - public boolean equals(Object o) { - if (this == o) { - return true; - } else if (o instanceof Vec3Impl) { - Vec3Impl vec3i = (Vec3Impl)o; - return val0 == vec3i.val0 && val1 == vec3i.val1 && val2 == vec3i.val2; - } - return false; - } - - public int hashCode() { - return (val1 + val2 * 31) * 31 + val0; - } - public int compareTo(Vec3Impl o) { return val1 == o.val1 ? val2 == o.val2 ? val0 - o.val0 : val2 - o.val2 : val1 - o.val1; } @@ -143,4 +129,18 @@ public class Vec3Impl implements Comparable { public Vec3Impl abs() { return new Vec3Impl(Math.abs(val0),Math.abs(val1),Math.abs(val2)); } + + public boolean equals(Object o) { + if (this == o) { + return true; + } else if (o instanceof Vec3Impl) { + Vec3Impl vec3i = (Vec3Impl)o; + return val0 == vec3i.val0 && val1 == vec3i.val1 && val2 == vec3i.val2; + } + return false; + } + + public int hashCode() { + return (val1 + val2 * 31) * 31 + val0; + } } \ No newline at end of file -- cgit From 43ca64a9e686b84d56225d1d5a08b81e637549b6 Mon Sep 17 00:00:00 2001 From: Tec Date: Sat, 25 Apr 2020 23:12:49 +0200 Subject: new structure api --- .../GT_MetaTileEntity_EM_essentiaDequantizer.java | 6 +- .../GT_MetaTileEntity_EM_essentiaQuantizer.java | 6 +- .../tectech/loader/ConstructableLoader.java | 4 +- .../alignment/enumerable/ExtendedFacing.java | 17 +- .../mechanics/constructable/IConstructable.java | 2 +- .../constructable/IMultiblockInfoContainer.java | 2 +- .../tectech/mechanics/constructable/Structure.java | 526 --------------------- .../tectech/mechanics/structure/IBlockAdder.java | 14 + .../mechanics/structure/IBlockPosConsumer.java | 7 + .../tectech/mechanics/structure/IHatchAdder.java | 14 + .../mechanics/structure/IStructureDefinition.java | 137 ++++++ .../mechanics/structure/IStructureElement.java | 47 ++ .../structure/IStructureElementProvider.java | 5 + .../mechanics/structure/IStructureFallback.java | 40 ++ .../structure/IStructureFallbackProvider.java | 40 ++ .../mechanics/structure/IStructureNavigate.java | 23 + .../tectech/mechanics/structure/ITileAdder.java | 12 + .../tectech/mechanics/structure/Structure.java | 265 +++++++++++ .../mechanics/structure/StructureDefinition.java | 170 +++++++ .../mechanics/structure/StructureUtility.java | 473 ++++++++++++++++++ .../thing/item/ConstructableTriggerItem.java | 13 +- .../multi/GT_MetaTileEntity_EM_annihilation.java | 6 +- .../multi/GT_MetaTileEntity_EM_bhg.java | 6 +- .../multi/GT_MetaTileEntity_EM_collider.java | 5 +- .../multi/GT_MetaTileEntity_EM_computer.java | 5 +- .../multi/GT_MetaTileEntity_EM_crafting.java | 6 +- .../multi/GT_MetaTileEntity_EM_dataBank.java | 6 +- .../multi/GT_MetaTileEntity_EM_decay.java | 5 +- .../multi/GT_MetaTileEntity_EM_dequantizer.java | 6 +- .../multi/GT_MetaTileEntity_EM_infuser.java | 6 +- .../multi/GT_MetaTileEntity_EM_junction.java | 5 +- .../multi/GT_MetaTileEntity_EM_quantizer.java | 6 +- .../multi/GT_MetaTileEntity_EM_research.java | 6 +- .../multi/GT_MetaTileEntity_EM_scanner.java | 5 +- .../multi/GT_MetaTileEntity_EM_stabilizer.java | 6 +- .../multi/GT_MetaTileEntity_EM_switch.java | 5 +- .../multi/GT_MetaTileEntity_EM_transformer.java | 41 +- .../multi/GT_MetaTileEntity_EM_wormhole.java | 6 +- .../multi/GT_MetaTileEntity_TM_microwave.java | 5 +- .../GT_MetaTileEntity_TM_proccessingStack.java | 4 +- .../multi/GT_MetaTileEntity_TM_teslaCoil.java | 5 +- .../base/GT_MetaTileEntity_MultiblockBase_EM.java | 25 +- .../metaTileEntity/multi/base/IHatchAdder.java | 8 - .../em_machine/GT_MetaTileEntity_EM_machine.java | 5 +- .../GT_MetaTileEntity_DebugStructureWriter.java | 35 +- .../java/com/github/technus/tectech/util/Util.java | 16 - .../com/github/technus/tectech/util/Vec3Impl.java | 28 +- 47 files changed, 1409 insertions(+), 676 deletions(-) delete mode 100644 src/main/java/com/github/technus/tectech/mechanics/constructable/Structure.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/IBlockAdder.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/IBlockPosConsumer.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/IHatchAdder.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementProvider.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/IStructureFallback.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/IStructureFallbackProvider.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/IStructureNavigate.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/ITileAdder.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/IHatchAdder.java diff --git a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaDequantizer.java b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaDequantizer.java index eb9b97deee..df5054ab4a 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaDequantizer.java +++ b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaDequantizer.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.compatibility.thaumcraft.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.definitions.ePrimalAspectDefinition; @@ -11,7 +11,7 @@ import com.github.technus.tectech.thing.casing.TT_Container_Casings; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_quantizer; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; @@ -143,7 +143,7 @@ public class GT_MetaTileEntity_EM_essentiaDequantizer extends GT_MetaTileEntity_ } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaQuantizer.java b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaQuantizer.java index 0259aec7a7..d48c345e8e 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaQuantizer.java +++ b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaQuantizer.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.compatibility.thaumcraft.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.definitions.ePrimalAspectDefinition; @@ -11,7 +11,7 @@ import com.github.technus.tectech.thing.casing.TT_Container_Casings; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_quantizer; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; @@ -147,7 +147,7 @@ public class GT_MetaTileEntity_EM_essentiaQuantizer extends GT_MetaTileEntity_Mu } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/loader/ConstructableLoader.java b/src/main/java/com/github/technus/tectech/loader/ConstructableLoader.java index 93752cc02f..665889dc1f 100644 --- a/src/main/java/com/github/technus/tectech/loader/ConstructableLoader.java +++ b/src/main/java/com/github/technus/tectech/loader/ConstructableLoader.java @@ -2,7 +2,7 @@ package com.github.technus.tectech.loader; import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; import com.github.technus.tectech.mechanics.constructable.IMultiblockInfoContainer; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.Structure; import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_ElectricBlastFurnace; import net.minecraft.block.Block; import net.minecraft.item.ItemStack; @@ -39,7 +39,7 @@ public class ConstructableLoader implements Runnable { } @Override - public String[] getDescription(int stackSize) { + public String[] getDescription(ItemStack stackSize) { return desc; } }); diff --git a/src/main/java/com/github/technus/tectech/mechanics/alignment/enumerable/ExtendedFacing.java b/src/main/java/com/github/technus/tectech/mechanics/alignment/enumerable/ExtendedFacing.java index 5c8c902484..2a93bcc540 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/alignment/enumerable/ExtendedFacing.java +++ b/src/main/java/com/github/technus/tectech/mechanics/alignment/enumerable/ExtendedFacing.java @@ -12,7 +12,6 @@ import static com.github.technus.tectech.mechanics.alignment.IAlignment.FLIPS_CO import static com.github.technus.tectech.mechanics.alignment.IAlignment.ROTATIONS_COUNT; import static java.lang.Math.abs; import static java.util.Arrays.stream; -import static java.util.stream.Collectors.reducing; import static java.util.stream.Collectors.toMap; public enum ExtendedFacing { @@ -144,32 +143,32 @@ public enum ExtendedFacing { switch (direction){ case DOWN: a= ForgeDirection.WEST; - b= ForgeDirection.NORTH; + b= ForgeDirection.SOUTH; c= ForgeDirection.UP; break; case UP: a= ForgeDirection.EAST; - b= ForgeDirection.NORTH; + b= ForgeDirection.SOUTH; c= ForgeDirection.DOWN; break; case NORTH: a= ForgeDirection.WEST; - b= ForgeDirection.UP; + b= ForgeDirection.DOWN; c= ForgeDirection.SOUTH; break; case SOUTH: a= ForgeDirection.EAST; - b= ForgeDirection.UP; + b= ForgeDirection.DOWN; c= ForgeDirection.NORTH; break; case WEST: a= ForgeDirection.SOUTH; - b= ForgeDirection.UP; + b= ForgeDirection.DOWN; c= ForgeDirection.EAST; break; case EAST: a= ForgeDirection.NORTH; - b= ForgeDirection.UP; + b= ForgeDirection.DOWN; c= ForgeDirection.WEST; break; default:throw new RuntimeException("Is impossible..."); @@ -187,7 +186,7 @@ public enum ExtendedFacing { default:throw new RuntimeException("Even more impossible..."); } switch (rotation) { - case COUNTER_CLOCKWISE: { + case CLOCKWISE: { ForgeDirection _a=a; a =b; b =_a.getOpposite(); @@ -197,7 +196,7 @@ public enum ExtendedFacing { a=a.getOpposite(); b=b.getOpposite(); break; - case CLOCKWISE: { + case COUNTER_CLOCKWISE: { ForgeDirection _a=a; a =b.getOpposite(); b =_a; diff --git a/src/main/java/com/github/technus/tectech/mechanics/constructable/IConstructable.java b/src/main/java/com/github/technus/tectech/mechanics/constructable/IConstructable.java index d7c3c86098..1de0381f1f 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/constructable/IConstructable.java +++ b/src/main/java/com/github/technus/tectech/mechanics/constructable/IConstructable.java @@ -11,6 +11,6 @@ public interface IConstructable { void construct(ItemStack stackSize, boolean hintsOnly); @SideOnly(Side.CLIENT) - String[] getStructureDescription(int stackSize); + String[] getStructureDescription(ItemStack stackSize); } diff --git a/src/main/java/com/github/technus/tectech/mechanics/constructable/IMultiblockInfoContainer.java b/src/main/java/com/github/technus/tectech/mechanics/constructable/IMultiblockInfoContainer.java index 29769fafb8..2506342f72 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/constructable/IMultiblockInfoContainer.java +++ b/src/main/java/com/github/technus/tectech/mechanics/constructable/IMultiblockInfoContainer.java @@ -26,5 +26,5 @@ public interface IMultiblockInfoContainer { void construct(ItemStack stackSize, boolean hintsOnly, TileEntity tileEntity, ExtendedFacing aSide); @SideOnly(Side.CLIENT) - String[] getDescription(int stackSize); + String[] getDescription(ItemStack stackSize); } diff --git a/src/main/java/com/github/technus/tectech/mechanics/constructable/Structure.java b/src/main/java/com/github/technus/tectech/mechanics/constructable/Structure.java deleted file mode 100644 index 00ffb32525..0000000000 --- a/src/main/java/com/github/technus/tectech/mechanics/constructable/Structure.java +++ /dev/null @@ -1,526 +0,0 @@ -package com.github.technus.tectech.mechanics.constructable; - -import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; -import com.github.technus.tectech.thing.casing.TT_Container_Casings; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; -import static gregtech.api.enums.GT_Values.E; - -public class Structure { - private static final Pattern matchE_ = Pattern.compile("(E,(E,)+)"); - - private Structure(){} - - //Check Machine Structure based on string[][] (effectively char[][][]), ond offset of the controller - //This only checks for REGULAR BLOCKS! - public static boolean checker( - String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR-1 blocks - Block[] blockType,//use numbers 0-9 for casing types - byte[] blockMeta,//use numbers 0-9 for casing types - IHatchAdder[] addingMethods, - short[] casingTextures, - Block[] blockTypeFallback,//use numbers 0-9 for casing types - byte[] blockMetaFallback,//use numbers 0-9 for casing types - int horizontalOffset, int verticalOffset, int depthOffset, - IGregTechTileEntity aBaseMetaTileEntity, - ExtendedFacing extendedFacing, - boolean forceCheck) { - World world = aBaseMetaTileEntity.getWorld(); - if (world.isRemote) { - return false; - } - //TE Rotation - if(extendedFacing==null){ - extendedFacing=ExtendedFacing.of(ForgeDirection.getOrientation(aBaseMetaTileEntity.getFrontFacing())); - } - - IGregTechTileEntity igt; - - int[] xyz =new int[3]; - int[] abc =new int[3]; - int pointer; - int baseX = aBaseMetaTileEntity.getXCoord(), - baseZ = aBaseMetaTileEntity.getZCoord(), - baseY = aBaseMetaTileEntity.getYCoord(); - //a,b,c - relative to block face! - //x,y,z - relative to block position on map! - //yPos - absolute height of checked block - - //perform your duties - abc[2] = -depthOffset; - for (String[] _structure : structure) {//front to back - abc[1] = verticalOffset; - for (String __structure : _structure) {//top to bottom - abc[0] = -horizontalOffset; - for (char block : __structure.toCharArray()) {//left to right - if (block < ' ') {//Control chars allow skipping - abc[1] -= block; - break; - } else if (block > '@') {//characters allow to skip check A-1 skip, B-2 skips etc. - abc[0] += block - '@'; - }//else if (block < '+')//used to mark THINGS - // a++; - else if (block == '.') { - abc[0]++; - } else { - //get x y z from rotation - extendedFacing.getWorldOffset(abc,xyz); - xyz[0]+=baseX; - xyz[1]+=baseY; - xyz[2]+=baseZ; - - //that must be here since in some cases other axis (b,c) controls y - if (xyz[1] < 0 || xyz[1] >= 256) { - return false; - } - - //Check block - if (world.blockExists(xyz[0], xyz[1], xyz[2])) {//this actually checks if the chunk is loaded at this pos - switch (block) { - case '-'://must be air - if (world.getBlock(xyz[0], xyz[1], xyz[2]).getMaterial() != Material.air) { - return false; - } - break; - case '+'://must not be air - if (world.getBlock(xyz[0], xyz[1], xyz[2]).getMaterial() == Material.air) { - return false; - } - break; - default://check for block (countable) - if ((pointer = block - '0') >= 0) { - //countable air -> net.minecraft.block.BlockAir - if (world.getBlock(xyz[0], xyz[1], xyz[2]) != blockType[pointer]) { - if (DEBUG_MODE) { - TecTech.LOGGER.info("Struct-block-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + world.getBlock(xyz[0], xyz[1], xyz[2]).getUnlocalizedName() + ' ' + blockType[pointer].getUnlocalizedName()); - } - return false; - } - if (world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) != blockMeta[pointer]) { - if (DEBUG_MODE) { - TecTech.LOGGER.info("Struct-meta-id-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) + ' ' + blockMeta[pointer]); - } - return false; - } - } else //noinspection ConstantConditions - if ((pointer = block - ' ') >= 0) { - igt = aBaseMetaTileEntity.getIGregTechTileEntity(xyz[0], xyz[1], xyz[2]); - if (igt == null || !addingMethods[pointer].apply(igt, casingTextures[pointer])) { - if (world.getBlock(xyz[0], xyz[1], xyz[2]) != blockTypeFallback[pointer]) { - if (DEBUG_MODE) { - TecTech.LOGGER.info("Fallback-struct-block-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + world.getBlock(xyz[0], xyz[1], xyz[2]).getUnlocalizedName() + ' ' + (blockTypeFallback[pointer] == null ? "null" : blockTypeFallback[pointer].getUnlocalizedName())); - } - return false; - } - if (world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) != blockMetaFallback[pointer]) { - if (DEBUG_MODE) { - TecTech.LOGGER.info("Fallback-Struct-meta-id-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) + ' ' + blockMetaFallback[pointer]); - } - return false; - } - } - } - } - } else if (forceCheck) { - return false; - } - abc[0]++;//block in horizontal layer - } - } - abc[1]--;//horizontal layer - } - abc[2]++;//depth - } - return true; - } - - public static boolean builder(String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR+1 blocks - Block[] blockType,//use numbers 0-9 for casing types - byte[] blockMeta,//use numbers 0-9 for casing types - int horizontalOffset, int verticalOffset, int depthOffset, - IGregTechTileEntity tileEntity, ExtendedFacing extendedFacing, boolean hintsOnly) { - return builder(structure, blockType, blockMeta, horizontalOffset, verticalOffset, depthOffset, - tileEntity.getWorld(),tileEntity.getXCoord(),tileEntity.getYCoord(),tileEntity.getZCoord(), - extendedFacing, hintsOnly); - } - - public static boolean builder(String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR+1 blocks - Block[] blockType,//use numbers 0-9 for casing types - byte[] blockMeta,//use numbers 0-9 for casing types - int horizontalOffset, int verticalOffset, int depthOffset, - TileEntity tileEntity, ExtendedFacing extendedFacing, boolean hintsOnly) { - return builder(structure, blockType, blockMeta, horizontalOffset, verticalOffset, depthOffset, - tileEntity.getWorldObj(),tileEntity.xCoord,tileEntity.yCoord,tileEntity.zCoord, - extendedFacing, hintsOnly); - } - - public static boolean builder(String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR+1 blocks - Block[] blockType,//use numbers 0-9 for casing types - byte[] blockMeta,//use numbers 0-9 for casing types - int horizontalOffset, int verticalOffset, int depthOffset, - World world,int baseX,int baseZ,int baseY, ExtendedFacing extendedFacing, boolean hintsOnly) { - if (world==null || (!world.isRemote && hintsOnly)) { - return false; - } - - //TE Rotation - int[] xyz =new int[3]; - int[] abc =new int[3]; - int pointer; - - //a,b,c - relative to block face! - //x,y,z - relative to block position on map! - - //perform your duties - abc[2] = -depthOffset; - for (String[] _structure : structure) {//front to back - abc[1] = verticalOffset; - for (String __structure : _structure) {//top to bottom - abc[0] = -horizontalOffset; - for (char block : __structure.toCharArray()) {//left to right - if (block < ' ') {//Control chars allow skipping - abc[1] -= block; - break; - } - if (block > '@')//characters allow to skip check a-1 skip, b-2 skips etc. - { - abc[0] += block - '@'; - }//else if (block < '+')//used to mark THINGS - // a++; - else if (block == '.')// this TE - { - abc[0]++; - } else { - //get x y z from rotation - extendedFacing.getWorldOffset(abc,xyz); - xyz[0]+=baseX; - xyz[1]+=baseY; - xyz[2]+=baseZ; - - //that must be here since in some cases other axis (b,c) controls y - if (xyz[1] < 0 || xyz[1] >= 256) { - return false; - } - - //Check block - if (world.blockExists(xyz[0], xyz[1], xyz[2])) {//this actually checks if the chunk is loaded - if (hintsOnly) { - switch (block) { - case '-'://must be air - TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, 13); - break; - case '+'://must not be air - TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, 14); - break; - default: //check for block - if ((pointer = block - '0') >= 0) { - if (world.getBlock(xyz[0], xyz[1], xyz[2]) != blockType[pointer] || world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) != blockMeta[pointer]) { - TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], blockType[pointer], blockMeta[pointer]); - } - } else if ((pointer = block - ' ') >= 0) { - if (pointer >= 0 && pointer < 12) { - TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, pointer); - } else { - TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, 12); - } - } else { - TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, 15); - } - } - } else { - switch (block) { - case '-'://must be air - world.setBlock(xyz[0], xyz[1], xyz[2], Blocks.air, 0, 2); - break; - case '+'://must not be air - world.setBlock(xyz[0], xyz[1], xyz[2], TT_Container_Casings.sBlockCasingsTT, 14, 2); - break; - default: //check for block - if ((pointer = block - '0') >= 0) { - world.setBlock(xyz[0], xyz[1], xyz[2], blockType[pointer], blockMeta[pointer], 2); - } else if (block - ' ' < 0) { - world.setBlock(xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, 15, 2); - } //else { - //switch(pointer){ - // case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: - // world.setBlock(x, y, z, TT_Container_Casings.sHintCasingsTT, pointer, 2); break; - // default:world.setBlock(x, y, z, TT_Container_Casings.sHintCasingsTT, 12, 2); - //} - //} - } - } - } - abc[0]++;//block in horizontal layer - } - } - abc[1]--;//horizontal layer - } - abc[2]++;//depth - } - return true; - } - - - public static String[] writer(IGregTechTileEntity aBaseMetaTileEntity, - int horizontalOffset, int verticalOffset, int depthOffset, - int horizontalSize, int verticalSize, int depthSize, boolean ignoreAir) { - //TE Rotation - byte facing = aBaseMetaTileEntity.getFrontFacing(); - World world = aBaseMetaTileEntity.getWorld(); - if (world.isRemote) { - return new String[]{"Not at Client m8"}; - } - - ItemStack[] array = new ItemStack[10]; - - int x, y, z, a, b, c; - int - baseX = aBaseMetaTileEntity.getXCoord(), - baseZ = aBaseMetaTileEntity.getZCoord(), - baseY = aBaseMetaTileEntity.getYCoord(); - //a,b,c - relative to block face! - //x,y,z - relative to block position on map! - //yPos - absolute height of checked block - - //perform your duties - #1 - count block types - c = -depthOffset; - for (int cz = 0; cz < depthSize; cz++) {//front to back - b = verticalOffset; - for (int by = 0; by < verticalSize; by++) {//top to bottom - a = -horizontalOffset; - for (int az = 0; az < horizontalSize; az++) {//left to right - //get x y z from rotation - switch (facing) {//translation - case 4: - x = baseX + c; - z = baseZ + a; - y = baseY + b; - break; - case 3: - x = baseX + a; - z = baseZ - c; - y = baseY + b; - break; - case 5: - x = baseX - c; - z = baseZ - a; - y = baseY + b; - break; - case 2: - x = baseX - a; - z = baseZ + c; - y = baseY + b; - break; - //Things get odd if the block faces up or down... - case 1: - x = baseX + a; - z = baseZ + b; - y = baseY - c; - break;//similar to 3 - case 0: - x = baseX - a; - z = baseZ - b; - y = baseY + c; - break;//similar to 2 - default: - return new String[]{"Invalid rotation"}; - } - - //that must be here since in some cases other axis (b,c) controls y - if (y < 0 || y >= 256) { - return new String[]{"Invalid position"}; - } - - //Check block - Block block = world.getBlock(x, y, z); - int meta = world.getBlockMetadata(x, y, z); - - if (!block.hasTileEntity(meta) && block.getMaterial() != Material.air) { - boolean err = true; - ItemStack is = new ItemStack(block, 1, meta); - for (int i = 0; i < array.length; i++) { - if (array[i] == null) { - array[i] = is; - err = false; - break; - } else if (is.getItem() == array[i].getItem() && is.getItemDamage() == array[i].getItemDamage()) { - err = false; - break; - } - } - if (err) { - return new String[]{"Too much different blocks"}; - } - } - - a++;//block in horizontal layer - } - b--;//horizontal layer - } - c++;//depth - } - - List output = new ArrayList<>(); - - output.add("Offsets: " + horizontalOffset + ' ' + verticalOffset + ' ' + depthOffset); - output.add("Sizes: " + horizontalSize + ' ' + verticalSize + ' ' + depthSize); - output.add(""); - - output.add("ID[]: Name[]"); - output.add(""); - for (int i = 0; i < array.length; i++) { - if (array[i] != null) { - output.add(i + ": " + array[i].getDisplayName()); - } - } - output.add(""); - output.add("ID[]: Block[] BlockMetaID[]"); - output.add(""); - for (int i = 0; i < array.length; i++) { - if (array[i] != null) { - output.add(i + ": " + array[i].getItem().getUnlocalizedName() + ' ' + array[i].getItemDamage()); - } - } - output.add(""); - output.add("String[][]"); - //perform your duties - #2 - write strings - output.add("{"); - c = -depthOffset; - for (int cz = 0; cz < depthSize; cz++) {//front to back - b = verticalOffset; - StringBuilder addMe = new StringBuilder().append('{'); - for (int by = 0; by < verticalSize; by++) {//top to bottom - a = -horizontalOffset; - StringBuilder line = new StringBuilder(); - for (int az = 0; az < horizontalSize; az++) {//left to right - //get x y z from rotation - switch (facing) {//translation - case 4: - x = baseX + c; - z = baseZ + a; - y = baseY + b; - break; - case 3: - x = baseX + a; - z = baseZ - c; - y = baseY + b; - break; - case 5: - x = baseX - c; - z = baseZ - a; - y = baseY + b; - break; - case 2: - x = baseX - a; - z = baseZ + c; - y = baseY + b; - break; - //Things get odd if the block faces up or down... - case 1: - x = baseX + a; - z = baseZ + b; - y = baseY - c; - break;//similar to 3 - case 0: - x = baseX - a; - z = baseZ - b; - y = baseY + c; - break;//similar to 2 - default: - return new String[]{"Invalid rotation"}; - } - - //Check block - Block block = world.getBlock(x, y, z); - int meta = world.getBlockMetadata(x, y, z); - - if (a == 0 && b == 0 && c == 0) { - line.append('.'); - } else if (block.getMaterial() == Material.air) { - line.append('-'); - } else if (block.hasTileEntity(meta)) { - line.append('*'); - } else { - ItemStack stack = new ItemStack(block, 1, meta); - String str = "?";//OH YEAH NPEs - for (int i = 0; i < array.length; i++) { - if (array[i] != null && stack.getItem() == array[i].getItem() && stack.getItemDamage() == array[i].getItemDamage()) { - str = Integer.toString(i); - break; - } - } - line.append(str); - } - a++;//block in horizontal layer - } - if (ignoreAir) { - StringBuilder builder = new StringBuilder(); - char temp = '@'; - for (char ch : line.toString().toCharArray()) { - if (ch == '-') { - temp += 1; - if (temp == '~') { - builder.append('~'); - temp = '@'; - } - } else { - if (temp > '@') { - builder.append(temp); - temp = '@'; - } - builder.append(ch); - } - } - while (builder.length() > 0 && builder.charAt(builder.length() - 1) == '~') { - builder.deleteCharAt(builder.length() - 1); - } - if (builder.length() == 0) { - builder.append("E,"); - } else { - builder.insert(0, '"'); - builder.append('"').append(','); - } - addMe.append(builder); - } else { - if (line.length() == 0) { - line.append("E,"); - } else { - line.insert(0, '"'); - line.append('"').append(','); - } - addMe.append(line); - } - b--;//horizontal layer - } - //region less verbose - addMe.append('}').append(','); - String builtStr = addMe.toString().replaceAll("(E,)+(?=})", E/*Remove Empty strings at end*/); - Matcher matcher = matchE_.matcher(builtStr); - while (matcher.find()) { - byte lenEE = (byte) (matcher.group(1).length() >> 1); - builtStr = builtStr.replaceFirst("E,(E,)+", "\"\\\\u00" + String.format("%02X", lenEE - 1) + "\","); - //builtStr=builtStr.replaceFirst("E,(E,)+\"","\"\\\\u00"+String.format("%02X", lenEE)); - } - //endregion - output.add(builtStr); - c++;//depth - } - output.add("}"); - return output.toArray(new String[0]); - } -} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IBlockAdder.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IBlockAdder.java new file mode 100644 index 0000000000..3dda99fed2 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IBlockAdder.java @@ -0,0 +1,14 @@ +package com.github.technus.tectech.mechanics.structure; + + +import net.minecraft.block.Block; + +public interface IBlockAdder { + /** + * Callback on block added + * @param block block attempted to add + * @param meta meta of block attempted to add + * @return is structure still valid + */ + boolean apply(Block block, Integer meta); +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IBlockPosConsumer.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IBlockPosConsumer.java new file mode 100644 index 0000000000..c3ea2d3e3f --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IBlockPosConsumer.java @@ -0,0 +1,7 @@ +package com.github.technus.tectech.mechanics.structure; + +import net.minecraft.world.World; + +public interface IBlockPosConsumer { + void consume(World world, int x, int y, int z); +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IHatchAdder.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IHatchAdder.java new file mode 100644 index 0000000000..10d4c398ec --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IHatchAdder.java @@ -0,0 +1,14 @@ +package com.github.technus.tectech.mechanics.structure; + + +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; + +public interface IHatchAdder { + /** + * Callback to add hatch + * @param iGregTechTileEntity hatch + * @param aShort requested texture index, or null if not... + * @return managed to add hatch (structure still valid) + */ + boolean apply(IGregTechTileEntity iGregTechTileEntity, Short aShort); +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java new file mode 100644 index 0000000000..656151dc86 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java @@ -0,0 +1,137 @@ +package com.github.technus.tectech.mechanics.structure; + +import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; +import net.minecraft.world.World; + +public interface IStructureDefinition { + /** + * Used internally + * @param name same name as for other methods here + * @return the array of elements to process + */ + IStructureElementProvider[] getElementsFor(String name); + + default boolean check(T object,String piece, World world, ExtendedFacing extendedFacing, + int basePositionX, int basePositionY, int basePositionZ, + int basePositionA, int basePositionB, int basePositionC, + boolean forceCheckAllBlocks){ + return iterate(object,getElementsFor(piece), world, extendedFacing, basePositionX, basePositionY, basePositionZ, + basePositionA, basePositionB, basePositionC,false,forceCheckAllBlocks); + } + + default boolean hints(T object,String piece, World world, ExtendedFacing extendedFacing, + int basePositionX, int basePositionY, int basePositionZ, + int basePositionA, int basePositionB, int basePositionC) { + return iterate(object,getElementsFor(piece), world, extendedFacing, basePositionX, basePositionY, basePositionZ, + basePositionA, basePositionB, basePositionC,true,null); + } + + default boolean build(T object,String piece, World world, ExtendedFacing extendedFacing, + int basePositionX, int basePositionY, int basePositionZ, + int basePositionA, int basePositionB, int basePositionC) { + return iterate(object,getElementsFor(piece), world, extendedFacing, basePositionX, basePositionY, basePositionZ, + basePositionA, basePositionB, basePositionC,false,null); + } + + default boolean buildOrHints(T object,String piece, World world, ExtendedFacing extendedFacing, + int basePositionX, int basePositionY, int basePositionZ, + int basePositionA, int basePositionB, int basePositionC, + boolean hintsOnly){ + return iterate(object,getElementsFor(piece), world, extendedFacing, basePositionX, basePositionY, basePositionZ, + basePositionA, basePositionB, basePositionC,hintsOnly,null); + } + + static boolean iterate(T object, IStructureElementProvider[] elements, World world, ExtendedFacing extendedFacing, + int basePositionX, int basePositionY, int basePositionZ, + int basePositionA, int basePositionB, int basePositionC, + boolean hintsOnly, Boolean checkBlocksIfNotNullForceCheckAllIfTrue){ + if(world.isRemote ^ hintsOnly){ + return false; + } + + //change base position to base offset + basePositionA=-basePositionA; + basePositionB=-basePositionB; + basePositionC=-basePositionC; + + int[] abc = new int[]{basePositionA,basePositionB,basePositionC}; + int[] xyz = new int[3]; + + if(checkBlocksIfNotNullForceCheckAllIfTrue!=null){ + if(checkBlocksIfNotNullForceCheckAllIfTrue){ + for (IStructureElementProvider elementProvider : elements) { + IStructureElement element=elementProvider.getStructureElement(object); + extendedFacing.getWorldOffset(abc, xyz); + xyz[0] += basePositionX; + xyz[1] += basePositionY; + xyz[2] += basePositionZ; + + if (world.blockExists(xyz[0], xyz[1], xyz[2])) { + if(!element.check(object, world, xyz[0], xyz[1], xyz[2])){ + return false; + } + }else { + return false; + } + + abc[0] =(element.resetA()?basePositionA:abc[0])+element.getStepA(); + abc[1] =(element.resetB()?basePositionA:abc[1])+element.getStepB(); + abc[2] =(element.resetC()?basePositionA:abc[2])+element.getStepC(); + } + } else { + for (IStructureElementProvider elementProvider : elements) { + IStructureElement element=elementProvider.getStructureElement(object); + extendedFacing.getWorldOffset(abc, xyz); + xyz[0] += basePositionX; + xyz[1] += basePositionY; + xyz[2] += basePositionZ; + + if (world.blockExists(xyz[0], xyz[1], xyz[2])) { + if(!element.check(object, world, xyz[0], xyz[1], xyz[2])){ + return false; + } + } + + abc[0] =(element.resetA()?basePositionA:abc[0])+element.getStepA(); + abc[1] =(element.resetB()?basePositionA:abc[1])+element.getStepB(); + abc[2] =(element.resetC()?basePositionA:abc[2])+element.getStepC(); + } + } + }else { + if(hintsOnly) { + for (IStructureElementProvider elementProvider : elements) { + IStructureElement element=elementProvider.getStructureElement(object); + extendedFacing.getWorldOffset(abc, xyz); + xyz[0] += basePositionX; + xyz[1] += basePositionY; + xyz[2] += basePositionZ; + + if (world.blockExists(xyz[0], xyz[1], xyz[2])) { + element.spawnHint(object, world, xyz[0], xyz[1], xyz[2]); + } + + abc[0] =(element.resetA()?basePositionA:abc[0])+element.getStepA(); + abc[1] =(element.resetB()?basePositionA:abc[1])+element.getStepB(); + abc[2] =(element.resetC()?basePositionA:abc[2])+element.getStepC(); + } + } else { + for (IStructureElementProvider elementProvider : elements) { + IStructureElement element=elementProvider.getStructureElement(object); + extendedFacing.getWorldOffset(abc, xyz); + xyz[0] += basePositionX; + xyz[1] += basePositionY; + xyz[2] += basePositionZ; + + if (world.blockExists(xyz[0], xyz[1], xyz[2])) { + element.placeBlock(object, world, xyz[0], xyz[1], xyz[2]); + } + + abc[0] =(element.resetA()?basePositionA:abc[0])+element.getStepA(); + abc[1] =(element.resetB()?basePositionA:abc[1])+element.getStepB(); + abc[2] =(element.resetC()?basePositionA:abc[2])+element.getStepC(); + } + } + } + return true; + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java new file mode 100644 index 0000000000..d33eac4119 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java @@ -0,0 +1,47 @@ +package com.github.technus.tectech.mechanics.structure; + +import net.minecraft.world.World; + +/** + * Use StructureUtility to instantiate + */ +public interface IStructureElement extends IStructureElementProvider { + boolean check(T t,World world,int x,int y,int z); + + default boolean spawnHint(T t,World world,int x,int y,int z){ + return false; + } + + default boolean placeBlock(T t,World world,int x,int y,int z){ + return false; + } + + default int getStepA(){ + return 1; + } + + default int getStepB(){ + return 0; + } + + default int getStepC(){ + return 0; + } + + default boolean resetA(){ + return false; + } + + default boolean resetB(){ + return false; + } + + default boolean resetC(){ + return false; + } + + @Override + default IStructureElement getStructureElement(T object){ + return this; + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementProvider.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementProvider.java new file mode 100644 index 0000000000..b38c2164c3 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementProvider.java @@ -0,0 +1,5 @@ +package com.github.technus.tectech.mechanics.structure; + +public interface IStructureElementProvider { + IStructureElement getStructureElement(T object); +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureFallback.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureFallback.java new file mode 100644 index 0000000000..354aaf60e9 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureFallback.java @@ -0,0 +1,40 @@ +package com.github.technus.tectech.mechanics.structure; + +import net.minecraft.world.World; + +/** + * Use StructureUtility to instantiate + */ +public interface IStructureFallback extends IStructureElement { + IStructureElement[] fallbacks(); + + @Override + default boolean check(T t, World world, int x, int y, int z){ + for (IStructureElement fallback : fallbacks()) { + if (fallback.check(t, world, x, y, z)) { + return true; + } + } + return false; + } + + @Override + default boolean spawnHint(T t, World world, int x, int y, int z) { + for (IStructureElement fallback : fallbacks()) { + if (fallback.spawnHint(t, world, x, y, z)) { + return true; + } + } + return false; + } + + @Override + default boolean placeBlock(T t, World world, int x, int y, int z) { + for (IStructureElement fallback : fallbacks()) { + if (fallback.placeBlock(t, world, x, y, z)) { + return true; + } + } + return false; + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureFallbackProvider.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureFallbackProvider.java new file mode 100644 index 0000000000..c0c24eaec4 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureFallbackProvider.java @@ -0,0 +1,40 @@ +package com.github.technus.tectech.mechanics.structure; + +import net.minecraft.world.World; + +/** + * Use StructureUtility to instantiate + */ +public interface IStructureFallbackProvider extends IStructureElement { + IStructureElementProvider[] fallbacks(); + + @Override + default boolean check(T t,World world, int x, int y, int z){ + for (IStructureElementProvider fallback : fallbacks()) { + if (fallback.getStructureElement(t).check(t, world, x, y, z)) { + return true; + } + } + return false; + } + + @Override + default boolean spawnHint(T t,World world, int x, int y, int z) { + for (IStructureElementProvider fallback : fallbacks()) { + if (fallback.getStructureElement(t).spawnHint(t, world, x, y, z)) { + return true; + } + } + return false; + } + + @Override + default boolean placeBlock(T t,World world, int x, int y, int z) { + for (IStructureElementProvider fallback : fallbacks()) { + if (fallback.getStructureElement(t).placeBlock(t, world, x, y, z)) { + return true; + } + } + return false; + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureNavigate.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureNavigate.java new file mode 100644 index 0000000000..bba3dc5239 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureNavigate.java @@ -0,0 +1,23 @@ +package com.github.technus.tectech.mechanics.structure; + +import net.minecraft.world.World; + +/** + * Use StructureUtility to instantiate + */ +public interface IStructureNavigate extends IStructureElement { + @Override + default boolean check(T t, World world, int x, int y, int z){ + return true; + } + + @Override + default boolean spawnHint(T t, World world, int x, int y, int z) { + return true; + } + + @Override + default boolean placeBlock(T t, World world, int x, int y, int z) { + return true; + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/ITileAdder.java b/src/main/java/com/github/technus/tectech/mechanics/structure/ITileAdder.java new file mode 100644 index 0000000000..9d983e1c4d --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/ITileAdder.java @@ -0,0 +1,12 @@ +package com.github.technus.tectech.mechanics.structure; + +import net.minecraft.tileentity.TileEntity; + +public interface ITileAdder { + /** + * Callback to add hatch + * @param tileEntity tile + * @return managed to add hatch (structure still valid) + */ + boolean apply(TileEntity tileEntity); +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java b/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java new file mode 100644 index 0000000000..77c47ad19e --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java @@ -0,0 +1,265 @@ +package com.github.technus.tectech.mechanics.structure; + +import com.github.technus.tectech.TecTech; +import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; +import com.github.technus.tectech.thing.casing.TT_Container_Casings; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import java.util.regex.Pattern; + +import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; + +@Deprecated +public class Structure { + private static final Pattern MATCH_E = Pattern.compile("(E,(E,)+)"); + + private Structure(){} + + //Check Machine Structure based on string[][] (effectively char[][][]), ond offset of the controller + //This only checks for REGULAR BLOCKS! + public static boolean checker( + String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR-1 blocks + Block[] blockType,//use numbers 0-9 for casing types + byte[] blockMeta,//use numbers 0-9 for casing types + IHatchAdder[] addingMethods, + short[] casingTextures, + Block[] blockTypeFallback,//use numbers 0-9 for casing types + byte[] blockMetaFallback,//use numbers 0-9 for casing types + int horizontalOffset, int verticalOffset, int depthOffset, + IGregTechTileEntity aBaseMetaTileEntity, + ExtendedFacing extendedFacing, + boolean forceCheck) { + World world = aBaseMetaTileEntity.getWorld(); + if (world.isRemote) { + return false; + } + //TE Rotation + if (extendedFacing == null) { + extendedFacing = ExtendedFacing.of(ForgeDirection.getOrientation(aBaseMetaTileEntity.getFrontFacing())); + } + + IGregTechTileEntity igt; + + int[] xyz = new int[3]; + int[] abc = new int[3]; + int pointer; + int baseX = aBaseMetaTileEntity.getXCoord(), + baseZ = aBaseMetaTileEntity.getZCoord(), + baseY = aBaseMetaTileEntity.getYCoord(); + //a,b,c - relative to block face! + //x,y,z - relative to block position on map! + //yPos - absolute height of checked block + + //perform your duties + abc[2] = -depthOffset; + for (String[] _structure : structure) {//front to back + abc[1] = -verticalOffset; + for (String __structure : _structure) {//top to bottom + abc[0] = -horizontalOffset; + for (char block : __structure.toCharArray()) {//left to right + if (block < ' ') { + //Control chars allow skipping + abc[1] += block; + break; + } else if (block > '@') { + //characters allow to skip check A-1 skip, B-2 skips etc. + abc[0] += block - '@'; + }//else if (block < '+')//used to mark THINGS + // a++; + else if (block == '.') { + abc[0]++; + } else { + //get x y z from rotation + extendedFacing.getWorldOffset(abc, xyz); + xyz[0] += baseX; + xyz[1] += baseY; + xyz[2] += baseZ; + + //that must be here since in some cases other axis (b,c) controls y + if (xyz[1] < 0 || xyz[1] >= 256) { + return false; + } + + //Check block + if (world.blockExists(xyz[0], xyz[1], xyz[2])) {//this actually checks if the chunk is loaded at this pos + switch (block) { + case '-'://must be air + if (world.getBlock(xyz[0], xyz[1], xyz[2]).getMaterial() != Material.air) { + return false; + } + break; + case '+'://must not be air + if (world.getBlock(xyz[0], xyz[1], xyz[2]).getMaterial() == Material.air) { + return false; + } + break; + default://check for block (countable) + if ((pointer = block - '0') >= 0) { + //countable air -> net.minecraft.block.BlockAir + if (world.getBlock(xyz[0], xyz[1], xyz[2]) != blockType[pointer]) { + if (DEBUG_MODE) { + TecTech.LOGGER.info("Struct-block-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + world.getBlock(xyz[0], xyz[1], xyz[2]).getUnlocalizedName() + ' ' + blockType[pointer].getUnlocalizedName()); + } + return false; + } + if (world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) != blockMeta[pointer]) { + if (DEBUG_MODE) { + TecTech.LOGGER.info("Struct-meta-id-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) + ' ' + blockMeta[pointer]); + } + return false; + } + } else if ((pointer = block - ' ') >= 0) { + igt = aBaseMetaTileEntity.getIGregTechTileEntity(xyz[0], xyz[1], xyz[2]); + if (igt == null || !addingMethods[pointer].apply(igt, casingTextures[pointer])) { + if (world.getBlock(xyz[0], xyz[1], xyz[2]) != blockTypeFallback[pointer]) { + if (DEBUG_MODE) { + TecTech.LOGGER.info("Fallback-struct-block-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + world.getBlock(xyz[0], xyz[1], xyz[2]).getUnlocalizedName() + ' ' + (blockTypeFallback[pointer] == null ? "null" : blockTypeFallback[pointer].getUnlocalizedName())); + } + return false; + } + if (world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) != blockMetaFallback[pointer]) { + if (DEBUG_MODE) { + TecTech.LOGGER.info("Fallback-Struct-meta-id-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) + ' ' + blockMetaFallback[pointer]); + } + return false; + } + } + } + } + } else if (forceCheck) { + return false; + } + abc[0]++;//block in horizontal layer + } + } + abc[1]++;//horizontal layer + } + abc[2]++;//depth + } + return true; + } + + public static boolean builder(String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR+1 blocks + Block[] blockType,//use numbers 0-9 for casing types + byte[] blockMeta,//use numbers 0-9 for casing types + int horizontalOffset, int verticalOffset, int depthOffset, + IGregTechTileEntity tileEntity, ExtendedFacing extendedFacing, boolean hintsOnly) { + return builder(structure, blockType, blockMeta, horizontalOffset, verticalOffset, depthOffset, + tileEntity.getWorld(), tileEntity.getXCoord(), tileEntity.getYCoord(), tileEntity.getZCoord(), + extendedFacing, hintsOnly); + } + + public static boolean builder(String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR+1 blocks + Block[] blockType,//use numbers 0-9 for casing types + byte[] blockMeta,//use numbers 0-9 for casing types + int horizontalOffset, int verticalOffset, int depthOffset, + TileEntity tileEntity, ExtendedFacing extendedFacing, boolean hintsOnly) { + return builder(structure, blockType, blockMeta, horizontalOffset, verticalOffset, depthOffset, + tileEntity.getWorldObj(), tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord, + extendedFacing, hintsOnly); + } + + public static boolean builder(String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR+1 blocks + Block[] blockType,//use numbers 0-9 for casing types + byte[] blockMeta,//use numbers 0-9 for casing types + int horizontalOffset, int verticalOffset, int depthOffset, + World world, int baseX, int baseY, int baseZ, ExtendedFacing extendedFacing, boolean hintsOnly) { + if (world == null || (!world.isRemote && hintsOnly)) { + return false; + } + + //TE Rotation + int[] xyz = new int[3]; + int[] abc = new int[3]; + int pointer; + + //a,b,c - relative to block face! + //x,y,z - relative to block position on map! + + //perform your duties + abc[2] = -depthOffset; + for (String[] _structure : structure) {//front to back + abc[1] = -verticalOffset; + for (String __structure : _structure) {//top to bottom + abc[0] = -horizontalOffset; + for (char block : __structure.toCharArray()) {//left to right + if (block < ' ') {//Control chars allow skipping + abc[1] += block; + break; + } + if (block > '@')//characters allow to skip check a-1 skip, b-2 skips etc. + { + abc[0] += block - '@'; + }//else if (block < '+')//used to mark THINGS + // a++; + else if (block == '.')// this TE + { + abc[0]++; + } else { + //get x y z from rotation + extendedFacing.getWorldOffset(abc, xyz); + xyz[0] += baseX; + xyz[1] += baseY; + xyz[2] += baseZ; + + //that must be here since in some cases other axis (b,c) controls y + if (xyz[1] < 0 || xyz[1] >= 256) { + return false; + } + + //Check block + if (world.blockExists(xyz[0], xyz[1], xyz[2])) {//this actually checks if the chunk is loaded + if (hintsOnly) { + switch (block) { + case '-'://must be air + TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, 13); + break; + case '+'://must not be air + TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, 14); + break; + default: //check for block + if ((pointer = block - '0') >= 0) { + if (world.getBlock(xyz[0], xyz[1], xyz[2]) != blockType[pointer] || world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) != blockMeta[pointer]) { + TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], blockType[pointer], blockMeta[pointer]); + } + } else if ((pointer = block - ' ') >= 0) { + if (pointer < 12) { + TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, pointer); + } else { + TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, 12); + } + } else { + TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], TT_Container_Casings.sHintCasingsTT, 15); + } + } + } else { + switch (block) { + case '-'://must be air + world.setBlock(xyz[0], xyz[1], xyz[2], Blocks.air, 0, 2); + break; + case '+'://must not be air + world.setBlock(xyz[0], xyz[1], xyz[2], TT_Container_Casings.sBlockCasingsTT, 14, 2); + break; + default: //check for block + if ((pointer = block - '0') >= 0) { + world.setBlock(xyz[0], xyz[1], xyz[2], blockType[pointer], blockMeta[pointer], 2); + } + } + } + } + abc[0]++;//block in horizontal layer + } + } + abc[1]++;//horizontal layer + } + abc[2]++;//depth + } + return true; + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java new file mode 100644 index 0000000000..52386d8373 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java @@ -0,0 +1,170 @@ +package com.github.technus.tectech.mechanics.structure; + +import java.util.*; + +import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; +import static com.github.technus.tectech.mechanics.structure.StructureUtility.*; + +public class StructureDefinition implements IStructureDefinition { + private final Map> elements; + private final Map shapes; + private final Map[]> compiled; + + public static Builder builder() { + return new Builder<>(); + } + + private StructureDefinition( + Map> elements, + Map shapes, + Map[]> compiled) { + this.elements =elements; + this.shapes=shapes; + this.compiled =compiled; + } + + public static class Builder { + private static final char A='\uA000'; + private static final char B='\uB000'; + private static final char C='\uC000'; + private static final char D='\uD000'; + private final Map> elements; + private final Map shapes; + + private Builder() { + elements = new HashMap<>(); + shapes = new HashMap<>(); + } + + public Map> getElements() { + return elements; + } + + public Map getShapes() { + return shapes; + } + + /** + * Adds shape + * +- is air/no air checks + * space bar is skip + * . is also skip (but marks controller position, optional and logically it is a space...) + * rest needs to be defined + * + * next char is next block(a) + * next string is next line(a,b) + * next string[] is next slice(a,b,c) + * + * char A000-FFFF range is reserved for generated skips + * @param name unlocalized/code name + * @param structurePiece generated or written struct - DO NOT STORE IT ANYWHERE, or at least set them to null afterwards + * @return this builder + */ + public Builder addShape(String name, String[][] structurePiece) { + StringBuilder builder = new StringBuilder(); + if (structurePiece.length > 0) { + for (String[] strings : structurePiece) { + if (strings.length > 0) { + for (String string : strings) { + builder.append(string).append(B); + } + builder.setLength(builder.length() - 1); + } + builder.append(C); + } + builder.setLength(builder.length() - 1); + } + int a=0,b=0,c=0; + char d=D; + for (int i = 0; i < builder.length(); i++) { + char ch = builder.charAt(i); + if(ch ==' ' || ch =='.'){ + builder.setCharAt(i,A); + } + if(ch==A){ + a++; + }else if(ch==B){ + a=0; + b++; + }else if(ch==C){ + a=0; + b=0; + c++; + }else if(a!=0 || b!=0 || c!=0){ + builder.setCharAt(i-1,d); + addElement(d,step(a,b,c)); + a=0; + b=0; + c=0; + d++; + } + } + + String built = builder.toString().replaceAll("[\\uA000\\uB000\\uC000]",""); + + if(built.contains("+")){ + addElement('+',notAir()); + } + if (built.contains("-")) { + addElement('-', isAir()); + } + shapes.put(name, built); + return this; + } + + public Builder addElement(Character name, IStructureElementProvider structurePiece) { + elements.put(name, structurePiece); + return this; + } + + public IStructureDefinition build() { + if(DEBUG_MODE){ + return new StructureDefinition<>(new HashMap<>(elements), new HashMap<>(shapes), compileMap()); + }else { + return compileMap()::get; + } + } + + @SuppressWarnings("unchecked") + private Map[]> compileMap() { + List mising = new ArrayList<>(); + shapes.values().stream().map(CharSequence::chars).forEach(intStream -> intStream.forEach(c -> { + IStructureElementProvider iStructureElement = elements.get((char) c); + if (iStructureElement == null) { + mising.add(c); + } + })); + if (mising.isEmpty()) { + Map[]> map = new HashMap<>(); + shapes.forEach((key, value) -> { + IStructureElementProvider[] compiled = new IStructureElementProvider[value.length()]; + for (char i = 0; i < compiled.length; i++) { + compiled[i] = this.elements.get(i); + } + map.put(key, compiled); + }); + return map; + } else { + throw new RuntimeException("Missing Structure Element bindings for (chars as integers): " + + Arrays.toString(mising.toArray())); + } + } + } + + public Map> getElements(){ + return elements; + } + + public Map getShapes() { + return shapes; + } + + public Map[]> getCompiled() { + return compiled; + } + + @Override + public IStructureElementProvider[] getElementsFor(String name) { + return compiled.get(name); + } +} \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java new file mode 100644 index 0000000000..69f5a6e43c --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java @@ -0,0 +1,473 @@ +package com.github.technus.tectech.mechanics.structure; + +import com.github.technus.tectech.TecTech; +import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; +import com.github.technus.tectech.util.Vec3Impl; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +import java.util.*; + +public class StructureUtility { + private static final String NICE_CHARS ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789`~!@#$%^&*()_=|[]{};:'<>,./?"; + @SuppressWarnings("rawtypes") + private static final Map STEP = new HashMap<>(); + @SuppressWarnings("rawtypes") + private static final IStructureElement AIR= (t, world, x, y, z) -> world.getBlock(x, y, z).getMaterial() == Material.air; + @SuppressWarnings("rawtypes") + private static final IStructureElement NOT_AIR= (t, world, x, y, z) -> world.getBlock(x, y, z).getMaterial() != Material.air; + + private StructureUtility(){ + + } + + @SuppressWarnings("unchecked") + public static IStructureElement isAir(){ + return AIR; + } + + @SuppressWarnings("unchecked") + public static IStructureElement notAir(){ + return NOT_AIR; + } + + /** + * Does not allow Block duplicates (with different meta) + */ + public static IStructureElement ofBlocksFlat(Map blocsMap,Block hintBlock,int hintMeta){ + if(blocsMap==null || blocsMap.isEmpty() || hintBlock==null){ + throw new IllegalArgumentException(); + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + return blocsMap.getOrDefault(world.getBlock(x, y, z), -1) == world.getBlockMetadata(x, y, z); + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z) { + world.setBlock(x,y,z,hintBlock,hintMeta,2); + return true; + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z) { + TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); + return true; + } + }; + } + + /** + * Allows block duplicates (with different meta) + */ + public static IStructureElement ofBlocks(Map> blocsMap,Block hintBlock,int hintMeta){ + if(blocsMap==null || blocsMap.isEmpty() || hintBlock==null){ + throw new IllegalArgumentException(); + } + for (Set value : blocsMap.values()) { + if(value.isEmpty()){ + throw new IllegalArgumentException(); + } + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + return blocsMap.getOrDefault(world.getBlock(x, y, z), Collections.emptySet()).contains(world.getBlockMetadata(x, y, z)); + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z) { + world.setBlock(x,y,z,hintBlock,hintMeta,2); + return true; + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z) { + TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); + return true; + } + }; + } + + public static IStructureElement ofBlock(Block block, int meta,Block hintBlock,int hintMeta){ + if(block==null || hintBlock==null){ + throw new IllegalArgumentException(); + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + return block == world.getBlock(x, y, z) && meta == world.getBlockMetadata(x, y, z); + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z) { + world.setBlock(x,y,z,hintBlock,hintMeta,2); + return true; + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z) { + TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); + return true; + } + }; + } + + public static IStructureElement ofBlock(Block block, int meta){ + return ofBlock(block, meta,block,meta); + } + + public static IStructureElement ofBlockAdder(IBlockAdder iBlockAdder,Block hintBlock,int hintMeta){ + if(iBlockAdder==null ||hintBlock==null){ + throw new IllegalArgumentException(); + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + return iBlockAdder.apply(world.getBlock(x, y, z), world.getBlockMetadata(x, y, z)); + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z) { + world.setBlock(x,y,z,hintBlock,hintMeta,2); + return true; + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z) { + TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); + return true; + } + }; + } + + public static IStructureElement ofTileAdder(ITileAdder iTileAdder,Block hintBlock,int hintMeta){ + if(iTileAdder==null ||hintBlock==null){ + throw new IllegalArgumentException(); + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + TileEntity tileEntity = world.getTileEntity(x, y, z); + return tileEntity instanceof IGregTechTileEntity && iTileAdder.apply(tileEntity); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z) { + TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); + return true; + } + }; + } + + public static IStructureElement ofHatchAdder(IHatchAdder iHatchAdder, Short textureIndex,Block hintBlock,int hintMeta){ + if(iHatchAdder==null ||hintBlock==null){ + throw new IllegalArgumentException(); + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + TileEntity tileEntity = world.getTileEntity(x, y, z); + return tileEntity instanceof IGregTechTileEntity && iHatchAdder.apply((IGregTechTileEntity) tileEntity, textureIndex); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z) { + TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); + return true; + } + }; + } + + @SuppressWarnings("unchecked") + public static IStructureNavigate step(Vec3Impl step){ + if(step==null || step.get0()<0 || step.get1()<0 || step.get2()<0){ + throw new IllegalArgumentException(); + } + return STEP.computeIfAbsent(step, vec3 -> { + if(vec3.get2()>0){ + return stepC(vec3.get0(), vec3.get1(), vec3.get2()); + }else if(vec3.get1()>0){ + return stepB(vec3.get0(), vec3.get1(), vec3.get2()); + }else { + return stepA(vec3.get0(), vec3.get1(), vec3.get2()); + } + }); + } + + public static IStructureNavigate step(int a,int b, int c){ + return step(new Vec3Impl(a,b,c)); + } + + private static IStructureNavigate stepA(int a,int b, int c){ + return new IStructureNavigate() { + @Override + public int getStepA() { + return a; + } + + @Override + public int getStepB() { + return b; + } + + @Override + public int getStepC() { + return c; + } + }; + } + + private static IStructureNavigate stepB(int a,int b, int c){ + return new IStructureNavigate() { + @Override + public int getStepA() { + return a; + } + + @Override + public int getStepB() { + return b; + } + + @Override + public int getStepC() { + return c; + } + + @Override + public boolean resetA() { + return true; + } + }; + } + + private static IStructureNavigate stepC(int a,int b, int c){ + return new IStructureNavigate() { + @Override + public int getStepA() { + return a; + } + + @Override + public int getStepB() { + return b; + } + + @Override + public int getStepC() { + return c; + } + + @Override + public boolean resetA() { + return true; + } + + @Override + public boolean resetB() { + return true; + } + }; + } + + public static IStructureFallback ofElementChain(IStructureElement... elementChain){ + if(elementChain==null || elementChain.length==0){ + throw new IllegalArgumentException(); + } + for (IStructureElementProvider iStructureElement : elementChain) { + if(iStructureElement==null){ + throw new IllegalArgumentException(); + } + } + return () -> elementChain; + } + + public static IStructureFallbackProvider ofProviderChain(IStructureElementProvider... elementChain){ + if(elementChain==null || elementChain.length==0){ + throw new IllegalArgumentException(); + } + for (IStructureElementProvider iStructureElement : elementChain) { + if(iStructureElement==null){ + throw new IllegalArgumentException(); + } + } + return () -> elementChain; + } + + /** + * Use only to get pseudo code... + * @param world + * @return + */ + public static String getPseudoJavaCode(World world, ExtendedFacing extendedFacing, + int basePositionX, int basePositionY, int basePositionZ, + int basePositionA, int basePositionB, int basePositionC, + int sizeA,int sizeB, int sizeC) { + Map> blocks = new TreeMap<>(Comparator.comparing(Block::getUnlocalizedName)); + Set> tiles = new TreeSet<>(Comparator.comparing(Class::getCanonicalName)); + Set> gtTiles = new TreeSet<>(Comparator.comparing(Class::getCanonicalName)); + iterate(world, extendedFacing, basePositionX, basePositionY, basePositionZ, + basePositionA, basePositionB, basePositionC, + sizeA, sizeB, sizeC, ((w, x, y, z) -> { + TileEntity tileEntity = w.getTileEntity(x, y, z); + if (tileEntity == null) { + Block block = w.getBlock(x, y, z); + if (block != null && block != Blocks.air) { + blocks.compute(block, (b, set) -> { + if (set == null) { + set = new TreeSet<>(); + } + set.add(world.getBlockMetadata(x, y, z)); + return set; + }); + } + } else { + if (tileEntity instanceof IGregTechTileEntity) { + IMetaTileEntity meta = ((IGregTechTileEntity) tileEntity).getMetaTileEntity(); + if (meta != null) { + gtTiles.add(meta.getClass()); + } else { + tiles.add(tileEntity.getClass()); + } + } else { + tiles.add(tileEntity.getClass()); + } + } + })); + Map map = new HashMap<>(); + StringBuilder builder = new StringBuilder(); + { + int i = 0; + char c; + builder.append("\n\nStructure:\n") + .append("\nBlocks:\n"); + for (Map.Entry> entry : blocks.entrySet()) { + Block block = entry.getKey(); + Set set = entry.getValue(); + for (Integer meta : set) { + c = NICE_CHARS.charAt(i++); + if(i>NICE_CHARS.length()){ + return "Too complicated for nice chars"; + } + map.put(block.getUnlocalizedName() + '\0' + meta, c); + builder.append(c).append(" -> ofBlock...(") + .append(block.getUnlocalizedName()).append(", ").append(meta).append(", ...);\n"); + } + } + builder.append("\nTiles:\n"); + for (Class tile : tiles) { + c = NICE_CHARS.charAt(i++); + if(i>NICE_CHARS.length()){ + return "Too complicated for nice chars"; + } + map.put(tile.getCanonicalName(), c); + builder.append(c).append(" -> ofTileAdder(") + .append(tile.getCanonicalName()).append(", ...);\n"); + } + builder.append("\nMeta:\n"); + for (Class gtTile : gtTiles) { + c = NICE_CHARS.charAt(i++); + if(i>NICE_CHARS.length()){ + return "Too complicated for nice chars"; + } + map.put(gtTile.getCanonicalName(), c); + builder.append(c).append(" -> ofHatchAdder(") + .append(gtTile.getCanonicalName()).append(", textureId, ...);\n"); + } + } + builder.append("\nOffsets:\n") + .append(basePositionA).append(' ').append(basePositionB).append(' ').append(basePositionC).append('\n'); + builder.append("\nScan:\n") + .append("new String[][]{{\n") + .append(" \""); + + iterate(world, extendedFacing, basePositionX, basePositionY, basePositionZ, + basePositionA, basePositionB, basePositionC, + sizeA, sizeB, sizeC, ((w, x, y, z) -> { + TileEntity tileEntity = w.getTileEntity(x, y, z); + if (tileEntity == null) { + Block block = w.getBlock(x, y, z); + if (block != null && block != Blocks.air) { + builder.append(map.get(block.getUnlocalizedName() + '\0' + world.getBlockMetadata(x, y, z))); + }else { + builder.append(' '); + } + } else { + if (tileEntity instanceof IGregTechTileEntity) { + IMetaTileEntity meta = ((IGregTechTileEntity) tileEntity).getMetaTileEntity(); + if (meta != null) { + builder.append(map.get(meta.getClass().getCanonicalName())); + } else { + builder.append(map.get(tileEntity.getClass().getCanonicalName())); + } + } else { + builder.append(map.get(tileEntity.getClass().getCanonicalName())); + } + } + }), + () -> builder.append("\",\n").append(" \""), + () -> { + builder.setLength(builder.length()-7); + builder.append("\n").append("},{\n").append(" \""); + }); + builder.setLength(builder.length()-8); + builder.append("};\n\n"); + return(builder.toString().replaceAll("\"\"","E")); + } + + public static void iterate(World world, ExtendedFacing extendedFacing, + int basePositionX, int basePositionY, int basePositionZ, + int basePositionA, int basePositionB, int basePositionC, + int sizeA,int sizeB, int sizeC, + IBlockPosConsumer iBlockPosConsumer){ + sizeA-=basePositionA; + sizeB-=basePositionB; + sizeC-=basePositionC; + + int[] abc = new int[3]; + int[] xyz = new int[3]; + + for (abc[2]=-basePositionC ; abc[2] < sizeC; abc[2]++) { + for (abc[1]=-basePositionB; abc[1] < sizeB; abc[1]++) { + for (abc[0]=-basePositionA ; abc[0] < sizeA; abc[0]++) { + extendedFacing.getWorldOffset(abc, xyz); + iBlockPosConsumer.consume(world, xyz[0]+basePositionX,xyz[1]+basePositionY,xyz[2]+basePositionZ); + } + + } + } + } + + public static void iterate(World world, ExtendedFacing extendedFacing, + int basePositionX, int basePositionY, int basePositionZ, + int basePositionA, int basePositionB, int basePositionC, + int sizeA, int sizeB, int sizeC, + IBlockPosConsumer iBlockPosConsumer, + Runnable nextB, + Runnable nextC){ + sizeA-=basePositionA; + sizeB-=basePositionB; + sizeC-=basePositionC; + + int[] abc = new int[3]; + int[] xyz = new int[3]; + + for (abc[2]=-basePositionC ; abc[2] < sizeC; abc[2]++) { + for (abc[1]=-basePositionB; abc[1] < sizeB; abc[1]++) { + for (abc[0]=-basePositionA ; abc[0] < sizeA; abc[0]++) { + extendedFacing.getWorldOffset(abc, xyz); + iBlockPosConsumer.consume(world, xyz[0]+basePositionX,xyz[1]+basePositionY,xyz[2]+basePositionZ); + } + nextB.run(); + } + nextC.run(); + } + } +} diff --git a/src/main/java/com/github/technus/tectech/thing/item/ConstructableTriggerItem.java b/src/main/java/com/github/technus/tectech/thing/item/ConstructableTriggerItem.java index 7b7d1983fa..4160ae2aba 100644 --- a/src/main/java/com/github/technus/tectech/thing/item/ConstructableTriggerItem.java +++ b/src/main/java/com/github/technus/tectech/thing/item/ConstructableTriggerItem.java @@ -1,15 +1,14 @@ package com.github.technus.tectech.thing.item; +import com.github.technus.tectech.TecTech; import com.github.technus.tectech.mechanics.alignment.IAlignment; import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; +import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.mechanics.constructable.IMultiblockInfoContainer; import com.github.technus.tectech.util.CommonValues; -import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.mechanics.constructable.IConstructable; import cpw.mods.fml.common.registry.GameRegistry; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.interfaces.tileentity.IMachineBlockUpdateable; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.Item; @@ -82,7 +81,7 @@ public final class ConstructableTriggerItem extends Item { IMetaTileEntity metaTE = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity(); if (metaTE instanceof IConstructable) { ((IConstructable) metaTE).construct(aStack, true); - TecTech.proxy.printInchat(((IConstructable) metaTE).getStructureDescription(aStack.stackSize)); + TecTech.proxy.printInchat(((IConstructable) metaTE).getStructureDescription(aStack)); return false; } else if(MULTIBLOCK_MAP.containsKey(metaTE.getClass().getCanonicalName())){ IMultiblockInfoContainer iMultiblockInfoContainer = MULTIBLOCK_MAP.get(metaTE.getClass().getCanonicalName()); @@ -93,12 +92,12 @@ public final class ConstructableTriggerItem extends Item { iMultiblockInfoContainer.construct(aStack, true, tTileEntity, ExtendedFacing.of(ForgeDirection.getOrientation(((IGregTechTileEntity) tTileEntity).getFrontFacing()))); } - TecTech.proxy.printInchat(MULTIBLOCK_MAP.get(metaTE.getClass().getCanonicalName()).getDescription(aStack.stackSize)); + TecTech.proxy.printInchat(MULTIBLOCK_MAP.get(metaTE.getClass().getCanonicalName()).getDescription(aStack)); return false; } } else if(tTileEntity instanceof IConstructable){ ((IConstructable) tTileEntity).construct(aStack,true); - TecTech.proxy.printInchat(((IConstructable) tTileEntity).getStructureDescription(aStack.stackSize)); + TecTech.proxy.printInchat(((IConstructable) tTileEntity).getStructureDescription(aStack)); return false; } else if(MULTIBLOCK_MAP.containsKey(tTileEntity.getClass().getCanonicalName())){ IMultiblockInfoContainer iMultiblockInfoContainer = MULTIBLOCK_MAP.get(tTileEntity.getClass().getCanonicalName()); @@ -109,7 +108,7 @@ public final class ConstructableTriggerItem extends Item { iMultiblockInfoContainer.construct(aStack, true, tTileEntity, ExtendedFacing.of(ForgeDirection.getOrientation(aSide))); } - TecTech.proxy.printInchat(MULTIBLOCK_MAP.get(tTileEntity.getClass().getCanonicalName()).getDescription(aStack.stackSize)); + TecTech.proxy.printInchat(MULTIBLOCK_MAP.get(tTileEntity.getClass().getCanonicalName()).getDescription(aStack)); return false; } //} else { diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_annihilation.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_annihilation.java index 4333d4c8c9..4151dbfec0 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_annihilation.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_annihilation.java @@ -1,11 +1,11 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -108,7 +108,7 @@ public class GT_MetaTileEntity_EM_annihilation extends GT_MetaTileEntity_Multibl } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java index c5aaa1d66f..d90f4af8d2 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java @@ -1,11 +1,11 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -306,7 +306,7 @@ public class GT_MetaTileEntity_EM_bhg extends GT_MetaTileEntity_MultiblockBase_E } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java index fe676910ee..490ca2084b 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java @@ -1,6 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.definitions.dComplexAspectDefinition; @@ -689,7 +690,7 @@ public class GT_MetaTileEntity_EM_collider extends GT_MetaTileEntity_MultiblockB } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java index 433b8b4950..e70cc10926 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java @@ -1,6 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.util.Util; @@ -350,7 +351,7 @@ public class GT_MetaTileEntity_EM_computer extends GT_MetaTileEntity_MultiblockB } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_crafting.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_crafting.java index 7a71f36d3b..a9e5b2f8a1 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_crafting.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_crafting.java @@ -1,11 +1,11 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -110,7 +110,7 @@ public class GT_MetaTileEntity_EM_crafting extends GT_MetaTileEntity_MultiblockB } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java index 647bbf4a3b..d5c9162d1d 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.Reference; import com.github.technus.tectech.mechanics.dataTransport.InventoryDataPacket; @@ -10,7 +10,7 @@ import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_H import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_Container_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_GUIContainer_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -175,7 +175,7 @@ public class GT_MetaTileEntity_EM_dataBank extends GT_MetaTileEntity_MultiblockB } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java index be28a3d0c8..3b17dfa9b9 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java @@ -1,6 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; @@ -248,7 +249,7 @@ public class GT_MetaTileEntity_EM_decay extends GT_MetaTileEntity_MultiblockBase } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java index fed03d1845..5dfa38294b 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; @@ -11,7 +11,7 @@ import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputElemental; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; @@ -153,7 +153,7 @@ public class GT_MetaTileEntity_EM_dequantizer extends GT_MetaTileEntity_Multiblo } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java index aed3025d4f..1fff071e9c 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; import cofh.api.energy.IEnergyContainerItem; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.Reference; import com.github.technus.tectech.TecTech; @@ -9,7 +9,7 @@ import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_Container_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_GUIContainer_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; @@ -187,7 +187,7 @@ public class GT_MetaTileEntity_EM_infuser extends GT_MetaTileEntity_MultiblockBa } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_junction.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_junction.java index 8a76ee6ff1..199bb8ee6f 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_junction.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_junction.java @@ -1,6 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputElemental; @@ -174,7 +175,7 @@ public class GT_MetaTileEntity_EM_junction extends GT_MetaTileEntity_MultiblockB } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java index 6315a2f295..ab86c0494f 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.Reference; import com.github.technus.tectech.TecTech; @@ -14,7 +14,7 @@ import com.github.technus.tectech.mechanics.elementalMatter.core.transformations import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.GregTech_API; @@ -202,7 +202,7 @@ public class GT_MetaTileEntity_EM_quantizer extends GT_MetaTileEntity_Multiblock } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java index 2a739cb6c7..c6f9c810a8 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java @@ -1,13 +1,13 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.recipe.TT_recipe; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Holder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import cpw.mods.fml.common.registry.GameRegistry; import gregtech.api.enums.ItemList; @@ -557,7 +557,7 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java index 48479b9d71..896d0f41bc 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java @@ -1,6 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; @@ -518,7 +519,7 @@ public class GT_MetaTileEntity_EM_scanner extends GT_MetaTileEntity_MultiblockBa } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_stabilizer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_stabilizer.java index ece01f7489..140383caac 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_stabilizer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_stabilizer.java @@ -1,11 +1,11 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import net.minecraft.block.Block; @@ -74,7 +74,7 @@ public class GT_MetaTileEntity_EM_stabilizer extends GT_MetaTileEntity_Multibloc } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java index 39f9441cb7..7398889c89 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java @@ -1,6 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.Reference; import com.github.technus.tectech.mechanics.dataTransport.QuantumDataPacket; @@ -221,7 +222,7 @@ public class GT_MetaTileEntity_EM_switch extends GT_MetaTileEntity_MultiblockBas } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java index c2e759e96c..4e2f916f2f 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java @@ -1,26 +1,27 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; -import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.Reference; import com.github.technus.tectech.mechanics.constructable.IConstructable; +import com.github.technus.tectech.mechanics.structure.IStructureDefinition; +import com.github.technus.tectech.mechanics.structure.StructureDefinition; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_Container_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_GUIContainer_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; +import com.github.technus.tectech.util.CommonValues; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import net.minecraft.block.Block; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; +import static com.github.technus.tectech.mechanics.structure.StructureUtility.ofBlock; +import static com.github.technus.tectech.mechanics.structure.StructureUtility.ofHatchAdder; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -32,21 +33,25 @@ import static net.minecraft.util.StatCollector.translateToLocal; */ public class GT_MetaTileEntity_EM_transformer extends GT_MetaTileEntity_MultiblockBase_EM implements IConstructable { //region structure - private static final String[][] shape = new String[][]{ - {" ", " . ", " ",}, - {" ", " 0 ", " ",}, - {" ", " ", " ",}, - }; - private static final Block[] blockType = new Block[]{sBlockCasings1}; - private static final byte[] blockMeta = new byte[]{15}; - private final IHatchAdder[] addingMethods = new IHatchAdder[]{this::addEnergyIOToMachineList}; - private static final short[] casingTextures = new short[]{textureOffset}; - private static final Block[] blockTypeFallback = new Block[]{sBlockCasingsTT}; - private static final byte[] blockMetaFallback = new byte[]{0}; private static final String[] description = new String[]{ EnumChatFormatting.AQUA + translateToLocal("tt.keyphrase.Hint_Details") + ":", translateToLocal("gt.blockmachines.multimachine.em.transformer.hint"),//1 - Energy IO Hatches or High Power Casing }; + private static final IStructureDefinition STRUCTURE_DEFINITION = + StructureDefinition.builder() + .addShape("main",new String[][]{ + {"111", "1.1", "111",}, + {"111", "101", "111",}, + {"111", "111", "111",}, + }) + .addElement('0', ofBlock(sBlockCasings1,15)) + .addElement('1', trafo->ofHatchAdder(trafo::addEnergyIOToMachineList,textureOffset,sBlockCasingsTT,0)) + .build(); + + @Override + public IStructureDefinition getStructure_EM() { + return STRUCTURE_DEFINITION; + } //endregion public GT_MetaTileEntity_EM_transformer(int aID, String aName, String aNameRegional) { @@ -78,7 +83,7 @@ public class GT_MetaTileEntity_EM_transformer extends GT_MetaTileEntity_Multiblo @Override public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { - return structureCheck_EM(shape, blockType, blockMeta, addingMethods, casingTextures, blockTypeFallback, blockMetaFallback, 1, 1, 0); + return structureCheck_EM("main", 1, 1, 0); } @Override @@ -150,11 +155,11 @@ public class GT_MetaTileEntity_EM_transformer extends GT_MetaTileEntity_Multiblo @Override public void construct(ItemStack stackSize, boolean hintsOnly) { - Structure.builder(shape, blockType, blockMeta, 1, 1, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); + //Structure.builder(shape, blockType, blockMeta, 1, 1, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_wormhole.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_wormhole.java index 2b2ebdd1a4..f909d000c7 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_wormhole.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_wormhole.java @@ -1,11 +1,11 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -109,7 +109,7 @@ public class GT_MetaTileEntity_EM_wormhole extends GT_MetaTileEntity_MultiblockB } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java index 9c40d6ebc9..ba926f1ace 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java @@ -1,6 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.Reference; import com.github.technus.tectech.mechanics.constructable.IConstructable; @@ -250,7 +251,7 @@ public class GT_MetaTileEntity_TM_microwave extends GT_MetaTileEntity_Multiblock } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java index 678f211744..47f36014ac 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java @@ -5,7 +5,7 @@ import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_Container_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_GUIContainer_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import gregtech.api.enums.Textures; import gregtech.api.interfaces.ITexture; @@ -126,7 +126,7 @@ public class GT_MetaTileEntity_TM_proccessingStack extends GT_MetaTileEntity_Mul } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java index 327b54e561..a4a234f9b4 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java @@ -1,6 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.loader.NetworkDispatcher; @@ -827,7 +828,7 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java index 2f23aae431..7735678f72 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java @@ -6,7 +6,9 @@ import com.github.technus.tectech.mechanics.alignment.*; import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; import com.github.technus.tectech.mechanics.alignment.enumerable.Flip; import com.github.technus.tectech.mechanics.alignment.enumerable.Rotation; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.IStructureDefinition; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.Util; import com.github.technus.tectech.util.Vec3Impl; import com.github.technus.tectech.loader.NetworkDispatcher; @@ -191,6 +193,27 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt toolSetDirection(ForgeDirection.getOrientation(getBaseMetaTileEntity().getFrontFacing())); } + /** + * Gets structure + * @return STATIC INSTANCE OF STRUCTURE + */ + public IStructureDefinition getStructure_EM(){ + throw new NoSuchMethodError("Implement it as STATIC INSTANCE"); + } + + @SuppressWarnings("unchecked") + private IStructureDefinition getStructure_EM_Internal(){ + return (IStructureDefinition)getStructure_EM(); + } + + public final boolean structureCheck_EM(String piece,int horizontalOffset, int verticalOffset, int depthOffset) { + IGregTechTileEntity baseMetaTileEntity = getBaseMetaTileEntity(); + return getStructure_EM_Internal().check(this,piece, baseMetaTileEntity.getWorld(),getExtendedFacing(), + baseMetaTileEntity.getXCoord(),baseMetaTileEntity.getYCoord(),baseMetaTileEntity.getZCoord(), + horizontalOffset,verticalOffset,depthOffset,!mMachine); + } + + @Deprecated public final boolean structureCheck_EM( String[][] structure,//0-9 casing, +- air no air, a-z ignore Block[] blockType,//use numbers 0-9 for casing types diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/IHatchAdder.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/IHatchAdder.java deleted file mode 100644 index b695472012..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/IHatchAdder.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.multi.base; - - -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; - -public interface IHatchAdder { - Boolean apply(IGregTechTileEntity iGregTechTileEntity, Short aShort); -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java index f6f3ec9a63..722580a221 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java @@ -1,6 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi.em_machine; -import com.github.technus.tectech.mechanics.constructable.Structure; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.util.Util; @@ -354,7 +355,7 @@ public class GT_MetaTileEntity_EM_machine extends GT_MetaTileEntity_MultiblockBa } @Override - public String[] getStructureDescription(int stackSize) { + public String[] getStructureDescription(ItemStack stackSize) { return description; } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugStructureWriter.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugStructureWriter.java index 194d357b1c..42f25ddfde 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugStructureWriter.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugStructureWriter.java @@ -1,11 +1,12 @@ package com.github.technus.tectech.thing.metaTileEntity.single; -import com.github.technus.tectech.mechanics.constructable.Structure; -import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.util.Util; +import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; +import com.github.technus.tectech.mechanics.structure.StructureUtility; import com.github.technus.tectech.thing.metaTileEntity.single.gui.GT_Container_DebugStructureWriter; import com.github.technus.tectech.thing.metaTileEntity.single.gui.GT_GUIContainer_DebugStructureWriter; +import com.github.technus.tectech.util.CommonValues; +import com.github.technus.tectech.util.Util; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; @@ -20,6 +21,7 @@ import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; import static com.github.technus.tectech.thing.metaTileEntity.Textures.MACHINE_CASINGS_TT; import static net.minecraft.util.StatCollector.translateToLocal; @@ -105,21 +107,22 @@ public class GT_MetaTileEntity_DebugStructureWriter extends GT_MetaTileEntity_Ti } @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isAllowedToWork()) { - result = Structure.writer(getBaseMetaTileEntity(), numbers[0], numbers[1], numbers[2], numbers[3], numbers[4], numbers[5], false); - for (String s : result) { - TecTech.LOGGER.info(s); - } - aBaseMetaTileEntity.disableWorking(); - } + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + super.onFirstTick(aBaseMetaTileEntity); + aBaseMetaTileEntity.disableWorking(); } @Override - public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) { - result = Structure.writer(getBaseMetaTileEntity(), numbers[0], numbers[1], numbers[2], numbers[3], numbers[4], numbers[5], true); - for (String s : result) { - TecTech.LOGGER.info(s); + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isAllowedToWork()) { + String pseudoJavaCode = StructureUtility.getPseudoJavaCode(aBaseMetaTileEntity.getWorld(), + ExtendedFacing.of(ForgeDirection.getOrientation(aBaseMetaTileEntity.getFrontFacing())), + aBaseMetaTileEntity.getXCoord(), aBaseMetaTileEntity.getYCoord(), aBaseMetaTileEntity.getZCoord(), + numbers[0], numbers[1], numbers[2], + numbers[3], numbers[4], numbers[5]); + TecTech.LOGGER.info(pseudoJavaCode); + result = pseudoJavaCode.split("\\n"); + aBaseMetaTileEntity.disableWorking(); } } @@ -129,8 +132,6 @@ public class GT_MetaTileEntity_DebugStructureWriter extends GT_MetaTileEntity_Ti return true; } aBaseMetaTileEntity.openGUI(aPlayer); - //if (TecTechConfig.DEBUG_MODE && aPlayer.getHeldItem() != null) - // TecTech.LOGGER.info("UnlocalizedName: " + getUniqueIdentifier(aPlayer.getHeldItem())); return true; } diff --git a/src/main/java/com/github/technus/tectech/util/Util.java b/src/main/java/com/github/technus/tectech/util/Util.java index b81506d27c..1843770e3a 100644 --- a/src/main/java/com/github/technus/tectech/util/Util.java +++ b/src/main/java/com/github/technus/tectech/util/Util.java @@ -1,22 +1,14 @@ package com.github.technus.tectech.util; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; -import com.github.technus.tectech.thing.casing.TT_Container_Casings; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.ObfuscationReflectionHelper; import cpw.mods.fml.common.registry.GameRegistry; import gregtech.api.GregTech_API; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_TieredMachineBlock; import gregtech.api.util.GT_OreDictUnificator; import gregtech.api.util.GT_Utility; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.inventory.Container; import net.minecraft.inventory.ICrafting; @@ -25,14 +17,12 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.server.MinecraftServer; -import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.ChunkCoordIntPair; import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.storage.IPlayerFileData; import net.minecraft.world.storage.SaveHandler; -import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.FluidStack; import org.apache.commons.lang3.StringUtils; @@ -42,12 +32,6 @@ import java.io.FileOutputStream; import java.lang.reflect.Field; import java.nio.charset.StandardCharsets; import java.util.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; -import static gregtech.api.enums.GT_Values.E; -import static java.nio.charset.Charset.forName; /** * Created by Tec on 21.03.2017. diff --git a/src/main/java/com/github/technus/tectech/util/Vec3Impl.java b/src/main/java/com/github/technus/tectech/util/Vec3Impl.java index 84e6497560..9ba96d741a 100644 --- a/src/main/java/com/github/technus/tectech/util/Vec3Impl.java +++ b/src/main/java/com/github/technus/tectech/util/Vec3Impl.java @@ -20,20 +20,6 @@ public class Vec3Impl implements Comparable { this(baseMetaTileEntity.getXCoord(),baseMetaTileEntity.getYCoord(),baseMetaTileEntity.getZCoord()); } - public boolean equals(Object o) { - if (this == o) { - return true; - } else if (o instanceof Vec3Impl) { - Vec3Impl vec3i = (Vec3Impl)o; - return val0 == vec3i.val0 && val1 == vec3i.val1 && val2 == vec3i.val2; - } - return false; - } - - public int hashCode() { - return (val1 + val2 * 31) * 31 + val0; - } - public int compareTo(Vec3Impl o) { return val1 == o.val1 ? val2 == o.val2 ? val0 - o.val0 : val2 - o.val2 : val1 - o.val1; } @@ -143,4 +129,18 @@ public class Vec3Impl implements Comparable { public Vec3Impl abs() { return new Vec3Impl(Math.abs(val0),Math.abs(val1),Math.abs(val2)); } + + public boolean equals(Object o) { + if (this == o) { + return true; + } else if (o instanceof Vec3Impl) { + Vec3Impl vec3i = (Vec3Impl)o; + return val0 == vec3i.val0 && val1 == vec3i.val1 && val2 == vec3i.val2; + } + return false; + } + + public int hashCode() { + return (val1 + val2 * 31) * 31 + val0; + } } \ No newline at end of file -- cgit From 7ddc00ec1d41bb22218e16e66a306336cff4a761 Mon Sep 17 00:00:00 2001 From: Tec Date: Sat, 25 Apr 2020 23:54:10 +0200 Subject: Finish example implementation on transformer --- .../metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java | 2 +- .../multi/base/GT_MetaTileEntity_MultiblockBase_EM.java | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java index 4e2f916f2f..6d83b80d9a 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java @@ -155,7 +155,7 @@ public class GT_MetaTileEntity_EM_transformer extends GT_MetaTileEntity_Multiblo @Override public void construct(ItemStack stackSize, boolean hintsOnly) { - //Structure.builder(shape, blockType, blockMeta, 1, 1, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); + structureBuild_EM("main", 1, 1, 0, hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java index 7735678f72..cf78a18a74 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java @@ -213,6 +213,13 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt horizontalOffset,verticalOffset,depthOffset,!mMachine); } + public final boolean structureBuild_EM(String piece,int horizontalOffset, int verticalOffset, int depthOffset,boolean hintsOnly) { + IGregTechTileEntity baseMetaTileEntity = getBaseMetaTileEntity(); + return getStructure_EM_Internal().buildOrHints(this,piece, baseMetaTileEntity.getWorld(),getExtendedFacing(), + baseMetaTileEntity.getXCoord(),baseMetaTileEntity.getYCoord(),baseMetaTileEntity.getZCoord(), + horizontalOffset,verticalOffset,depthOffset,hintsOnly); + } + @Deprecated public final boolean structureCheck_EM( String[][] structure,//0-9 casing, +- air no air, a-z ignore -- cgit From a66cc45857e9a414f7d2d8c4257871212007596b Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 26 Apr 2020 00:12:00 +0200 Subject: Fix compilation issues --- .../technus/tectech/mechanics/structure/StructureDefinition.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java index 52386d8373..79176c3f25 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java @@ -80,6 +80,7 @@ public class StructureDefinition implements IStructureDefinition { char ch = builder.charAt(i); if(ch ==' ' || ch =='.'){ builder.setCharAt(i,A); + ch=A; } if(ch==A){ a++; @@ -138,8 +139,8 @@ public class StructureDefinition implements IStructureDefinition { Map[]> map = new HashMap<>(); shapes.forEach((key, value) -> { IStructureElementProvider[] compiled = new IStructureElementProvider[value.length()]; - for (char i = 0; i < compiled.length; i++) { - compiled[i] = this.elements.get(i); + for (int i = 0; i < value.length(); i++) { + compiled[i] = elements.get(value.charAt(i)); } map.put(key, compiled); }); -- cgit From 5ab4d194f5e46ab71b07eac45b3980b80411864a Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 26 Apr 2020 00:29:14 +0200 Subject: Add hint blocks and fallbacks --- .../mechanics/structure/StructureUtility.java | 48 +++++++++++++++++++++- .../multi/GT_MetaTileEntity_EM_transformer.java | 9 ++-- 2 files changed, 52 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java index 69f5a6e43c..fe7a0d7510 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java @@ -13,14 +13,51 @@ import net.minecraft.world.World; import java.util.*; +import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sHintCasingsTT; + public class StructureUtility { private static final String NICE_CHARS ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789`~!@#$%^&*()_=|[]{};:'<>,./?"; @SuppressWarnings("rawtypes") private static final Map STEP = new HashMap<>(); @SuppressWarnings("rawtypes") - private static final IStructureElement AIR= (t, world, x, y, z) -> world.getBlock(x, y, z).getMaterial() == Material.air; + private static final IStructureElement AIR= new IStructureElement() { + @Override + public boolean check(Object t, World world, int x, int y, int z) { + return world.getBlock(x, y, z).getMaterial() == Material.air; + } + + @Override + public boolean spawnHint(Object o, World world, int x, int y, int z) { + TecTech.proxy.hint_particle(world,x,y,z,sHintCasingsTT,13); + return true; + } + }; + @SuppressWarnings("rawtypes") + private static final IStructureElement NOT_AIR= new IStructureElement() { + @Override + public boolean check(Object t, World world, int x, int y, int z) { + return world.getBlock(x, y, z).getMaterial() != Material.air; + } + + @Override + public boolean spawnHint(Object o, World world, int x, int y, int z) { + TecTech.proxy.hint_particle(world,x,y,z,sHintCasingsTT,14); + return true; + } + }; @SuppressWarnings("rawtypes") - private static final IStructureElement NOT_AIR= (t, world, x, y, z) -> world.getBlock(x, y, z).getMaterial() != Material.air; + private static final IStructureElement ERROR= new IStructureElement() { + @Override + public boolean check(Object t, World world, int x, int y, int z) { + return false; + } + + @Override + public boolean spawnHint(Object o, World world, int x, int y, int z) { + TecTech.proxy.hint_particle(world,x,y,z,sHintCasingsTT,15); + return true; + } + }; private StructureUtility(){ @@ -36,6 +73,11 @@ public class StructureUtility { return NOT_AIR; } + @SuppressWarnings("unchecked") + public static IStructureElement error(){ + return ERROR; + } + /** * Does not allow Block duplicates (with different meta) */ @@ -277,6 +319,7 @@ public class StructureUtility { }; } + @SafeVarargs public static IStructureFallback ofElementChain(IStructureElement... elementChain){ if(elementChain==null || elementChain.length==0){ throw new IllegalArgumentException(); @@ -289,6 +332,7 @@ public class StructureUtility { return () -> elementChain; } + @SafeVarargs public static IStructureFallbackProvider ofProviderChain(IStructureElementProvider... elementChain){ if(elementChain==null || elementChain.length==0){ throw new IllegalArgumentException(); diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java index 6d83b80d9a..62c2b981a1 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java @@ -20,11 +20,11 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; -import static com.github.technus.tectech.mechanics.structure.StructureUtility.ofBlock; -import static com.github.technus.tectech.mechanics.structure.StructureUtility.ofHatchAdder; +import static com.github.technus.tectech.mechanics.structure.StructureUtility.*; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; +import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sHintCasingsTT; import static gregtech.api.GregTech_API.sBlockCasings1; import static net.minecraft.util.StatCollector.translateToLocal; @@ -45,7 +45,10 @@ public class GT_MetaTileEntity_EM_transformer extends GT_MetaTileEntity_Multiblo {"111", "111", "111",}, }) .addElement('0', ofBlock(sBlockCasings1,15)) - .addElement('1', trafo->ofHatchAdder(trafo::addEnergyIOToMachineList,textureOffset,sBlockCasingsTT,0)) + .addElement('1', ofProviderChain( + trafo->ofHatchAdder(trafo::addEnergyIOToMachineList,textureOffset,sHintCasingsTT,0), + ofBlock(sBlockCasingsTT,0) + )) .build(); @Override -- cgit From f740e2e7665c3a2aecca1ca912755353e875ad4c Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 26 Apr 2020 00:30:34 +0200 Subject: Add hint only helpers for blocks --- .../mechanics/structure/StructureUtility.java | 67 ++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java index fe7a0d7510..6feb07196d 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java @@ -76,6 +76,73 @@ public class StructureUtility { @SuppressWarnings("unchecked") public static IStructureElement error(){ return ERROR; + } /** + * Does not allow Block duplicates (with different meta) + */ + public static IStructureElement ofHintFlat(Map blocsMap,Block hintBlock,int hintMeta){ + if(blocsMap==null || blocsMap.isEmpty() || hintBlock==null){ + throw new IllegalArgumentException(); + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + return blocsMap.getOrDefault(world.getBlock(x, y, z), -1) == world.getBlockMetadata(x, y, z); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z) { + TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); + return true; + } + }; + } + + /** + * Allows block duplicates (with different meta) + */ + public static IStructureElement ofHint(Map> blocsMap,Block hintBlock,int hintMeta){ + if(blocsMap==null || blocsMap.isEmpty() || hintBlock==null){ + throw new IllegalArgumentException(); + } + for (Set value : blocsMap.values()) { + if(value.isEmpty()){ + throw new IllegalArgumentException(); + } + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + return blocsMap.getOrDefault(world.getBlock(x, y, z), Collections.emptySet()).contains(world.getBlockMetadata(x, y, z)); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z) { + TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); + return true; + } + }; + } + + public static IStructureElement ofHint(Block block, int meta,Block hintBlock,int hintMeta){ + if(block==null || hintBlock==null){ + throw new IllegalArgumentException(); + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + return block == world.getBlock(x, y, z) && meta == world.getBlockMetadata(x, y, z); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z) { + TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); + return true; + } + }; + } + + public static IStructureElement ofHint(Block block, int meta){ + return ofHint(block, meta,block,meta); } /** -- cgit From 5314ad9da0ea1e776c1576ae13a6bb9ba5d5c019 Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 26 Apr 2020 06:32:52 +0200 Subject: Drop element provider by reworking T into calls properly --- .../GT_MetaTileEntity_EM_essentiaDequantizer.java | 2 +- .../GT_MetaTileEntity_EM_essentiaQuantizer.java | 2 +- .../tectech/mechanics/structure/IBlockAdder.java | 4 +-- .../tectech/mechanics/structure/IHatchAdder.java | 4 +-- .../mechanics/structure/IStructureDefinition.java | 16 ++++----- .../mechanics/structure/IStructureElement.java | 7 +--- .../structure/IStructureElementProvider.java | 5 --- .../structure/IStructureFallbackProvider.java | 40 ---------------------- .../tectech/mechanics/structure/ITileAdder.java | 4 +-- .../tectech/mechanics/structure/Structure.java | 1 + .../mechanics/structure/StructureDefinition.java | 28 +++++++-------- .../mechanics/structure/StructureUtility.java | 27 ++++----------- .../multi/GT_MetaTileEntity_EM_annihilation.java | 2 +- .../multi/GT_MetaTileEntity_EM_bhg.java | 2 +- .../multi/GT_MetaTileEntity_EM_collider.java | 2 +- .../multi/GT_MetaTileEntity_EM_computer.java | 2 +- .../multi/GT_MetaTileEntity_EM_crafting.java | 2 +- .../multi/GT_MetaTileEntity_EM_dataBank.java | 2 +- .../multi/GT_MetaTileEntity_EM_decay.java | 2 +- .../multi/GT_MetaTileEntity_EM_dequantizer.java | 2 +- .../multi/GT_MetaTileEntity_EM_infuser.java | 2 +- .../multi/GT_MetaTileEntity_EM_junction.java | 2 +- .../multi/GT_MetaTileEntity_EM_quantizer.java | 2 +- .../multi/GT_MetaTileEntity_EM_research.java | 2 +- .../multi/GT_MetaTileEntity_EM_scanner.java | 2 +- .../multi/GT_MetaTileEntity_EM_stabilizer.java | 2 +- .../multi/GT_MetaTileEntity_EM_switch.java | 2 +- .../multi/GT_MetaTileEntity_EM_transformer.java | 4 +-- .../multi/GT_MetaTileEntity_EM_wormhole.java | 2 +- .../multi/GT_MetaTileEntity_TM_microwave.java | 2 +- .../GT_MetaTileEntity_TM_proccessingStack.java | 2 +- .../multi/GT_MetaTileEntity_TM_teslaCoil.java | 2 +- .../base/GT_MetaTileEntity_MultiblockBase_EM.java | 1 - .../metaTileEntity/multi/base/IHatchAdder.java | 15 ++++++++ .../em_machine/GT_MetaTileEntity_EM_machine.java | 2 +- 35 files changed, 74 insertions(+), 126 deletions(-) delete mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementProvider.java delete mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/IStructureFallbackProvider.java create mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/IHatchAdder.java diff --git a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaDequantizer.java b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaDequantizer.java index df5054ab4a..0ab4893000 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaDequantizer.java +++ b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaDequantizer.java @@ -11,7 +11,7 @@ import com.github.technus.tectech.thing.casing.TT_Container_Casings; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_quantizer; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; diff --git a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaQuantizer.java b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaQuantizer.java index d48c345e8e..c2ae9f3fdb 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaQuantizer.java +++ b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaQuantizer.java @@ -11,7 +11,7 @@ import com.github.technus.tectech.thing.casing.TT_Container_Casings; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_quantizer; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IBlockAdder.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IBlockAdder.java index 3dda99fed2..85d6f1be3f 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IBlockAdder.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IBlockAdder.java @@ -3,12 +3,12 @@ package com.github.technus.tectech.mechanics.structure; import net.minecraft.block.Block; -public interface IBlockAdder { +public interface IBlockAdder { /** * Callback on block added * @param block block attempted to add * @param meta meta of block attempted to add * @return is structure still valid */ - boolean apply(Block block, Integer meta); + boolean apply(T t,Block block, Integer meta); } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IHatchAdder.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IHatchAdder.java index 10d4c398ec..6e5aca5be3 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IHatchAdder.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IHatchAdder.java @@ -3,12 +3,12 @@ package com.github.technus.tectech.mechanics.structure; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -public interface IHatchAdder { +public interface IHatchAdder { /** * Callback to add hatch * @param iGregTechTileEntity hatch * @param aShort requested texture index, or null if not... * @return managed to add hatch (structure still valid) */ - boolean apply(IGregTechTileEntity iGregTechTileEntity, Short aShort); + boolean apply(T t,IGregTechTileEntity iGregTechTileEntity, Short aShort); } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java index 656151dc86..1152713d5e 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java @@ -9,7 +9,7 @@ public interface IStructureDefinition { * @param name same name as for other methods here * @return the array of elements to process */ - IStructureElementProvider[] getElementsFor(String name); + IStructureElement[] getElementsFor(String name); default boolean check(T object,String piece, World world, ExtendedFacing extendedFacing, int basePositionX, int basePositionY, int basePositionZ, @@ -41,7 +41,7 @@ public interface IStructureDefinition { basePositionA, basePositionB, basePositionC,hintsOnly,null); } - static boolean iterate(T object, IStructureElementProvider[] elements, World world, ExtendedFacing extendedFacing, + static boolean iterate(T object, IStructureElement[] elements, World world, ExtendedFacing extendedFacing, int basePositionX, int basePositionY, int basePositionZ, int basePositionA, int basePositionB, int basePositionC, boolean hintsOnly, Boolean checkBlocksIfNotNullForceCheckAllIfTrue){ @@ -59,8 +59,7 @@ public interface IStructureDefinition { if(checkBlocksIfNotNullForceCheckAllIfTrue!=null){ if(checkBlocksIfNotNullForceCheckAllIfTrue){ - for (IStructureElementProvider elementProvider : elements) { - IStructureElement element=elementProvider.getStructureElement(object); + for (IStructureElement element : elements) { extendedFacing.getWorldOffset(abc, xyz); xyz[0] += basePositionX; xyz[1] += basePositionY; @@ -79,8 +78,7 @@ public interface IStructureDefinition { abc[2] =(element.resetC()?basePositionA:abc[2])+element.getStepC(); } } else { - for (IStructureElementProvider elementProvider : elements) { - IStructureElement element=elementProvider.getStructureElement(object); + for (IStructureElement element : elements) { extendedFacing.getWorldOffset(abc, xyz); xyz[0] += basePositionX; xyz[1] += basePositionY; @@ -99,8 +97,7 @@ public interface IStructureDefinition { } }else { if(hintsOnly) { - for (IStructureElementProvider elementProvider : elements) { - IStructureElement element=elementProvider.getStructureElement(object); + for (IStructureElement element : elements) { extendedFacing.getWorldOffset(abc, xyz); xyz[0] += basePositionX; xyz[1] += basePositionY; @@ -115,8 +112,7 @@ public interface IStructureDefinition { abc[2] =(element.resetC()?basePositionA:abc[2])+element.getStepC(); } } else { - for (IStructureElementProvider elementProvider : elements) { - IStructureElement element=elementProvider.getStructureElement(object); + for (IStructureElement element : elements) { extendedFacing.getWorldOffset(abc, xyz); xyz[0] += basePositionX; xyz[1] += basePositionY; diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java index d33eac4119..78997648ab 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java @@ -5,7 +5,7 @@ import net.minecraft.world.World; /** * Use StructureUtility to instantiate */ -public interface IStructureElement extends IStructureElementProvider { +public interface IStructureElement { boolean check(T t,World world,int x,int y,int z); default boolean spawnHint(T t,World world,int x,int y,int z){ @@ -39,9 +39,4 @@ public interface IStructureElement extends IStructureElementProvider { default boolean resetC(){ return false; } - - @Override - default IStructureElement getStructureElement(T object){ - return this; - } } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementProvider.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementProvider.java deleted file mode 100644 index b38c2164c3..0000000000 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementProvider.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.github.technus.tectech.mechanics.structure; - -public interface IStructureElementProvider { - IStructureElement getStructureElement(T object); -} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureFallbackProvider.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureFallbackProvider.java deleted file mode 100644 index c0c24eaec4..0000000000 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureFallbackProvider.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.github.technus.tectech.mechanics.structure; - -import net.minecraft.world.World; - -/** - * Use StructureUtility to instantiate - */ -public interface IStructureFallbackProvider extends IStructureElement { - IStructureElementProvider[] fallbacks(); - - @Override - default boolean check(T t,World world, int x, int y, int z){ - for (IStructureElementProvider fallback : fallbacks()) { - if (fallback.getStructureElement(t).check(t, world, x, y, z)) { - return true; - } - } - return false; - } - - @Override - default boolean spawnHint(T t,World world, int x, int y, int z) { - for (IStructureElementProvider fallback : fallbacks()) { - if (fallback.getStructureElement(t).spawnHint(t, world, x, y, z)) { - return true; - } - } - return false; - } - - @Override - default boolean placeBlock(T t,World world, int x, int y, int z) { - for (IStructureElementProvider fallback : fallbacks()) { - if (fallback.getStructureElement(t).placeBlock(t, world, x, y, z)) { - return true; - } - } - return false; - } -} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/ITileAdder.java b/src/main/java/com/github/technus/tectech/mechanics/structure/ITileAdder.java index 9d983e1c4d..bdb619984a 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/ITileAdder.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/ITileAdder.java @@ -2,11 +2,11 @@ package com.github.technus.tectech.mechanics.structure; import net.minecraft.tileentity.TileEntity; -public interface ITileAdder { +public interface ITileAdder { /** * Callback to add hatch * @param tileEntity tile * @return managed to add hatch (structure still valid) */ - boolean apply(TileEntity tileEntity); + boolean apply(T t,TileEntity tileEntity); } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java b/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java index 77c47ad19e..5da14f58f9 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java @@ -3,6 +3,7 @@ package com.github.technus.tectech.mechanics.structure; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; import com.github.technus.tectech.thing.casing.TT_Container_Casings; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import net.minecraft.block.Block; import net.minecraft.block.material.Material; diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java index 79176c3f25..c8262e8473 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java @@ -6,18 +6,18 @@ import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; import static com.github.technus.tectech.mechanics.structure.StructureUtility.*; public class StructureDefinition implements IStructureDefinition { - private final Map> elements; + private final Map> elements; private final Map shapes; - private final Map[]> compiled; + private final Map[]> compiled; public static Builder builder() { return new Builder<>(); } private StructureDefinition( - Map> elements, + Map> elements, Map shapes, - Map[]> compiled) { + Map[]> compiled) { this.elements =elements; this.shapes=shapes; this.compiled =compiled; @@ -28,7 +28,7 @@ public class StructureDefinition implements IStructureDefinition { private static final char B='\uB000'; private static final char C='\uC000'; private static final char D='\uD000'; - private final Map> elements; + private final Map> elements; private final Map shapes; private Builder() { @@ -36,7 +36,7 @@ public class StructureDefinition implements IStructureDefinition { shapes = new HashMap<>(); } - public Map> getElements() { + public Map> getElements() { return elements; } @@ -113,7 +113,7 @@ public class StructureDefinition implements IStructureDefinition { return this; } - public Builder addElement(Character name, IStructureElementProvider structurePiece) { + public Builder addElement(Character name, IStructureElement structurePiece) { elements.put(name, structurePiece); return this; } @@ -127,18 +127,18 @@ public class StructureDefinition implements IStructureDefinition { } @SuppressWarnings("unchecked") - private Map[]> compileMap() { + private Map[]> compileMap() { List mising = new ArrayList<>(); shapes.values().stream().map(CharSequence::chars).forEach(intStream -> intStream.forEach(c -> { - IStructureElementProvider iStructureElement = elements.get((char) c); + IStructureElement iStructureElement = elements.get((char) c); if (iStructureElement == null) { mising.add(c); } })); if (mising.isEmpty()) { - Map[]> map = new HashMap<>(); + Map[]> map = new HashMap<>(); shapes.forEach((key, value) -> { - IStructureElementProvider[] compiled = new IStructureElementProvider[value.length()]; + IStructureElement[] compiled = new IStructureElement[value.length()]; for (int i = 0; i < value.length(); i++) { compiled[i] = elements.get(value.charAt(i)); } @@ -152,7 +152,7 @@ public class StructureDefinition implements IStructureDefinition { } } - public Map> getElements(){ + public Map> getElements(){ return elements; } @@ -160,12 +160,12 @@ public class StructureDefinition implements IStructureDefinition { return shapes; } - public Map[]> getCompiled() { + public Map[]> getCompiled() { return compiled; } @Override - public IStructureElementProvider[] getElementsFor(String name) { + public IStructureElement[] getElementsFor(String name) { return compiled.get(name); } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java index 6feb07196d..3d13ca86e2 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java @@ -232,14 +232,14 @@ public class StructureUtility { return ofBlock(block, meta,block,meta); } - public static IStructureElement ofBlockAdder(IBlockAdder iBlockAdder,Block hintBlock,int hintMeta){ + public static IStructureElement ofBlockAdder(IBlockAdder iBlockAdder,Block hintBlock,int hintMeta){ if(iBlockAdder==null ||hintBlock==null){ throw new IllegalArgumentException(); } return new IStructureElement() { @Override public boolean check(T t, World world, int x, int y, int z) { - return iBlockAdder.apply(world.getBlock(x, y, z), world.getBlockMetadata(x, y, z)); + return iBlockAdder.apply(t,world.getBlock(x, y, z), world.getBlockMetadata(x, y, z)); } @Override @@ -256,7 +256,7 @@ public class StructureUtility { }; } - public static IStructureElement ofTileAdder(ITileAdder iTileAdder,Block hintBlock,int hintMeta){ + public static IStructureElement ofTileAdder(ITileAdder iTileAdder,Block hintBlock,int hintMeta){ if(iTileAdder==null ||hintBlock==null){ throw new IllegalArgumentException(); } @@ -264,7 +264,7 @@ public class StructureUtility { @Override public boolean check(T t, World world, int x, int y, int z) { TileEntity tileEntity = world.getTileEntity(x, y, z); - return tileEntity instanceof IGregTechTileEntity && iTileAdder.apply(tileEntity); + return tileEntity instanceof IGregTechTileEntity && iTileAdder.apply(t,tileEntity); } @Override @@ -275,7 +275,7 @@ public class StructureUtility { }; } - public static IStructureElement ofHatchAdder(IHatchAdder iHatchAdder, Short textureIndex,Block hintBlock,int hintMeta){ + public static IStructureElement ofHatchAdder(IHatchAdder iHatchAdder, Short textureIndex, Block hintBlock, int hintMeta){ if(iHatchAdder==null ||hintBlock==null){ throw new IllegalArgumentException(); } @@ -283,7 +283,7 @@ public class StructureUtility { @Override public boolean check(T t, World world, int x, int y, int z) { TileEntity tileEntity = world.getTileEntity(x, y, z); - return tileEntity instanceof IGregTechTileEntity && iHatchAdder.apply((IGregTechTileEntity) tileEntity, textureIndex); + return tileEntity instanceof IGregTechTileEntity && iHatchAdder.apply(t,(IGregTechTileEntity) tileEntity, textureIndex); } @Override @@ -391,20 +391,7 @@ public class StructureUtility { if(elementChain==null || elementChain.length==0){ throw new IllegalArgumentException(); } - for (IStructureElementProvider iStructureElement : elementChain) { - if(iStructureElement==null){ - throw new IllegalArgumentException(); - } - } - return () -> elementChain; - } - - @SafeVarargs - public static IStructureFallbackProvider ofProviderChain(IStructureElementProvider... elementChain){ - if(elementChain==null || elementChain.length==0){ - throw new IllegalArgumentException(); - } - for (IStructureElementProvider iStructureElement : elementChain) { + for (IStructureElement iStructureElement : elementChain) { if(iStructureElement==null){ throw new IllegalArgumentException(); } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_annihilation.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_annihilation.java index 4151dbfec0..36a89650fd 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_annihilation.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_annihilation.java @@ -5,7 +5,7 @@ import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java index d90f4af8d2..aeb569efff 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java @@ -5,7 +5,7 @@ import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java index 490ca2084b..0816f6d9ee 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java index e70cc10926..0aaa87bab4 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_crafting.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_crafting.java index a9e5b2f8a1..b7904b3219 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_crafting.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_crafting.java @@ -5,7 +5,7 @@ import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java index d5c9162d1d..a00c9b9041 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java @@ -10,7 +10,7 @@ import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_H import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_Container_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_GUIContainer_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java index 3b17dfa9b9..2dafe62db6 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java index 5dfa38294b..77f73edc63 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java @@ -11,7 +11,7 @@ import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputElemental; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java index 1fff071e9c..c07be438d4 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java @@ -9,7 +9,7 @@ import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_Container_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_GUIContainer_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_junction.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_junction.java index 199bb8ee6f..b7555a4163 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_junction.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_junction.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.mechanics.constructable.IConstructable; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java index ab86c0494f..935f3b3997 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java @@ -14,7 +14,7 @@ import com.github.technus.tectech.mechanics.elementalMatter.core.transformations import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.GregTech_API; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java index c6f9c810a8..72a3c241ba 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java @@ -7,7 +7,7 @@ import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Holder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import cpw.mods.fml.common.registry.GameRegistry; import gregtech.api.enums.ItemList; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java index 896d0f41bc..3db6f66eb0 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_stabilizer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_stabilizer.java index 140383caac..7219429d11 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_stabilizer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_stabilizer.java @@ -5,7 +5,7 @@ import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import net.minecraft.block.Block; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java index 7398889c89..043b266f62 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.Reference; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java index 62c2b981a1..1381c1b0f7 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java @@ -45,8 +45,8 @@ public class GT_MetaTileEntity_EM_transformer extends GT_MetaTileEntity_Multiblo {"111", "111", "111",}, }) .addElement('0', ofBlock(sBlockCasings1,15)) - .addElement('1', ofProviderChain( - trafo->ofHatchAdder(trafo::addEnergyIOToMachineList,textureOffset,sHintCasingsTT,0), + .addElement('1', ofElementChain( + ofHatchAdder(GT_MetaTileEntity_EM_transformer::addEnergyIOToMachineList,textureOffset,sHintCasingsTT,0), ofBlock(sBlockCasingsTT,0) )) .build(); diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_wormhole.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_wormhole.java index f909d000c7..1d06a3b0d7 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_wormhole.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_wormhole.java @@ -5,7 +5,7 @@ import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java index ba926f1ace..a320a8b35a 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.Reference; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java index 47f36014ac..e800037850 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java @@ -5,7 +5,7 @@ import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_Container_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_GUIContainer_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import gregtech.api.enums.Textures; import gregtech.api.interfaces.ITexture; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java index a4a234f9b4..6a9991451b 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java index cf78a18a74..8cf1cee16d 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java @@ -6,7 +6,6 @@ import com.github.technus.tectech.mechanics.alignment.*; import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; import com.github.technus.tectech.mechanics.alignment.enumerable.Flip; import com.github.technus.tectech.mechanics.alignment.enumerable.Rotation; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; import com.github.technus.tectech.mechanics.structure.IStructureDefinition; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.Util; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/IHatchAdder.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/IHatchAdder.java new file mode 100644 index 0000000000..539fcf4f38 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/IHatchAdder.java @@ -0,0 +1,15 @@ +package com.github.technus.tectech.thing.metaTileEntity.multi.base; + + +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; + +@Deprecated +public interface IHatchAdder { + /** + * Callback to add hatch + * @param iGregTechTileEntity hatch + * @param aShort requested texture index, or null if not... + * @return managed to add hatch (structure still valid) + */ + boolean apply(IGregTechTileEntity iGregTechTileEntity, Short aShort); +} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java index 722580a221..5c3296f980 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.thing.metaTileEntity.multi.em_machine; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; -- cgit From a94138b2c1dccb88d1cce040fda5f29fe10dfa2c Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 26 Apr 2020 07:21:56 +0200 Subject: Refactor old api for fully static context --- .../GT_MetaTileEntity_EM_essentiaDequantizer.java | 19 ++++++++------- .../GT_MetaTileEntity_EM_essentiaQuantizer.java | 19 ++++++++------- .../tectech/mechanics/structure/Structure.java | 16 +++++++++---- .../multi/GT_MetaTileEntity_EM_annihilation.java | 11 +++++---- .../multi/GT_MetaTileEntity_EM_bhg.java | 7 ++++-- .../multi/GT_MetaTileEntity_EM_collider.java | 24 +++++++++++-------- .../multi/GT_MetaTileEntity_EM_computer.java | 19 ++++++++------- .../multi/GT_MetaTileEntity_EM_crafting.java | 11 +++++---- .../multi/GT_MetaTileEntity_EM_dataBank.java | 15 +++++++----- .../multi/GT_MetaTileEntity_EM_decay.java | 20 ++++++++++------ .../multi/GT_MetaTileEntity_EM_dequantizer.java | 19 ++++++++------- .../multi/GT_MetaTileEntity_EM_infuser.java | 10 ++++---- .../multi/GT_MetaTileEntity_EM_junction.java | 18 +++++++++----- .../multi/GT_MetaTileEntity_EM_quantizer.java | 21 ++++++++-------- .../multi/GT_MetaTileEntity_EM_research.java | 15 +++++++----- .../multi/GT_MetaTileEntity_EM_scanner.java | 25 +++++++++---------- .../multi/GT_MetaTileEntity_EM_stabilizer.java | 11 +++++---- .../multi/GT_MetaTileEntity_EM_switch.java | 19 +++++++++------ .../multi/GT_MetaTileEntity_EM_wormhole.java | 11 +++++---- .../multi/GT_MetaTileEntity_TM_microwave.java | 10 ++++---- .../GT_MetaTileEntity_TM_proccessingStack.java | 8 ++++--- .../multi/GT_MetaTileEntity_TM_teslaCoil.java | 28 +++++++++++++++------- .../base/GT_MetaTileEntity_MultiblockBase_EM.java | 27 ++++++++++++--------- .../metaTileEntity/multi/base/IHatchAdder.java | 15 ------------ .../em_machine/GT_MetaTileEntity_EM_machine.java | 15 +++++++----- 25 files changed, 239 insertions(+), 174 deletions(-) delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/IHatchAdder.java diff --git a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaDequantizer.java b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaDequantizer.java index 0ab4893000..0ce33b31b3 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaDequantizer.java +++ b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaDequantizer.java @@ -1,17 +1,17 @@ package com.github.technus.tectech.compatibility.thaumcraft.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.structure.Structure; -import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.definitions.ePrimalAspectDefinition; +import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.thing.casing.TT_Container_Casings; -import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_quantizer; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; +import com.github.technus.tectech.util.CommonValues; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; @@ -24,10 +24,11 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.util.ForgeDirection; -import static com.github.technus.tectech.util.CommonValues.V; import static com.github.technus.tectech.compatibility.thaumcraft.thing.metaTileEntity.multi.EssentiaCompat.essentiaContainerCompat; +import static com.github.technus.tectech.mechanics.structure.Structure.adders; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; +import static com.github.technus.tectech.util.CommonValues.V; import static gregtech.api.enums.GT_Values.E; import static net.minecraft.util.StatCollector.translateToLocal; @@ -46,10 +47,10 @@ public class GT_MetaTileEntity_EM_essentiaDequantizer extends GT_MetaTileEntity_ }; private static final Block[] blockType = new Block[]{QuantumGlassBlock.INSTANCE, sBlockCasingsTT, sBlockCasingsTT, sBlockCasingsTT}; private static final byte[] blockMeta = new byte[]{0, 0, 4, 8}; - private final IHatchAdder[] addingMethods = new IHatchAdder[]{ - this::addClassicToMachineList, - this::addElementalInputToMachineList, - this::addElementalMufflerToMachineList}; + private static final IHatchAdder[] addingMethods = adders( + GT_MetaTileEntity_EM_essentiaDequantizer::addClassicToMachineList, + GT_MetaTileEntity_EM_essentiaDequantizer::addElementalInputToMachineList, + GT_MetaTileEntity_EM_essentiaDequantizer::addElementalMufflerToMachineList); private static final short[] casingTextures = new short[]{textureOffset, textureOffset + 4, textureOffset + 4}; private static final Block[] blockTypeFallback = new Block[]{sBlockCasingsTT, sBlockCasingsTT, sBlockCasingsTT}; private static final byte[] blockMetaFallback = new byte[]{0, 4, 4}; diff --git a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaQuantizer.java b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaQuantizer.java index c2ae9f3fdb..98daad91c3 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaQuantizer.java +++ b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaQuantizer.java @@ -1,17 +1,17 @@ package com.github.technus.tectech.compatibility.thaumcraft.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.structure.Structure; -import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.definitions.ePrimalAspectDefinition; +import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.thing.casing.TT_Container_Casings; -import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_quantizer; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; +import com.github.technus.tectech.util.CommonValues; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; @@ -24,10 +24,11 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.util.ForgeDirection; -import static com.github.technus.tectech.util.CommonValues.V; import static com.github.technus.tectech.compatibility.thaumcraft.thing.metaTileEntity.multi.EssentiaCompat.essentiaContainerCompat; +import static com.github.technus.tectech.mechanics.structure.Structure.adders; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; +import static com.github.technus.tectech.util.CommonValues.V; import static gregtech.api.enums.GT_Values.E; import static net.minecraft.util.StatCollector.translateToLocal; @@ -46,10 +47,10 @@ public class GT_MetaTileEntity_EM_essentiaQuantizer extends GT_MetaTileEntity_Mu }; private static final Block[] blockType = new Block[]{QuantumGlassBlock.INSTANCE, sBlockCasingsTT, sBlockCasingsTT, sBlockCasingsTT}; private static final byte[] blockMeta = new byte[]{0, 4, 0, 8}; - private final IHatchAdder[] addingMethods = new IHatchAdder[]{ - this::addClassicToMachineList, - this::addElementalOutputToMachineList, - this::addElementalMufflerToMachineList}; + private static final IHatchAdder[] addingMethods = adders( + GT_MetaTileEntity_EM_essentiaQuantizer::addClassicToMachineList, + GT_MetaTileEntity_EM_essentiaQuantizer::addElementalOutputToMachineList, + GT_MetaTileEntity_EM_essentiaQuantizer::addElementalMufflerToMachineList); private static final short[] casingTextures = new short[]{textureOffset, textureOffset + 4, textureOffset + 4}; private static final Block[] blockTypeFallback = new Block[]{sBlockCasingsTT, sBlockCasingsTT, sBlockCasingsTT}; private static final byte[] blockMetaFallback = new byte[]{0, 4, 4}; diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java b/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java index 5da14f58f9..7eda9b690a 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java @@ -3,7 +3,7 @@ package com.github.technus.tectech.mechanics.structure; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; import com.github.technus.tectech.thing.casing.TT_Container_Casings; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import net.minecraft.block.Block; import net.minecraft.block.material.Material; @@ -22,20 +22,26 @@ public class Structure { private Structure(){} + @SafeVarargs + public static IHatchAdder[] adders(IHatchAdder... iHatchAdder){ + return iHatchAdder; + } + //Check Machine Structure based on string[][] (effectively char[][][]), ond offset of the controller //This only checks for REGULAR BLOCKS! - public static boolean checker( + public static boolean checker( String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR-1 blocks Block[] blockType,//use numbers 0-9 for casing types byte[] blockMeta,//use numbers 0-9 for casing types - IHatchAdder[] addingMethods, + IHatchAdder[] addingMethods, short[] casingTextures, Block[] blockTypeFallback,//use numbers 0-9 for casing types byte[] blockMetaFallback,//use numbers 0-9 for casing types int horizontalOffset, int verticalOffset, int depthOffset, - IGregTechTileEntity aBaseMetaTileEntity, + T metaTile, ExtendedFacing extendedFacing, boolean forceCheck) { + IGregTechTileEntity aBaseMetaTileEntity = metaTile.getBaseMetaTileEntity(); World world = aBaseMetaTileEntity.getWorld(); if (world.isRemote) { return false; @@ -117,7 +123,7 @@ public class Structure { } } else if ((pointer = block - ' ') >= 0) { igt = aBaseMetaTileEntity.getIGregTechTileEntity(xyz[0], xyz[1], xyz[2]); - if (igt == null || !addingMethods[pointer].apply(igt, casingTextures[pointer])) { + if (igt == null || !addingMethods[pointer].apply(metaTile,igt, casingTextures[pointer])) { if (world.getBlock(xyz[0], xyz[1], xyz[2]) != blockTypeFallback[pointer]) { if (DEBUG_MODE) { TecTech.LOGGER.info("Fallback-struct-block-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + world.getBlock(xyz[0], xyz[1], xyz[2]).getUnlocalizedName() + ' ' + (blockTypeFallback[pointer] == null ? "null" : blockTypeFallback[pointer].getUnlocalizedName())); diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_annihilation.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_annihilation.java index 36a89650fd..4eb2028dd8 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_annihilation.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_annihilation.java @@ -1,12 +1,12 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; +import com.github.technus.tectech.mechanics.constructable.IConstructable; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; -import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.thing.block.QuantumGlassBlock; -import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; +import com.github.technus.tectech.util.CommonValues; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; @@ -18,6 +18,7 @@ import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; +import static com.github.technus.tectech.mechanics.structure.Structure.adders; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -48,7 +49,9 @@ public class GT_MetaTileEntity_EM_annihilation extends GT_MetaTileEntity_Multibl }; private static final Block[] blockType = new Block[]{sBlockCasingsTT, sBlockCasingsTT, sBlockCasingsTT, sBlockCasingsTT, QuantumGlassBlock.INSTANCE, sBlockCasingsTT}; private static final byte[] blockMeta = new byte[]{4, 5, 12, 6, 0, 10}; - private final IHatchAdder[] addingMethods = new IHatchAdder[]{this::addClassicToMachineList, this::addElementalToMachineList}; + private static final IHatchAdder[] addingMethods = adders( + GT_MetaTileEntity_EM_annihilation::addClassicToMachineList, + GT_MetaTileEntity_EM_annihilation::addElementalToMachineList); private static final short[] casingTextures = new short[]{textureOffset, textureOffset + 4}; private static final Block[] blockTypeFallback = new Block[]{sBlockCasingsTT, sBlockCasingsTT}; private static final byte[] blockMetaFallback = new byte[]{0, 4}; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java index aeb569efff..0dc949bc2f 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java @@ -1,11 +1,11 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -18,6 +18,7 @@ import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; +import static com.github.technus.tectech.mechanics.structure.Structure.adders; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -84,7 +85,9 @@ public class GT_MetaTileEntity_EM_bhg extends GT_MetaTileEntity_MultiblockBase_E }; private static final Block[] blockType = new Block[]{sBlockCasingsTT, sBlockCasingsTT, sBlockCasingsTT, sBlockCasingsTT, sBlockCasingsTT}; private static final byte[] blockMeta = new byte[]{12, 13, 14, 10, 11}; - private final IHatchAdder[] addingMethods = new IHatchAdder[]{this::addClassicToMachineList, this::addElementalToMachineList}; + private static final IHatchAdder[] addingMethods = adders( + GT_MetaTileEntity_EM_bhg::addClassicToMachineList, + GT_MetaTileEntity_EM_bhg::addElementalToMachineList); private static final short[] casingTextures = new short[]{textureOffset, textureOffset + 4}; private static final Block[] blockTypeFallback = new Block[]{sBlockCasingsTT, sBlockCasingsTT}; private static final byte[] blockMetaFallback = new byte[]{0, 4}; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java index 0816f6d9ee..8df3122381 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java @@ -1,11 +1,9 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; -import com.github.technus.tectech.mechanics.structure.Structure; -import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.definitions.dComplexAspectDefinition; import com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.definitions.ePrimalAspectDefinition; +import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalMutableDefinitionStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; @@ -13,12 +11,17 @@ import com.github.technus.tectech.mechanics.elementalMatter.core.templates.cElem import com.github.technus.tectech.mechanics.elementalMatter.definitions.complex.dAtomDefinition; import com.github.technus.tectech.mechanics.elementalMatter.definitions.complex.dHadronDefinition; import com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.eQuarkDefinition; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.thing.casing.TT_Container_Casings; -import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputElemental; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.*; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.INameFunction; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.IStatusFunction; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.Parameters; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; +import com.github.technus.tectech.util.CommonValues; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; @@ -35,6 +38,7 @@ import net.minecraftforge.common.util.ForgeDirection; import java.util.HashMap; +import static com.github.technus.tectech.mechanics.structure.Structure.adders; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -329,11 +333,11 @@ public class GT_MetaTileEntity_EM_collider extends GT_MetaTileEntity_MultiblockB }; private static final byte[] blockMeta1 = new byte[]{4, 7, 4, 0, 4, 8}; private static final byte[] blockMeta2 = new byte[]{4, 7, 5, 0, 6, 9}; - private final IHatchAdder[] addingMethods = new IHatchAdder[]{ - this::addClassicToMachineList, - this::addElementalInputToMachineList, - this::addElementalOutputToMachineList, - this::addElementalMufflerToMachineList}; + private static final IHatchAdder[] addingMethods = adders( + GT_MetaTileEntity_EM_collider::addClassicToMachineList, + GT_MetaTileEntity_EM_collider::addElementalInputToMachineList, + GT_MetaTileEntity_EM_collider::addElementalOutputToMachineList, + GT_MetaTileEntity_EM_collider::addElementalMufflerToMachineList); private static final short[] casingTextures = new short[]{textureOffset, textureOffset + 4, textureOffset + 4, textureOffset + 4}; private static final Block[] blockTypeFallback = new Block[]{sBlockCasingsTT, sBlockCasingsTT, sBlockCasingsTT, sBlockCasingsTT}; private static final byte[] blockMetaFallback = new byte[]{0, 4, 4, 4}; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java index 0aaa87bab4..c6a6e584df 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java @@ -1,18 +1,18 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; -import com.github.technus.tectech.mechanics.structure.Structure; -import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.util.Util; -import com.github.technus.tectech.util.Vec3Impl; -import com.github.technus.tectech.mechanics.dataTransport.QuantumDataPacket; import com.github.technus.tectech.mechanics.constructable.IConstructable; +import com.github.technus.tectech.mechanics.dataTransport.QuantumDataPacket; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputData; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_OutputData; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Rack; import com.github.technus.tectech.thing.metaTileEntity.multi.base.*; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; +import com.github.technus.tectech.util.CommonValues; +import com.github.technus.tectech.util.Util; +import com.github.technus.tectech.util.Vec3Impl; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; @@ -30,11 +30,12 @@ import net.minecraft.util.ResourceLocation; import java.util.ArrayList; -import static com.github.technus.tectech.util.CommonValues.V; +import static com.github.technus.tectech.mechanics.structure.Structure.adders; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.*; +import static com.github.technus.tectech.util.CommonValues.V; import static net.minecraft.util.StatCollector.translateToLocal; /** @@ -55,7 +56,9 @@ public class GT_MetaTileEntity_EM_computer extends GT_MetaTileEntity_MultiblockB private static final String[][] slice = new String[][]{{"-01", "A!2", "A!2", "-01",},}; private static final Block[] blockType = new Block[]{sBlockCasingsTT, sBlockCasingsTT, sBlockCasingsTT}; private static final byte[] blockMeta = new byte[]{2, 1, 3}; - private final IHatchAdder[] addingMethods = new IHatchAdder[]{this::addToMachineList, this::addRackToMachineList}; + private static final IHatchAdder[] addingMethods = adders( + GT_MetaTileEntity_EM_computer::addToMachineList, + GT_MetaTileEntity_EM_computer::addRackToMachineList); private static final short[] casingTextures = new short[]{textureOffset + 1, textureOffset + 3}; private static final Block[] blockTypeFallback = new Block[]{sBlockCasingsTT, sBlockCasingsTT}; private static final byte[] blockMetaFallback = new byte[]{1, 3}; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_crafting.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_crafting.java index b7904b3219..7e338da853 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_crafting.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_crafting.java @@ -1,12 +1,12 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; +import com.github.technus.tectech.mechanics.constructable.IConstructable; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; -import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.thing.block.QuantumGlassBlock; -import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; +import com.github.technus.tectech.util.CommonValues; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; @@ -18,6 +18,7 @@ import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; +import static com.github.technus.tectech.mechanics.structure.Structure.adders; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -50,7 +51,9 @@ public class GT_MetaTileEntity_EM_crafting extends GT_MetaTileEntity_MultiblockB }; private static final Block[] blockType = new Block[]{sBlockCasingsTT, sBlockCasingsTT, sBlockCasingsTT, QuantumGlassBlock.INSTANCE, sBlockCasingsTT, sBlockCasingsTT}; private static final byte[] blockMeta = new byte[]{4, 10, 5, 0, 6, 9}; - private final IHatchAdder[] addingMethods = new IHatchAdder[]{this::addClassicToMachineList, this::addElementalToMachineList}; + private static final IHatchAdder[] addingMethods = adders( + GT_MetaTileEntity_EM_crafting::addClassicToMachineList, + GT_MetaTileEntity_EM_crafting::addElementalToMachineList); private static final short[] casingTextures = new short[]{textureOffset, textureOffset + 4}; private static final Block[] blockTypeFallback = new Block[]{sBlockCasingsTT, sBlockCasingsTT}; private static final byte[] blockMetaFallback = new byte[]{0, 4}; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java index a00c9b9041..319141e55c 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java @@ -1,17 +1,17 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.structure.Structure; -import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.Reference; -import com.github.technus.tectech.mechanics.dataTransport.InventoryDataPacket; import com.github.technus.tectech.mechanics.constructable.IConstructable; +import com.github.technus.tectech.mechanics.dataTransport.InventoryDataPacket; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputDataItems; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_OutputDataItems; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_Container_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_GUIContainer_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; +import com.github.technus.tectech.util.CommonValues; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; @@ -28,11 +28,12 @@ import net.minecraft.util.ResourceLocation; import java.util.ArrayList; -import static com.github.technus.tectech.util.CommonValues.V; +import static com.github.technus.tectech.mechanics.structure.Structure.adders; import static com.github.technus.tectech.recipe.TT_recipeAdder.nullItem; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; +import static com.github.technus.tectech.util.CommonValues.V; import static net.minecraft.util.StatCollector.translateToLocal; public class GT_MetaTileEntity_EM_dataBank extends GT_MetaTileEntity_MultiblockBase_EM implements IConstructable { @@ -49,7 +50,9 @@ public class GT_MetaTileEntity_EM_dataBank extends GT_MetaTileEntity_MultiblockB }; private static final Block[] blockType = new Block[]{sBlockCasingsTT, sBlockCasingsTT}; private static final byte[] blockMeta = new byte[]{2, 1}; - private final IHatchAdder[] addingMethods = new IHatchAdder[]{this::addClassicToMachineList, this::addDataBankHatchToMachineList}; + private static final IHatchAdder[] addingMethods = adders( + GT_MetaTileEntity_EM_dataBank::addClassicToMachineList, + GT_MetaTileEntity_EM_dataBank::addDataBankHatchToMachineList); private static final short[] casingTextures = new short[]{textureOffset, textureOffset + 1}; private static final Block[] blockTypeFallback = new Block[]{sBlockCasingsTT, sBlockCasingsTT}; private static final byte[] blockMetaFallback = new byte[]{0, 1}; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java index 2dafe62db6..0d243db7e8 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java @@ -1,15 +1,18 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; -import com.github.technus.tectech.mechanics.structure.Structure; -import com.github.technus.tectech.util.CommonValues; +import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; -import com.github.technus.tectech.mechanics.constructable.IConstructable; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputElemental; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.*; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.INameFunction; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.IStatusFunction; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.Parameters; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; +import com.github.technus.tectech.util.CommonValues; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; @@ -28,12 +31,13 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import org.apache.commons.lang3.reflect.FieldUtils; -import static com.github.technus.tectech.util.CommonValues.VN; +import static com.github.technus.tectech.mechanics.structure.Structure.adders; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.STATUS_OK; import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.STATUS_TOO_LOW; +import static com.github.technus.tectech.util.CommonValues.VN; import static net.minecraft.util.StatCollector.translateToLocal; import static net.minecraft.util.StatCollector.translateToLocalFormatted; @@ -66,7 +70,9 @@ public class GT_MetaTileEntity_EM_decay extends GT_MetaTileEntity_MultiblockBase }; private static final Block[] blockType = new Block[]{sBlockCasingsTT, sBlockCasingsTT, sBlockCasingsTT, sBlockCasingsTT}; private static final byte[] blockMeta = new byte[]{4, 5, 8, 6}; - private final IHatchAdder[] addingMethods = new IHatchAdder[]{this::addClassicToMachineList, this::addElementalToMachineList}; + private static final IHatchAdder[] addingMethods = adders( + GT_MetaTileEntity_EM_decay::addClassicToMachineList, + GT_MetaTileEntity_EM_decay::addElementalToMachineList); private static final short[] casingTextures = new short[]{textureOffset, textureOffset + 4}; private static final Block[] blockTypeFallback = new Block[]{sBlockCasingsTT, sBlockCasingsTT}; private static final byte[] blockMetaFallback = new byte[]{0, 4}; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java index 77f73edc63..1b17eaa4a6 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java @@ -1,17 +1,17 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.structure.Structure; -import com.github.technus.tectech.util.CommonValues; +import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.iHasElementalDefinition; import com.github.technus.tectech.mechanics.elementalMatter.core.transformations.aOredictDequantizationInfo; import com.github.technus.tectech.mechanics.elementalMatter.core.transformations.iExchangeInfo; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.thing.block.QuantumGlassBlock; -import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputElemental; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; +import com.github.technus.tectech.util.CommonValues; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; @@ -25,12 +25,13 @@ import net.minecraftforge.oredict.OreDictionary; import java.util.ArrayList; -import static com.github.technus.tectech.util.CommonValues.V; import static com.github.technus.tectech.mechanics.elementalMatter.core.templates.iElementalDefinition.STABLE_RAW_LIFE_TIME; import static com.github.technus.tectech.mechanics.elementalMatter.definitions.complex.dAtomDefinition.refMass; import static com.github.technus.tectech.mechanics.elementalMatter.definitions.complex.dAtomDefinition.refUnstableMass; +import static com.github.technus.tectech.mechanics.structure.Structure.adders; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; +import static com.github.technus.tectech.util.CommonValues.V; import static net.minecraft.util.StatCollector.translateToLocal; /** @@ -47,10 +48,10 @@ public class GT_MetaTileEntity_EM_dequantizer extends GT_MetaTileEntity_Multiblo }; private static final Block[] blockType = new Block[]{sBlockCasingsTT, sBlockCasingsTT, QuantumGlassBlock.INSTANCE}; private static final byte[] blockMeta = new byte[]{0, 4, 0}; - private final IHatchAdder[] addingMethods = new IHatchAdder[]{ - this::addClassicToMachineList, - this::addElementalInputToMachineList, - this::addElementalMufflerToMachineList}; + private static final IHatchAdder[] addingMethods = adders( + GT_MetaTileEntity_EM_dequantizer::addClassicToMachineList, + GT_MetaTileEntity_EM_dequantizer::addElementalInputToMachineList, + GT_MetaTileEntity_EM_dequantizer::addElementalMufflerToMachineList); private static final short[] casingTextures = new short[]{textureOffset, textureOffset + 4, textureOffset + 4}; private static final Block[] blockTypeFallback = new Block[]{sBlockCasingsTT, sBlockCasingsTT, sBlockCasingsTT}; private static final byte[] blockMetaFallback = new byte[]{0, 4, 4}; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java index c07be438d4..224e7afc86 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java @@ -1,15 +1,15 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; import cofh.api.energy.IEnergyContainerItem; -import com.github.technus.tectech.mechanics.structure.Structure; -import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.Reference; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.mechanics.constructable.IConstructable; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_Container_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_GUIContainer_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; +import com.github.technus.tectech.util.CommonValues; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; @@ -24,6 +24,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; +import static com.github.technus.tectech.mechanics.structure.Structure.adders; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; import static gregtech.api.GregTech_API.mEUtoRF; @@ -41,7 +42,8 @@ public class GT_MetaTileEntity_EM_infuser extends GT_MetaTileEntity_MultiblockBa }; private static final Block[] blockType = new Block[]{sBlockCasingsTT, sBlockCasingsTT}; private static final byte[] blockMeta = new byte[]{7, 4}; - private final IHatchAdder[] addingMethods = new IHatchAdder[]{this::addClassicToMachineList}; + private static final IHatchAdder[] addingMethods = adders( + GT_MetaTileEntity_EM_infuser::addClassicToMachineList); private static final short[] casingTextures = new short[]{textureOffset}; private static final Block[] blockTypeFallback = new Block[]{sBlockCasingsTT}; private static final byte[] blockMetaFallback = new byte[]{0}; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_junction.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_junction.java index b7555a4163..c4c0189431 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_junction.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_junction.java @@ -1,12 +1,15 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; -import com.github.technus.tectech.mechanics.structure.Structure; -import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.mechanics.constructable.IConstructable; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputElemental; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_OutputElemental; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.*; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.INameFunction; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.IStatusFunction; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.Parameters; +import com.github.technus.tectech.util.CommonValues; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.util.GT_Utility; @@ -14,10 +17,11 @@ import net.minecraft.block.Block; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; -import static com.github.technus.tectech.util.CommonValues.V; +import static com.github.technus.tectech.mechanics.structure.Structure.adders; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.*; +import static com.github.technus.tectech.util.CommonValues.V; import static gregtech.api.enums.GT_Values.E; import static net.minecraft.util.StatCollector.translateToLocal; @@ -42,7 +46,9 @@ public class GT_MetaTileEntity_EM_junction extends GT_MetaTileEntity_MultiblockB }; private static final Block[] blockType = new Block[]{sBlockCasingsTT, sBlockCasingsTT}; private static final byte[] blockMeta = new byte[]{4, 5}; - private final IHatchAdder[] addingMethods = new IHatchAdder[]{this::addClassicToMachineList, this::addElementalToMachineList}; + private static final IHatchAdder[] addingMethods = adders( + GT_MetaTileEntity_EM_junction::addClassicToMachineList, + GT_MetaTileEntity_EM_junction::addElementalToMachineList); private static final short[] casingTextures = new short[]{textureOffset, textureOffset + 4}; private static final Block[] blockTypeFallback = new Block[]{sBlockCasingsTT, sBlockCasingsTT}; private static final byte[] blockMetaFallback = new byte[]{0, 4}; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java index 935f3b3997..1d2ef85ace 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java @@ -1,9 +1,8 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.structure.Structure; -import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.Reference; import com.github.technus.tectech.TecTech; +import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.iHasElementalDefinition; @@ -11,10 +10,11 @@ import com.github.technus.tectech.mechanics.elementalMatter.core.transformations import com.github.technus.tectech.mechanics.elementalMatter.core.transformations.aItemQuantizationInfo; import com.github.technus.tectech.mechanics.elementalMatter.core.transformations.aOredictQuantizationInfo; import com.github.technus.tectech.mechanics.elementalMatter.core.transformations.bTransformationInfo; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.thing.block.QuantumGlassBlock; -import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; +import com.github.technus.tectech.util.CommonValues; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.GregTech_API; @@ -29,17 +29,18 @@ import net.minecraftforge.oredict.OreDictionary; import java.util.ArrayList; -import static com.github.technus.tectech.util.CommonValues.V; -import static com.github.technus.tectech.util.Util.isInputEqual; import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; import static com.github.technus.tectech.mechanics.elementalMatter.core.templates.iElementalDefinition.DEFAULT_ENERGY_LEVEL; import static com.github.technus.tectech.mechanics.elementalMatter.core.templates.iElementalDefinition.STABLE_RAW_LIFE_TIME; import static com.github.technus.tectech.mechanics.elementalMatter.definitions.complex.dAtomDefinition.refMass; import static com.github.technus.tectech.mechanics.elementalMatter.definitions.complex.dAtomDefinition.refUnstableMass; +import static com.github.technus.tectech.mechanics.structure.Structure.adders; import static com.github.technus.tectech.recipe.TT_recipeAdder.nullFluid; import static com.github.technus.tectech.recipe.TT_recipeAdder.nullItem; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; +import static com.github.technus.tectech.util.CommonValues.V; +import static com.github.technus.tectech.util.Util.isInputEqual; import static net.minecraft.util.StatCollector.translateToLocal; /** @@ -56,10 +57,10 @@ public class GT_MetaTileEntity_EM_quantizer extends GT_MetaTileEntity_Multiblock }; private static final Block[] blockType = new Block[]{sBlockCasingsTT, sBlockCasingsTT, QuantumGlassBlock.INSTANCE}; private static final byte[] blockMeta = new byte[]{4, 0, 0}; - private final IHatchAdder[] addingMethods = new IHatchAdder[]{ - this::addClassicToMachineList, - this::addElementalOutputToMachineList, - this::addElementalMufflerToMachineList}; + private static final IHatchAdder[] addingMethods = adders( + GT_MetaTileEntity_EM_quantizer::addClassicToMachineList, + GT_MetaTileEntity_EM_quantizer::addElementalOutputToMachineList, + GT_MetaTileEntity_EM_quantizer::addElementalMufflerToMachineList); private static final short[] casingTextures = new short[]{textureOffset, textureOffset + 4, textureOffset + 4}; private static final Block[] blockTypeFallback = new Block[]{sBlockCasingsTT, sBlockCasingsTT, sBlockCasingsTT}; private static final byte[] blockMetaFallback = new byte[]{0, 4, 4}; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java index 72a3c241ba..9ef566a9d3 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java @@ -1,14 +1,14 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; +import com.github.technus.tectech.mechanics.constructable.IConstructable; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; -import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.recipe.TT_recipe; -import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Holder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; +import com.github.technus.tectech.util.CommonValues; import cpw.mods.fml.common.registry.GameRegistry; import gregtech.api.enums.ItemList; import gregtech.api.enums.Textures; @@ -36,14 +36,15 @@ import org.apache.commons.lang3.reflect.FieldUtils; import java.util.ArrayList; import java.util.LinkedHashMap; -import static com.github.technus.tectech.util.CommonValues.V; -import static com.github.technus.tectech.util.CommonValues.VN; +import static com.github.technus.tectech.mechanics.structure.Structure.adders; import static com.github.technus.tectech.recipe.TT_recipe.E_RECIPE_ID; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; import static com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_crafting.crafter; import static com.github.technus.tectech.thing.metaTileEntity.multi.em_machine.GT_MetaTileEntity_EM_machine.machine; +import static com.github.technus.tectech.util.CommonValues.V; +import static com.github.technus.tectech.util.CommonValues.VN; import static gregtech.api.enums.GT_Values.E; import static net.minecraft.util.StatCollector.translateToLocal; import static net.minecraft.util.StatCollector.translateToLocalFormatted; @@ -77,7 +78,9 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB }; private static final Block[] blockType = new Block[]{sBlockCasingsTT, sBlockCasingsTT, sBlockCasingsTT}; private static final byte[] blockMeta = new byte[]{1, 3, 2}; - private final IHatchAdder[] addingMethods = new IHatchAdder[]{this::addClassicToMachineList, this::addHolderToMachineList}; + private static final IHatchAdder[] addingMethods = adders( + GT_MetaTileEntity_EM_research::addClassicToMachineList, + GT_MetaTileEntity_EM_research::addHolderToMachineList); private static final short[] casingTextures = new short[]{textureOffset + 1, textureOffset + 3}; private static final Block[] blockTypeFallback = new Block[]{sBlockCasingsTT, Blocks.air}; private static final byte[] blockMetaFallback = new byte[]{1, 0}; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java index 3db6f66eb0..25da9bfe5a 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java @@ -1,21 +1,21 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; -import com.github.technus.tectech.mechanics.structure.Structure; -import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; +import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalDefinitionStack; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; import com.github.technus.tectech.mechanics.elementalMatter.core.tElementalException; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.recipe.TT_recipe; import com.github.technus.tectech.thing.CustomItemList; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.thing.block.QuantumStuffBlock; import com.github.technus.tectech.thing.item.ElementalDefinitionScanStorage_EM; -import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; import com.github.technus.tectech.thing.metaTileEntity.multi.base.*; +import com.github.technus.tectech.util.CommonValues; import gregtech.api.enums.ItemList; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; @@ -34,16 +34,17 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraftforge.common.util.ForgeDirection; import org.apache.commons.lang3.reflect.FieldUtils; -import static com.github.technus.tectech.util.CommonValues.V; -import static com.github.technus.tectech.util.CommonValues.VN; -import static com.github.technus.tectech.util.Util.areBitsSet; import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; import static com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.cPrimitiveDefinition.nbtE__; +import static com.github.technus.tectech.mechanics.structure.Structure.adders; import static com.github.technus.tectech.recipe.TT_recipe.E_RECIPE_ID; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; import static com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_crafting.crafter; import static com.github.technus.tectech.thing.metaTileEntity.multi.em_machine.GT_MetaTileEntity_EM_machine.machine; +import static com.github.technus.tectech.util.CommonValues.V; +import static com.github.technus.tectech.util.CommonValues.VN; +import static com.github.technus.tectech.util.Util.areBitsSet; import static net.minecraft.util.StatCollector.translateToLocal; import static net.minecraft.util.StatCollector.translateToLocalFormatted; @@ -80,11 +81,11 @@ public class GT_MetaTileEntity_EM_scanner extends GT_MetaTileEntity_MultiblockBa }; private static final Block[] blockType = new Block[]{sBlockCasingsTT, QuantumGlassBlock.INSTANCE, sBlockCasingsTT}; private static final byte[] blockMeta = new byte[]{4, 0, 0}; - private final IHatchAdder[] addingMethods = new IHatchAdder[]{ - this::addClassicToMachineList, - this::addElementalInputToMachineList, - this::addElementalOutputToMachineList, - this::addElementalMufflerToMachineList}; + private static final IHatchAdder[] addingMethods = adders( + GT_MetaTileEntity_EM_scanner::addClassicToMachineList, + GT_MetaTileEntity_EM_scanner::addElementalInputToMachineList, + GT_MetaTileEntity_EM_scanner::addElementalOutputToMachineList, + GT_MetaTileEntity_EM_scanner::addElementalMufflerToMachineList); private static final short[] casingTextures = new short[]{textureOffset, textureOffset + 4, textureOffset + 4, textureOffset + 4}; private static final Block[] blockTypeFallback = new Block[]{sBlockCasingsTT, sBlockCasingsTT, sBlockCasingsTT, sBlockCasingsTT}; private static final byte[] blockMetaFallback = new byte[]{0, 4, 4, 4}; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_stabilizer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_stabilizer.java index 7219429d11..e579e68d51 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_stabilizer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_stabilizer.java @@ -1,17 +1,18 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; +import com.github.technus.tectech.mechanics.constructable.IConstructable; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; -import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.thing.block.QuantumGlassBlock; -import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; +import com.github.technus.tectech.util.CommonValues; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import net.minecraft.block.Block; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; +import static com.github.technus.tectech.mechanics.structure.Structure.adders; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; import static net.minecraft.util.StatCollector.translateToLocal; @@ -30,7 +31,9 @@ public class GT_MetaTileEntity_EM_stabilizer extends GT_MetaTileEntity_Multibloc }; private static final Block[] blockType = new Block[]{sBlockCasingsTT, QuantumGlassBlock.INSTANCE, sBlockCasingsTT, sBlockCasingsTT, sBlockCasingsTT}; private static final byte[] blockMeta = new byte[]{4, 0, 5, 6, 9}; - private final IHatchAdder[] addingMethods = new IHatchAdder[]{this::addClassicToMachineList, this::addElementalToMachineList}; + private static final IHatchAdder[] addingMethods = adders( + GT_MetaTileEntity_EM_stabilizer::addClassicToMachineList, + GT_MetaTileEntity_EM_stabilizer::addElementalToMachineList); private static final short[] casingTextures = new short[]{textureOffset, textureOffset + 4}; private static final Block[] blockTypeFallback = new Block[]{sBlockCasingsTT, sBlockCasingsTT}; private static final byte[] blockMetaFallback = new byte[]{0, 4}; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java index 043b266f62..ced1bceed1 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java @@ -1,15 +1,18 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; -import com.github.technus.tectech.mechanics.structure.Structure; -import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.Reference; -import com.github.technus.tectech.mechanics.dataTransport.QuantumDataPacket; import com.github.technus.tectech.mechanics.constructable.IConstructable; +import com.github.technus.tectech.mechanics.dataTransport.QuantumDataPacket; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputData; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_OutputData; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.*; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.INameFunction; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.IStatusFunction; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.Parameters; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.util.Vec3Impl; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -22,11 +25,12 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; -import static com.github.technus.tectech.util.CommonValues.V; +import static com.github.technus.tectech.mechanics.structure.Structure.adders; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.*; +import static com.github.technus.tectech.util.CommonValues.V; import static net.minecraft.util.StatCollector.translateToLocal; /** @@ -41,7 +45,8 @@ public class GT_MetaTileEntity_EM_switch extends GT_MetaTileEntity_MultiblockBas }; private static final Block[] blockType = new Block[]{sBlockCasingsTT}; private static final byte[] blockMeta = new byte[]{3}; - private final IHatchAdder[] addingMethods = new IHatchAdder[]{this::addClassicToMachineList}; + private static final IHatchAdder[] addingMethods = adders( + GT_MetaTileEntity_EM_switch::addClassicToMachineList); private static final short[] casingTextures = new short[]{textureOffset + 1}; private static final Block[] blockTypeFallback = new Block[]{sBlockCasingsTT}; private static final byte[] blockMetaFallback = new byte[]{1}; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_wormhole.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_wormhole.java index 1d06a3b0d7..65f09c03dc 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_wormhole.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_wormhole.java @@ -1,12 +1,12 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; +import com.github.technus.tectech.mechanics.constructable.IConstructable; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; -import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.thing.block.QuantumGlassBlock; -import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; +import com.github.technus.tectech.util.CommonValues; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; @@ -18,6 +18,7 @@ import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; +import static com.github.technus.tectech.mechanics.structure.Structure.adders; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -49,7 +50,9 @@ public class GT_MetaTileEntity_EM_wormhole extends GT_MetaTileEntity_MultiblockB }; private static final Block[] blockType = new Block[]{sBlockCasingsTT, sBlockCasingsTT, QuantumGlassBlock.INSTANCE, sBlockCasingsTT, sBlockCasingsTT}; private static final byte[] blockMeta = new byte[]{12, 10, 0, 5, 11}; - private final IHatchAdder[] addingMethods = new IHatchAdder[]{this::addClassicToMachineList, this::addElementalToMachineList}; + private static final IHatchAdder[] addingMethods = adders( + GT_MetaTileEntity_EM_wormhole::addClassicToMachineList, + GT_MetaTileEntity_EM_wormhole::addElementalToMachineList); private static final short[] casingTextures = new short[]{textureOffset, textureOffset + 4}; private static final Block[] blockTypeFallback = new Block[]{sBlockCasingsTT, sBlockCasingsTT}; private static final byte[] blockMetaFallback = new byte[]{0, 4}; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java index a320a8b35a..4ab79a6732 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java @@ -1,12 +1,12 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; -import com.github.technus.tectech.mechanics.structure.Structure; -import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.Reference; import com.github.technus.tectech.mechanics.constructable.IConstructable; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.thing.metaTileEntity.multi.base.*; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.util.Vec3Impl; import gregtech.api.enums.Textures; import gregtech.api.interfaces.ITexture; @@ -27,6 +27,7 @@ import java.util.ArrayList; import java.util.HashSet; import static com.github.technus.tectech.loader.MainLoader.microwaving; +import static com.github.technus.tectech.mechanics.structure.Structure.adders; import static com.github.technus.tectech.recipe.TT_recipeAdder.nullItem; import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.*; import static gregtech.api.GregTech_API.sBlockCasings4; @@ -53,7 +54,8 @@ public class GT_MetaTileEntity_TM_microwave extends GT_MetaTileEntity_Multiblock private static final Block[] blockType = new Block[]{sBlockCasings4}; private static final byte[] blockMeta = new byte[]{1}; - private final IHatchAdder[] addingMethods = new IHatchAdder[]{this::addClassicToMachineList}; + private static final IHatchAdder[] addingMethods = adders( + GT_MetaTileEntity_TM_microwave::addClassicToMachineList); private static final short[] casingTextures = new short[]{49}; private static final Block[] blockTypeFallback = new Block[]{sBlockCasings4}; private static final byte[] blockMetaFallback = new byte[]{1}; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java index e800037850..4ca2ada866 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java @@ -1,12 +1,12 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.mechanics.constructable.IConstructable; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_Container_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_GUIContainer_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; +import com.github.technus.tectech.util.CommonValues; import gregtech.api.enums.Textures; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; @@ -17,6 +17,7 @@ import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; +import static com.github.technus.tectech.mechanics.structure.Structure.adders; import static gregtech.api.GregTech_API.sBlockCasings4; import static net.minecraft.util.StatCollector.translateToLocal; @@ -45,7 +46,8 @@ public class GT_MetaTileEntity_TM_proccessingStack extends GT_MetaTileEntity_Mul private static final Block[] blockType = new Block[]{sBlockCasings4}; private static final byte[] blockMeta = new byte[]{1}; - private final IHatchAdder[] addingMethods = new IHatchAdder[]{this::addClassicToMachineList}; + private static final IHatchAdder[] addingMethods = adders( + GT_MetaTileEntity_TM_proccessingStack::addClassicToMachineList); private static final short[] casingTextures = new short[]{49}; private static final Block[] blockTypeFallback = new Block[]{sBlockCasings4}; private static final byte[] blockMetaFallback = new byte[]{1}; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java index 6a9991451b..16743bd2de 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java @@ -1,22 +1,25 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; -import com.github.technus.tectech.mechanics.structure.Structure; -import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.loader.NetworkDispatcher; +import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.mechanics.data.RendererMessage; import com.github.technus.tectech.mechanics.data.ThaumSpark; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.thing.cover.GT_Cover_TM_TeslaCoil; import com.github.technus.tectech.thing.cover.GT_Cover_TM_TeslaCoil_Ultimate; -import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Capacitor; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DynamoMulti; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Param; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.*; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.INameFunction; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.IStatusFunction; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.Parameters; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import com.github.technus.tectech.thing.metaTileEntity.single.GT_MetaTileEntity_TeslaCoil; +import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.util.Vec3Impl; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -31,13 +34,18 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; -import static com.github.technus.tectech.util.CommonValues.V; -import static com.github.technus.tectech.util.Util.*; +import static com.github.technus.tectech.mechanics.structure.Structure.adders; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsBA0; import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.*; +import static com.github.technus.tectech.util.CommonValues.V; +import static com.github.technus.tectech.util.Util.entriesSortedByValues; +import static com.github.technus.tectech.util.Util.map; import static gregtech.api.enums.GT_Values.E; import static java.lang.Math.max; import static java.lang.Math.min; @@ -97,7 +105,9 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock private static final byte[] blockMetaT4 = new byte[]{7, 4, 6, 8}; private static final byte[] blockMetaT5 = new byte[]{7, 5, 6, 8}; private static final byte[][] blockMetas = new byte[][]{blockMetaT0, blockMetaT1, blockMetaT2, blockMetaT3, blockMetaT4, blockMetaT5}; - private final IHatchAdder[] addingMethods = new IHatchAdder[]{this::addCapacitorToMachineList, this::addFrameToMachineList}; + private static final IHatchAdder[] addingMethods = adders( + GT_MetaTileEntity_TM_teslaCoil::addCapacitorToMachineList, + GT_MetaTileEntity_TM_teslaCoil::addFrameToMachineList); private static final short[] casingTextures = new short[]{(texturePage << 7) + 16 + 6, 0}; private static final Block[] blockTypeFallback = new Block[]{sBlockCasingsBA0, null}; private static final byte[] blockMetaFallback = new byte[]{6, 0}; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java index 8cf1cee16d..1e5b36ab86 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java @@ -2,21 +2,25 @@ package com.github.technus.tectech.thing.metaTileEntity.multi.base; import com.github.technus.tectech.Reference; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.mechanics.alignment.*; +import com.github.technus.tectech.loader.NetworkDispatcher; +import com.github.technus.tectech.mechanics.alignment.AlignmentLimits; +import com.github.technus.tectech.mechanics.alignment.AlignmentMessage; +import com.github.technus.tectech.mechanics.alignment.IAlignment; +import com.github.technus.tectech.mechanics.alignment.IAlignmentLimits; import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; import com.github.technus.tectech.mechanics.alignment.enumerable.Flip; import com.github.technus.tectech.mechanics.alignment.enumerable.Rotation; -import com.github.technus.tectech.mechanics.structure.IStructureDefinition; -import com.github.technus.tectech.mechanics.structure.Structure; -import com.github.technus.tectech.util.Util; -import com.github.technus.tectech.util.Vec3Impl; -import com.github.technus.tectech.loader.NetworkDispatcher; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalDefinitionStack; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; import com.github.technus.tectech.mechanics.elementalMatter.core.tElementalException; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.IStructureDefinition; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.thing.metaTileEntity.hatch.*; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; +import com.github.technus.tectech.util.Util; +import com.github.technus.tectech.util.Vec3Impl; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; @@ -42,10 +46,10 @@ import net.minecraftforge.fluids.FluidStack; import java.util.ArrayList; -import static com.github.technus.tectech.util.CommonValues.*; -import static com.github.technus.tectech.util.Util.getTier; import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; +import static com.github.technus.tectech.util.CommonValues.*; +import static com.github.technus.tectech.util.Util.getTier; /** * Created by danie_000 on 27.10.2016. @@ -220,17 +224,18 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt } @Deprecated - public final boolean structureCheck_EM( + @SuppressWarnings("unchecked") + public final boolean structureCheck_EM( String[][] structure,//0-9 casing, +- air no air, a-z ignore Block[] blockType,//use numbers 0-9 for casing types byte[] blockMeta,//use numbers 0-9 for casing types - IHatchAdder[] addingMethods, + IHatchAdder[] addingMethods, short[] casingTextures, Block[] blockTypeFallback,//use numbers 0-9 for casing types byte[] blockMetaFallback,//use numbers 0-9 for casing types int horizontalOffset, int verticalOffset, int depthOffset) { return Structure.checker(structure, blockType, blockMeta, addingMethods, casingTextures, blockTypeFallback, blockMetaFallback, - horizontalOffset, verticalOffset, depthOffset, getBaseMetaTileEntity(), getExtendedFacing(), !mMachine); + horizontalOffset, verticalOffset, depthOffset, (T)this, getExtendedFacing(), !mMachine); } //endregion diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/IHatchAdder.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/IHatchAdder.java deleted file mode 100644 index 539fcf4f38..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/IHatchAdder.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.multi.base; - - -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; - -@Deprecated -public interface IHatchAdder { - /** - * Callback to add hatch - * @param iGregTechTileEntity hatch - * @param aShort requested texture index, or null if not... - * @return managed to add hatch (structure still valid) - */ - boolean apply(IGregTechTileEntity iGregTechTileEntity, Short aShort); -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java index 5c3296f980..1c76f7be6c 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java @@ -1,15 +1,15 @@ package com.github.technus.tectech.thing.metaTileEntity.multi.em_machine; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IHatchAdder; -import com.github.technus.tectech.mechanics.structure.Structure; -import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.util.Util; +import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; +import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.thing.block.QuantumStuffBlock; -import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.*; +import com.github.technus.tectech.util.CommonValues; +import com.github.technus.tectech.util.Util; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import net.minecraft.block.Block; @@ -23,6 +23,7 @@ import net.minecraftforge.common.util.ForgeDirection; import java.util.HashMap; import java.util.function.Supplier; +import static com.github.technus.tectech.mechanics.structure.Structure.adders; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.*; @@ -50,7 +51,9 @@ public class GT_MetaTileEntity_EM_machine extends GT_MetaTileEntity_MultiblockBa {"B0", "A!!!", "0!!!0", "A!!!", "B0",},}; private static final Block[] blockType = new Block[]{sBlockCasingsTT, QuantumGlassBlock.INSTANCE, sBlockCasingsTT, sBlockCasingsTT}; private static final byte[] blockMeta = new byte[]{4, 0, 5, 6}; - private final IHatchAdder[] addingMethods = new IHatchAdder[]{this::addClassicToMachineList, this::addElementalToMachineList}; + private static final IHatchAdder[] addingMethods = adders( + GT_MetaTileEntity_EM_machine::addClassicToMachineList, + GT_MetaTileEntity_EM_machine::addElementalToMachineList); private static final short[] casingTextures = new short[]{textureOffset, textureOffset + 4}; private static final Block[] blockTypeFallback = new Block[]{sBlockCasingsTT, sBlockCasingsTT}; private static final byte[] blockMetaFallback = new byte[]{0, 4}; -- cgit From eb4333b293eb2046269f5d9347c4d02760d697bd Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 26 Apr 2020 07:57:11 +0200 Subject: Use generics here --- .../multi/base/GT_MetaTileEntity_MultiblockBase_EM.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java index 1e5b36ab86..83c7066938 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java @@ -1140,12 +1140,12 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt } } - for (GT_MetaTileEntity_Hatch_DataConnector hatch_data : eOutputData) { + for (GT_MetaTileEntity_Hatch_DataConnector hatch_data : eOutputData) { if (GT_MetaTileEntity_MultiBlockBase.isValidMetaTileEntity(hatch_data)) { hatch_data.id = -1; } } - for (GT_MetaTileEntity_Hatch_DataConnector hatch_data : eInputData) { + for (GT_MetaTileEntity_Hatch_DataConnector hatch_data : eInputData) { if (GT_MetaTileEntity_MultiBlockBase.isValidMetaTileEntity(hatch_data)) { hatch_data.id = -1; } @@ -1209,13 +1209,13 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt } id = 1; - for (GT_MetaTileEntity_Hatch_DataConnector hatch_data : eOutputData) { + for (GT_MetaTileEntity_Hatch_DataConnector hatch_data : eOutputData) { if (GT_MetaTileEntity_MultiBlockBase.isValidMetaTileEntity(hatch_data)) { hatch_data.id = id++; } } id = 1; - for (GT_MetaTileEntity_Hatch_DataConnector hatch_data : eInputData) { + for (GT_MetaTileEntity_Hatch_DataConnector hatch_data : eInputData) { if (GT_MetaTileEntity_MultiBlockBase.isValidMetaTileEntity(hatch_data)) { hatch_data.id = id++; } -- cgit From 93bca910f733b60d8151e4e619b27a1e585811ed Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 26 Apr 2020 08:00:35 +0200 Subject: Fix pollutor localization --- .../thing/metaTileEntity/single/GT_MetaTileEntity_DebugPollutor.java | 2 +- src/main/resources/assets/tectech/lang/en_US.lang | 2 +- src/main/resources/assets/tectech/lang/zh_CN.lang | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugPollutor.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugPollutor.java index 6fef2efbe9..0d5a59a5c1 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugPollutor.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugPollutor.java @@ -148,7 +148,7 @@ public class GT_MetaTileEntity_DebugPollutor extends GT_MetaTileEntity_TieredMac CommonValues.TEC_MARK_GENERAL, translateToLocal("gt.blockmachines.debug.tt.pollutor.desc.0"),//Shit genny broke! EnumChatFormatting.BLUE + translateToLocal("gt.blockmachines.debug.tt.pollutor.desc.1"),//Infinite Producer/Consumer - EnumChatFormatting.BLUE + translateToLocal("gt.blockmachines.debug.tt.pollutor.desc.1")//Since i wanted one... + EnumChatFormatting.BLUE + translateToLocal("gt.blockmachines.debug.tt.pollutor.desc.2")//Since i wanted one? }; } diff --git a/src/main/resources/assets/tectech/lang/en_US.lang b/src/main/resources/assets/tectech/lang/en_US.lang index b3ae51a407..5005a90c60 100644 --- a/src/main/resources/assets/tectech/lang/en_US.lang +++ b/src/main/resources/assets/tectech/lang/en_US.lang @@ -762,7 +762,7 @@ gt.blockmachines.machine.tt.tesla.desc.1=Lightning stoves for the rich gt.blockmachines.debug.tt.pollutor.name=Debug Pollution Generator gt.blockmachines.debug.tt.pollutor.desc.0=Shit genny broke! gt.blockmachines.debug.tt.pollutor.desc.1=Infinite Producer/Consumer -gt.blockmachines.debug.tt.pollutor.desc.2=Since i wanted one... +gt.blockmachines.debug.tt.pollutor.desc.2=Since i wanted one? gt.blockmachines.debug.tt.data.name=Debug Data Hatch gt.blockmachines.debug.tt.data.desc.0=Quantum Data Output gt.blockmachines.debug.tt.data.desc.1=High speed fibre optics connector. diff --git a/src/main/resources/assets/tectech/lang/zh_CN.lang b/src/main/resources/assets/tectech/lang/zh_CN.lang index 16d32829f7..a96b13a58f 100644 --- a/src/main/resources/assets/tectech/lang/zh_CN.lang +++ b/src/main/resources/assets/tectech/lang/zh_CN.lang @@ -762,7 +762,7 @@ gt.blockmachines.machine.tt.tesla.desc.1=富人的闪电洪炉 gt.blockmachines.debug.tt.pollutor.name=Debug污染生成机 gt.blockmachines.debug.tt.pollutor.desc.0=该死的genny破产了! gt.blockmachines.debug.tt.pollutor.desc.1=无限的生产者/消费者 -gt.blockmachines.debug.tt.pollutor.desc.2=我只是想要一个... +gt.blockmachines.debug.tt.pollutor.desc.2=我只是想要一个? gt.blockmachines.debug.tt.data.name=Debug数据仓 gt.blockmachines.debug.tt.data.desc.0=量子数据输出 gt.blockmachines.debug.tt.data.desc.1=高速光纤接口 -- cgit From 0c35badc49defc7bd7f76f763aa0a86bd9e7be64 Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 26 Apr 2020 08:25:24 +0200 Subject: Add helper method for on check pass --- .../mechanics/structure/StructureUtility.java | 47 +++++++++++++++++++++- .../multi/GT_MetaTileEntity_EM_transformer.java | 6 ++- 2 files changed, 50 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java index 3d13ca86e2..e0e94a00eb 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java @@ -12,6 +12,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import java.util.*; +import java.util.function.Consumer; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sHintCasingsTT; @@ -76,7 +77,9 @@ public class StructureUtility { @SuppressWarnings("unchecked") public static IStructureElement error(){ return ERROR; - } /** + } + + /** * Does not allow Block duplicates (with different meta) */ public static IStructureElement ofHintFlat(Map blocsMap,Block hintBlock,int hintMeta){ @@ -145,6 +148,24 @@ public class StructureUtility { return ofHint(block, meta,block,meta); } + public static IStructureElement ofHintAdder(IBlockAdder iBlockAdder,Block hintBlock,int hintMeta){ + if(iBlockAdder==null ||hintBlock==null){ + throw new IllegalArgumentException(); + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + return iBlockAdder.apply(t,world.getBlock(x, y, z), world.getBlockMetadata(x, y, z)); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z) { + TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); + return true; + } + }; + } + /** * Does not allow Block duplicates (with different meta) */ @@ -256,6 +277,7 @@ public class StructureUtility { }; } + public static IStructureElement ofTileAdder(ITileAdder iTileAdder,Block hintBlock,int hintMeta){ if(iTileAdder==null ||hintBlock==null){ throw new IllegalArgumentException(); @@ -294,6 +316,29 @@ public class StructureUtility { }; } + public static IStructureElement onCheckPass(Consumer onCheckPass, IStructureElement element){ + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + boolean check = element.check(t, world, x, y, z); + if(check){ + onCheckPass.accept(t); + } + return check; + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z) { + return element.placeBlock(t, world, x, y, z); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z) { + return element.spawnHint(t, world, x, y, z); + } + }; + } + @SuppressWarnings("unchecked") public static IStructureNavigate step(Vec3Impl step){ if(step==null || step.get0()<0 || step.get1()<0 || step.get2()<0){ diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java index 1381c1b0f7..b65fcda229 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java @@ -47,9 +47,10 @@ public class GT_MetaTileEntity_EM_transformer extends GT_MetaTileEntity_Multiblo .addElement('0', ofBlock(sBlockCasings1,15)) .addElement('1', ofElementChain( ofHatchAdder(GT_MetaTileEntity_EM_transformer::addEnergyIOToMachineList,textureOffset,sHintCasingsTT,0), - ofBlock(sBlockCasingsTT,0) + onCheckPass(t->t.casingCount++,ofBlock(sBlockCasingsTT,0)) )) .build(); + private int casingCount=0; @Override public IStructureDefinition getStructure_EM() { @@ -86,7 +87,8 @@ public class GT_MetaTileEntity_EM_transformer extends GT_MetaTileEntity_Multiblo @Override public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { - return structureCheck_EM("main", 1, 1, 0); + casingCount=0; + return structureCheck_EM("main", 1, 1, 0) && casingCount>=5; } @Override -- cgit From 1522dceb7629b3026e3c4506305d7d1f8708527c Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 26 Apr 2020 08:27:32 +0200 Subject: add some doc --- .../com/github/technus/tectech/mechanics/structure/IBlockAdder.java | 2 +- .../com/github/technus/tectech/mechanics/structure/IHatchAdder.java | 2 +- .../java/com/github/technus/tectech/mechanics/structure/ITileAdder.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IBlockAdder.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IBlockAdder.java index 85d6f1be3f..21841fc380 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IBlockAdder.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IBlockAdder.java @@ -5,7 +5,7 @@ import net.minecraft.block.Block; public interface IBlockAdder { /** - * Callback on block added + * Callback on block added, needs to check if block is valid (and add it) * @param block block attempted to add * @param meta meta of block attempted to add * @return is structure still valid diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IHatchAdder.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IHatchAdder.java index 6e5aca5be3..0666e3f214 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IHatchAdder.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IHatchAdder.java @@ -5,7 +5,7 @@ import gregtech.api.interfaces.tileentity.IGregTechTileEntity; public interface IHatchAdder { /** - * Callback to add hatch + * Callback to add hatch, needs to check if hatch is valid (and add it) * @param iGregTechTileEntity hatch * @param aShort requested texture index, or null if not... * @return managed to add hatch (structure still valid) diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/ITileAdder.java b/src/main/java/com/github/technus/tectech/mechanics/structure/ITileAdder.java index bdb619984a..2af878c79e 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/ITileAdder.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/ITileAdder.java @@ -4,7 +4,7 @@ import net.minecraft.tileentity.TileEntity; public interface ITileAdder { /** - * Callback to add hatch + * Callback to add hatch, needs to check if tile is valid (and add it) * @param tileEntity tile * @return managed to add hatch (structure still valid) */ -- cgit From f40fed706320a4de336bd4e764921daf85262ea1 Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 26 Apr 2020 08:28:07 +0200 Subject: remove unused field --- .../com/github/technus/tectech/mechanics/structure/Structure.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java b/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java index 7eda9b690a..21bf0281bc 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java @@ -12,14 +12,10 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -import java.util.regex.Pattern; - import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; @Deprecated public class Structure { - private static final Pattern MATCH_E = Pattern.compile("(E,(E,)+)"); - private Structure(){} @SafeVarargs -- cgit From 65cbb63664bfcad81265b26751f1d53e50b7ea96 Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 26 Apr 2020 09:00:00 +0200 Subject: Make that api chooch --- .../tectech/loader/ConstructableLoader.java | 10 +++---- .../constructable/IMultiblockInfoContainer.java | 19 +++++++++---- .../thing/item/ConstructableTriggerItem.java | 31 +++++++++++----------- 3 files changed, 34 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/loader/ConstructableLoader.java b/src/main/java/com/github/technus/tectech/loader/ConstructableLoader.java index 665889dc1f..2cd4f04fc8 100644 --- a/src/main/java/com/github/technus/tectech/loader/ConstructableLoader.java +++ b/src/main/java/com/github/technus/tectech/loader/ConstructableLoader.java @@ -6,17 +6,16 @@ import com.github.technus.tectech.mechanics.structure.Structure; import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_ElectricBlastFurnace; import net.minecraft.block.Block; import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumChatFormatting; -import static com.github.technus.tectech.mechanics.constructable.IMultiblockInfoContainer.*; +import static com.github.technus.tectech.mechanics.constructable.IMultiblockInfoContainer.registerMetaClass; import static gregtech.api.GregTech_API.sBlockCasings1; public class ConstructableLoader implements Runnable { @Override public void run() { - registerMetaClass(GT_MetaTileEntity_ElectricBlastFurnace.class, new IMultiblockInfoContainer() { + registerMetaClass(GT_MetaTileEntity_ElectricBlastFurnace.class, new IMultiblockInfoContainer() { //region Structure private final String[][] shape = new String[][]{ {"000","\"\"\"","\"\"\""," . ",}, @@ -34,8 +33,9 @@ public class ConstructableLoader implements Runnable { //endregion @Override - public void construct(ItemStack stackSize, boolean hintsOnly, TileEntity tileEntity, ExtendedFacing aSide) { - Structure.builder(shape, blockType, blockMeta, 1, 3, 0, tileEntity, aSide, hintsOnly); + public void construct(ItemStack stackSize, boolean hintsOnly, GT_MetaTileEntity_ElectricBlastFurnace tileEntity, ExtendedFacing aSide) { + Structure.builder(shape, blockType, blockMeta, 1, 3, 0, + tileEntity.getBaseMetaTileEntity(), aSide, hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/mechanics/constructable/IMultiblockInfoContainer.java b/src/main/java/com/github/technus/tectech/mechanics/constructable/IMultiblockInfoContainer.java index 2506342f72..173e0d16ec 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/constructable/IMultiblockInfoContainer.java +++ b/src/main/java/com/github/technus/tectech/mechanics/constructable/IMultiblockInfoContainer.java @@ -12,18 +12,27 @@ import java.util.HashMap; /** * To implement IConstructable on not own TileEntities */ -public interface IMultiblockInfoContainer { - HashMap MULTIBLOCK_MAP = new HashMap<>(); +public interface IMultiblockInfoContainer { + HashMap> MULTIBLOCK_MAP = new HashMap<>(); - static void registerTileClass(Class clazz, IMultiblockInfoContainer info){ + static void registerTileClass(Class clazz, IMultiblockInfoContainer info){ MULTIBLOCK_MAP.put(clazz.getCanonicalName(),info); } - static void registerMetaClass(Class clazz, IMultiblockInfoContainer info){ + static void registerMetaClass(Class clazz, IMultiblockInfoContainer info){ MULTIBLOCK_MAP.put(clazz.getCanonicalName(),info); } - void construct(ItemStack stackSize, boolean hintsOnly, TileEntity tileEntity, ExtendedFacing aSide); + @SuppressWarnings("unchecked") + static IMultiblockInfoContainer get(Class tClass){ + return (IMultiblockInfoContainer)MULTIBLOCK_MAP.get(tClass.getCanonicalName()); + } + + static boolean contains(Class tClass){ + return MULTIBLOCK_MAP.containsKey(tClass.getCanonicalName()); + } + + void construct(ItemStack stackSize, boolean hintsOnly, T tileEntity, ExtendedFacing aSide); @SideOnly(Side.CLIENT) String[] getDescription(ItemStack stackSize); diff --git a/src/main/java/com/github/technus/tectech/thing/item/ConstructableTriggerItem.java b/src/main/java/com/github/technus/tectech/thing/item/ConstructableTriggerItem.java index 4160ae2aba..c24b35f8d5 100644 --- a/src/main/java/com/github/technus/tectech/thing/item/ConstructableTriggerItem.java +++ b/src/main/java/com/github/technus/tectech/thing/item/ConstructableTriggerItem.java @@ -23,7 +23,6 @@ import java.util.List; import static com.github.technus.tectech.Reference.MODID; import static com.github.technus.tectech.loader.gui.CreativeTabTecTech.creativeTabTecTech; -import static com.github.technus.tectech.mechanics.constructable.IMultiblockInfoContainer.MULTIBLOCK_MAP; import static net.minecraft.util.StatCollector.translateToLocal; /** @@ -51,20 +50,20 @@ public final class ConstructableTriggerItem extends Item { IMetaTileEntity metaTE = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity(); if (metaTE instanceof IConstructable) { ((IConstructable) metaTE).construct(aStack, false); - } else if (MULTIBLOCK_MAP.containsKey(metaTE.getClass().getCanonicalName())) { - IMultiblockInfoContainer iMultiblockInfoContainer = MULTIBLOCK_MAP.get(metaTE.getClass().getCanonicalName()); + } else if (IMultiblockInfoContainer.contains(metaTE.getClass())) { + IMultiblockInfoContainer iMultiblockInfoContainer =IMultiblockInfoContainer.get(metaTE.getClass()); if(metaTE instanceof IAlignment){ - iMultiblockInfoContainer.construct(aStack, false, tTileEntity, ( + iMultiblockInfoContainer.construct(aStack, false, metaTE, ( (IAlignment) metaTE).getExtendedFacing()); }else { - iMultiblockInfoContainer.construct(aStack, false, tTileEntity, + iMultiblockInfoContainer.construct(aStack, false, metaTE, ExtendedFacing.of(ForgeDirection.getOrientation(((IGregTechTileEntity) tTileEntity).getFrontFacing()))); } } } else if (tTileEntity instanceof IConstructable) { ((IConstructable) tTileEntity).construct(aStack, false); - } else if (MULTIBLOCK_MAP.containsKey(tTileEntity.getClass().getCanonicalName())) { - IMultiblockInfoContainer iMultiblockInfoContainer = MULTIBLOCK_MAP.get(tTileEntity.getClass().getCanonicalName()); + } else if (IMultiblockInfoContainer.contains(tTileEntity.getClass())) { + IMultiblockInfoContainer iMultiblockInfoContainer =IMultiblockInfoContainer.get(tTileEntity.getClass()); if(tTileEntity instanceof IAlignment){ iMultiblockInfoContainer.construct(aStack, false, tTileEntity, ((IAlignment) tTileEntity).getExtendedFacing()); @@ -83,24 +82,24 @@ public final class ConstructableTriggerItem extends Item { ((IConstructable) metaTE).construct(aStack, true); TecTech.proxy.printInchat(((IConstructable) metaTE).getStructureDescription(aStack)); return false; - } else if(MULTIBLOCK_MAP.containsKey(metaTE.getClass().getCanonicalName())){ - IMultiblockInfoContainer iMultiblockInfoContainer = MULTIBLOCK_MAP.get(metaTE.getClass().getCanonicalName()); + } else if(IMultiblockInfoContainer.contains(metaTE.getClass())){ + IMultiblockInfoContainer iMultiblockInfoContainer =IMultiblockInfoContainer.get(metaTE.getClass()); if(metaTE instanceof IAlignment){ - iMultiblockInfoContainer.construct(aStack, true, tTileEntity, ( - (IAlignment) metaTE).getExtendedFacing()); + iMultiblockInfoContainer.construct(aStack, true, metaTE, + ((IAlignment) metaTE).getExtendedFacing()); }else { - iMultiblockInfoContainer.construct(aStack, true, tTileEntity, + iMultiblockInfoContainer.construct(aStack, true, metaTE, ExtendedFacing.of(ForgeDirection.getOrientation(((IGregTechTileEntity) tTileEntity).getFrontFacing()))); } - TecTech.proxy.printInchat(MULTIBLOCK_MAP.get(metaTE.getClass().getCanonicalName()).getDescription(aStack)); + TecTech.proxy.printInchat(IMultiblockInfoContainer.get(metaTE.getClass()).getDescription(aStack)); return false; } } else if(tTileEntity instanceof IConstructable){ ((IConstructable) tTileEntity).construct(aStack,true); TecTech.proxy.printInchat(((IConstructable) tTileEntity).getStructureDescription(aStack)); return false; - } else if(MULTIBLOCK_MAP.containsKey(tTileEntity.getClass().getCanonicalName())){ - IMultiblockInfoContainer iMultiblockInfoContainer = MULTIBLOCK_MAP.get(tTileEntity.getClass().getCanonicalName()); + } else if(IMultiblockInfoContainer.contains(tTileEntity.getClass())){ + IMultiblockInfoContainer iMultiblockInfoContainer = IMultiblockInfoContainer.get(tTileEntity.getClass()); if(tTileEntity instanceof IAlignment){ iMultiblockInfoContainer.construct(aStack, true, tTileEntity, ((IAlignment) tTileEntity).getExtendedFacing()); @@ -108,7 +107,7 @@ public final class ConstructableTriggerItem extends Item { iMultiblockInfoContainer.construct(aStack, true, tTileEntity, ExtendedFacing.of(ForgeDirection.getOrientation(aSide))); } - TecTech.proxy.printInchat(MULTIBLOCK_MAP.get(tTileEntity.getClass().getCanonicalName()).getDescription(aStack)); + TecTech.proxy.printInchat(IMultiblockInfoContainer.get(tTileEntity.getClass()).getDescription(aStack)); return false; } //} else { -- cgit From d0cafa5c88cbbff75321e2d781bca79a9057e473 Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 26 Apr 2020 09:03:21 +0200 Subject: add on element fail --- .../mechanics/structure/StructureUtility.java | 25 +++++++++++++++++++++- .../multi/GT_MetaTileEntity_EM_transformer.java | 2 +- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java index e0e94a00eb..f619c7482b 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java @@ -316,7 +316,7 @@ public class StructureUtility { }; } - public static IStructureElement onCheckPass(Consumer onCheckPass, IStructureElement element){ + public static IStructureElement onElementPass(Consumer onCheckPass, IStructureElement element){ return new IStructureElement() { @Override public boolean check(T t, World world, int x, int y, int z) { @@ -339,6 +339,29 @@ public class StructureUtility { }; } + public static IStructureElement onElementFail(Consumer onFail, IStructureElement element){ + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + boolean check = element.check(t, world, x, y, z); + if(!check){ + onFail.accept(t); + } + return check; + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z) { + return element.placeBlock(t, world, x, y, z); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z) { + return element.spawnHint(t, world, x, y, z); + } + }; + } + @SuppressWarnings("unchecked") public static IStructureNavigate step(Vec3Impl step){ if(step==null || step.get0()<0 || step.get1()<0 || step.get2()<0){ diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java index b65fcda229..2d7fc5b524 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java @@ -47,7 +47,7 @@ public class GT_MetaTileEntity_EM_transformer extends GT_MetaTileEntity_Multiblo .addElement('0', ofBlock(sBlockCasings1,15)) .addElement('1', ofElementChain( ofHatchAdder(GT_MetaTileEntity_EM_transformer::addEnergyIOToMachineList,textureOffset,sHintCasingsTT,0), - onCheckPass(t->t.casingCount++,ofBlock(sBlockCasingsTT,0)) + onElementPass(t->t.casingCount++,ofBlock(sBlockCasingsTT,0)) )) .build(); private int casingCount=0; -- cgit From ffcba9cfeada309748e3f2ad206b141fc102cb3e Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 26 Apr 2020 09:10:57 +0200 Subject: Optimize navigation --- .../mechanics/structure/IStructureDefinition.java | 44 ++++++++++++++++------ .../mechanics/structure/IStructureElement.java | 24 ------------ .../mechanics/structure/IStructureNavigate.java | 26 ++++++++++++- .../mechanics/structure/StructureUtility.java | 4 +- 4 files changed, 59 insertions(+), 39 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java index 1152713d5e..97e4fe2bad 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java @@ -73,9 +73,14 @@ public interface IStructureDefinition { return false; } - abc[0] =(element.resetA()?basePositionA:abc[0])+element.getStepA(); - abc[1] =(element.resetB()?basePositionA:abc[1])+element.getStepB(); - abc[2] =(element.resetC()?basePositionA:abc[2])+element.getStepC(); + if(element instanceof IStructureNavigate) { + IStructureNavigate navigate=(IStructureNavigate)element; + abc[0] = (navigate.resetA() ? basePositionA : abc[0]) + navigate.getStepA(); + abc[1] = (navigate.resetB() ? basePositionA : abc[1]) + navigate.getStepB(); + abc[2] = (navigate.resetC() ? basePositionA : abc[2]) + navigate.getStepC(); + }else { + abc[0]+=1; + } } } else { for (IStructureElement element : elements) { @@ -90,9 +95,14 @@ public interface IStructureDefinition { } } - abc[0] =(element.resetA()?basePositionA:abc[0])+element.getStepA(); - abc[1] =(element.resetB()?basePositionA:abc[1])+element.getStepB(); - abc[2] =(element.resetC()?basePositionA:abc[2])+element.getStepC(); + if(element instanceof IStructureNavigate) { + IStructureNavigate navigate=(IStructureNavigate)element; + abc[0] = (navigate.resetA() ? basePositionA : abc[0]) + navigate.getStepA(); + abc[1] = (navigate.resetB() ? basePositionA : abc[1]) + navigate.getStepB(); + abc[2] = (navigate.resetC() ? basePositionA : abc[2]) + navigate.getStepC(); + }else { + abc[0]+=1; + } } } }else { @@ -107,9 +117,14 @@ public interface IStructureDefinition { element.spawnHint(object, world, xyz[0], xyz[1], xyz[2]); } - abc[0] =(element.resetA()?basePositionA:abc[0])+element.getStepA(); - abc[1] =(element.resetB()?basePositionA:abc[1])+element.getStepB(); - abc[2] =(element.resetC()?basePositionA:abc[2])+element.getStepC(); + if(element instanceof IStructureNavigate) { + IStructureNavigate navigate=(IStructureNavigate)element; + abc[0] = (navigate.resetA() ? basePositionA : abc[0]) + navigate.getStepA(); + abc[1] = (navigate.resetB() ? basePositionA : abc[1]) + navigate.getStepB(); + abc[2] = (navigate.resetC() ? basePositionA : abc[2]) + navigate.getStepC(); + }else { + abc[0]+=1; + } } } else { for (IStructureElement element : elements) { @@ -122,9 +137,14 @@ public interface IStructureDefinition { element.placeBlock(object, world, xyz[0], xyz[1], xyz[2]); } - abc[0] =(element.resetA()?basePositionA:abc[0])+element.getStepA(); - abc[1] =(element.resetB()?basePositionA:abc[1])+element.getStepB(); - abc[2] =(element.resetC()?basePositionA:abc[2])+element.getStepC(); + if(element instanceof IStructureNavigate) { + IStructureNavigate navigate=(IStructureNavigate)element; + abc[0] = (navigate.resetA() ? basePositionA : abc[0]) + navigate.getStepA(); + abc[1] = (navigate.resetB() ? basePositionA : abc[1]) + navigate.getStepB(); + abc[2] = (navigate.resetC() ? basePositionA : abc[2]) + navigate.getStepC(); + }else { + abc[0]+=1; + } } } } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java index 78997648ab..2ac5c19538 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java @@ -15,28 +15,4 @@ public interface IStructureElement { default boolean placeBlock(T t,World world,int x,int y,int z){ return false; } - - default int getStepA(){ - return 1; - } - - default int getStepB(){ - return 0; - } - - default int getStepC(){ - return 0; - } - - default boolean resetA(){ - return false; - } - - default boolean resetB(){ - return false; - } - - default boolean resetC(){ - return false; - } } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureNavigate.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureNavigate.java index bba3dc5239..6382f130ee 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureNavigate.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureNavigate.java @@ -5,7 +5,7 @@ import net.minecraft.world.World; /** * Use StructureUtility to instantiate */ -public interface IStructureNavigate extends IStructureElement { +interface IStructureNavigate extends IStructureElement { @Override default boolean check(T t, World world, int x, int y, int z){ return true; @@ -20,4 +20,28 @@ public interface IStructureNavigate extends IStructureElement { default boolean placeBlock(T t, World world, int x, int y, int z) { return true; } + + default int getStepA(){ + return 1; + } + + default int getStepB(){ + return 0; + } + + default int getStepC(){ + return 0; + } + + default boolean resetA(){ + return false; + } + + default boolean resetB(){ + return false; + } + + default boolean resetC(){ + return false; + } } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java index f619c7482b..703c68221c 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java @@ -363,7 +363,7 @@ public class StructureUtility { } @SuppressWarnings("unchecked") - public static IStructureNavigate step(Vec3Impl step){ + static IStructureNavigate step(Vec3Impl step){ if(step==null || step.get0()<0 || step.get1()<0 || step.get2()<0){ throw new IllegalArgumentException(); } @@ -378,7 +378,7 @@ public class StructureUtility { }); } - public static IStructureNavigate step(int a,int b, int c){ + static IStructureNavigate step(int a,int b, int c){ return step(new Vec3Impl(a,b,c)); } -- cgit From 99dcb842b73b8046b92df2bceb517af406a135cc Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 26 Apr 2020 09:13:09 +0200 Subject: move adders to new package --- .../multi/GT_MetaTileEntity_EM_essentiaDequantizer.java | 2 +- .../multi/GT_MetaTileEntity_EM_essentiaQuantizer.java | 2 +- .../technus/tectech/mechanics/structure/IBlockAdder.java | 14 -------------- .../technus/tectech/mechanics/structure/IHatchAdder.java | 14 -------------- .../technus/tectech/mechanics/structure/ITileAdder.java | 12 ------------ .../technus/tectech/mechanics/structure/Structure.java | 1 + .../tectech/mechanics/structure/StructureUtility.java | 7 +++++-- .../tectech/mechanics/structure/adders/IBlockAdder.java | 14 ++++++++++++++ .../tectech/mechanics/structure/adders/IHatchAdder.java | 14 ++++++++++++++ .../tectech/mechanics/structure/adders/ITileAdder.java | 12 ++++++++++++ .../multi/GT_MetaTileEntity_EM_annihilation.java | 2 +- .../metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java | 2 +- .../multi/GT_MetaTileEntity_EM_collider.java | 2 +- .../multi/GT_MetaTileEntity_EM_computer.java | 2 +- .../multi/GT_MetaTileEntity_EM_crafting.java | 2 +- .../multi/GT_MetaTileEntity_EM_dataBank.java | 2 +- .../metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java | 2 +- .../multi/GT_MetaTileEntity_EM_dequantizer.java | 2 +- .../metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java | 2 +- .../multi/GT_MetaTileEntity_EM_junction.java | 2 +- .../multi/GT_MetaTileEntity_EM_quantizer.java | 2 +- .../multi/GT_MetaTileEntity_EM_research.java | 2 +- .../metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java | 2 +- .../multi/GT_MetaTileEntity_EM_stabilizer.java | 2 +- .../metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java | 2 +- .../multi/GT_MetaTileEntity_EM_wormhole.java | 2 +- .../multi/GT_MetaTileEntity_TM_microwave.java | 2 +- .../multi/GT_MetaTileEntity_TM_proccessingStack.java | 2 +- .../multi/GT_MetaTileEntity_TM_teslaCoil.java | 2 +- .../multi/base/GT_MetaTileEntity_MultiblockBase_EM.java | 2 +- .../multi/em_machine/GT_MetaTileEntity_EM_machine.java | 2 +- 31 files changed, 69 insertions(+), 65 deletions(-) delete mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/IBlockAdder.java delete mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/IHatchAdder.java delete mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/ITileAdder.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/adders/IBlockAdder.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/adders/IHatchAdder.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/adders/ITileAdder.java diff --git a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaDequantizer.java b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaDequantizer.java index 0ce33b31b3..87e2660e01 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaDequantizer.java +++ b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaDequantizer.java @@ -5,7 +5,7 @@ import com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.defin import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.thing.casing.TT_Container_Casings; diff --git a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaQuantizer.java b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaQuantizer.java index 98daad91c3..a716420e81 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaQuantizer.java +++ b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_essentiaQuantizer.java @@ -5,7 +5,7 @@ import com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.defin import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.thing.casing.TT_Container_Casings; diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IBlockAdder.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IBlockAdder.java deleted file mode 100644 index 21841fc380..0000000000 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IBlockAdder.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.github.technus.tectech.mechanics.structure; - - -import net.minecraft.block.Block; - -public interface IBlockAdder { - /** - * Callback on block added, needs to check if block is valid (and add it) - * @param block block attempted to add - * @param meta meta of block attempted to add - * @return is structure still valid - */ - boolean apply(T t,Block block, Integer meta); -} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IHatchAdder.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IHatchAdder.java deleted file mode 100644 index 0666e3f214..0000000000 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IHatchAdder.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.github.technus.tectech.mechanics.structure; - - -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; - -public interface IHatchAdder { - /** - * Callback to add hatch, needs to check if hatch is valid (and add it) - * @param iGregTechTileEntity hatch - * @param aShort requested texture index, or null if not... - * @return managed to add hatch (structure still valid) - */ - boolean apply(T t,IGregTechTileEntity iGregTechTileEntity, Short aShort); -} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/ITileAdder.java b/src/main/java/com/github/technus/tectech/mechanics/structure/ITileAdder.java deleted file mode 100644 index 2af878c79e..0000000000 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/ITileAdder.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.github.technus.tectech.mechanics.structure; - -import net.minecraft.tileentity.TileEntity; - -public interface ITileAdder { - /** - * Callback to add hatch, needs to check if tile is valid (and add it) - * @param tileEntity tile - * @return managed to add hatch (structure still valid) - */ - boolean apply(T t,TileEntity tileEntity); -} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java b/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java index 21bf0281bc..4bab18bd28 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java @@ -2,6 +2,7 @@ package com.github.technus.tectech.mechanics.structure; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; +import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; import com.github.technus.tectech.thing.casing.TT_Container_Casings; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java index 703c68221c..a953cf277f 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java @@ -2,6 +2,9 @@ package com.github.technus.tectech.mechanics.structure; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; +import com.github.technus.tectech.mechanics.structure.adders.IBlockAdder; +import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.adders.ITileAdder; import com.github.technus.tectech.util.Vec3Impl; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; @@ -148,7 +151,7 @@ public class StructureUtility { return ofHint(block, meta,block,meta); } - public static IStructureElement ofHintAdder(IBlockAdder iBlockAdder,Block hintBlock,int hintMeta){ + public static IStructureElement ofHintAdder(IBlockAdder iBlockAdder, Block hintBlock, int hintMeta){ if(iBlockAdder==null ||hintBlock==null){ throw new IllegalArgumentException(); } @@ -278,7 +281,7 @@ public class StructureUtility { } - public static IStructureElement ofTileAdder(ITileAdder iTileAdder,Block hintBlock,int hintMeta){ + public static IStructureElement ofTileAdder(ITileAdder iTileAdder, Block hintBlock, int hintMeta){ if(iTileAdder==null ||hintBlock==null){ throw new IllegalArgumentException(); } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IBlockAdder.java b/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IBlockAdder.java new file mode 100644 index 0000000000..908c4c4aca --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IBlockAdder.java @@ -0,0 +1,14 @@ +package com.github.technus.tectech.mechanics.structure.adders; + + +import net.minecraft.block.Block; + +public interface IBlockAdder { + /** + * Callback on block added, needs to check if block is valid (and add it) + * @param block block attempted to add + * @param meta meta of block attempted to add + * @return is structure still valid + */ + boolean apply(T t,Block block, Integer meta); +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IHatchAdder.java b/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IHatchAdder.java new file mode 100644 index 0000000000..a47befc2e8 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IHatchAdder.java @@ -0,0 +1,14 @@ +package com.github.technus.tectech.mechanics.structure.adders; + + +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; + +public interface IHatchAdder { + /** + * Callback to add hatch, needs to check if hatch is valid (and add it) + * @param iGregTechTileEntity hatch + * @param aShort requested texture index, or null if not... + * @return managed to add hatch (structure still valid) + */ + boolean apply(T t,IGregTechTileEntity iGregTechTileEntity, Short aShort); +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/adders/ITileAdder.java b/src/main/java/com/github/technus/tectech/mechanics/structure/adders/ITileAdder.java new file mode 100644 index 0000000000..cc3c7dbb7a --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/adders/ITileAdder.java @@ -0,0 +1,12 @@ +package com.github.technus.tectech.mechanics.structure.adders; + +import net.minecraft.tileentity.TileEntity; + +public interface ITileAdder { + /** + * Callback to add hatch, needs to check if tile is valid (and add it) + * @param tileEntity tile + * @return managed to add hatch (structure still valid) + */ + boolean apply(T t,TileEntity tileEntity); +} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_annihilation.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_annihilation.java index 4eb2028dd8..584e28a607 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_annihilation.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_annihilation.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; import com.github.technus.tectech.mechanics.constructable.IConstructable; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java index 0dc949bc2f..63b45500ed 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java @@ -1,6 +1,6 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.thing.block.QuantumGlassBlock; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java index 8df3122381..dea65d322f 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java @@ -11,7 +11,7 @@ import com.github.technus.tectech.mechanics.elementalMatter.core.templates.cElem import com.github.technus.tectech.mechanics.elementalMatter.definitions.complex.dAtomDefinition; import com.github.technus.tectech.mechanics.elementalMatter.definitions.complex.dHadronDefinition; import com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.eQuarkDefinition; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.thing.casing.TT_Container_Casings; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java index c6a6e584df..c845fe361e 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java @@ -3,7 +3,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.mechanics.dataTransport.QuantumDataPacket; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputData; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_OutputData; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_crafting.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_crafting.java index 7e338da853..7d8204c07f 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_crafting.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_crafting.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; import com.github.technus.tectech.mechanics.constructable.IConstructable; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java index 319141e55c..77647a0e20 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java @@ -3,7 +3,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; import com.github.technus.tectech.Reference; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.mechanics.dataTransport.InventoryDataPacket; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputDataItems; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_OutputDataItems; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java index 0d243db7e8..d8ddc2c5b5 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java @@ -3,7 +3,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputElemental; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java index 1b17eaa4a6..1ba1389c80 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java @@ -6,7 +6,7 @@ import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElement import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.iHasElementalDefinition; import com.github.technus.tectech.mechanics.elementalMatter.core.transformations.aOredictDequantizationInfo; import com.github.technus.tectech.mechanics.elementalMatter.core.transformations.iExchangeInfo; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputElemental; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java index 224e7afc86..152d110c8d 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java @@ -4,7 +4,7 @@ import cofh.api.energy.IEnergyContainerItem; import com.github.technus.tectech.Reference; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.mechanics.constructable.IConstructable; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_Container_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_GUIContainer_MultiMachineEM; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_junction.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_junction.java index c4c0189431..b63079d2dc 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_junction.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_junction.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; import com.github.technus.tectech.mechanics.constructable.IConstructable; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputElemental; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_OutputElemental; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java index 1d2ef85ace..a04a960bf1 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java @@ -10,7 +10,7 @@ import com.github.technus.tectech.mechanics.elementalMatter.core.transformations import com.github.technus.tectech.mechanics.elementalMatter.core.transformations.aItemQuantizationInfo; import com.github.technus.tectech.mechanics.elementalMatter.core.transformations.aOredictQuantizationInfo; import com.github.technus.tectech.mechanics.elementalMatter.core.transformations.bTransformationInfo; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java index 9ef566a9d3..213c919ec8 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; import com.github.technus.tectech.mechanics.constructable.IConstructable; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.recipe.TT_recipe; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java index 25da9bfe5a..b418ec0fa4 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java @@ -6,7 +6,7 @@ import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInsta import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalDefinitionStack; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; import com.github.technus.tectech.mechanics.elementalMatter.core.tElementalException; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.recipe.TT_recipe; import com.github.technus.tectech.thing.CustomItemList; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_stabilizer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_stabilizer.java index e579e68d51..dcd85af99d 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_stabilizer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_stabilizer.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; import com.github.technus.tectech.mechanics.constructable.IConstructable; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java index ced1bceed1..5ade4ec965 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java @@ -3,7 +3,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; import com.github.technus.tectech.Reference; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.mechanics.dataTransport.QuantumDataPacket; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputData; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_OutputData; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_wormhole.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_wormhole.java index 65f09c03dc..fa51447e9f 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_wormhole.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_wormhole.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; import com.github.technus.tectech.mechanics.constructable.IConstructable; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java index 4ab79a6732..543c09b72a 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java @@ -2,7 +2,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; import com.github.technus.tectech.Reference; import com.github.technus.tectech.mechanics.constructable.IConstructable; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.thing.metaTileEntity.multi.base.*; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java index 4ca2ada866..189eae8205 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_proccessingStack.java @@ -1,7 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; import com.github.technus.tectech.mechanics.constructable.IConstructable; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_Container_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_GUIContainer_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java index 16743bd2de..15263e2042 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java @@ -5,7 +5,7 @@ import com.github.technus.tectech.loader.NetworkDispatcher; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.mechanics.data.RendererMessage; import com.github.technus.tectech.mechanics.data.ThaumSpark; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.thing.cover.GT_Cover_TM_TeslaCoil; import com.github.technus.tectech.thing.cover.GT_Cover_TM_TeslaCoil_Ultimate; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java index 83c7066938..dc9c6d39e5 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java @@ -14,7 +14,7 @@ import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInsta import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalDefinitionStack; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; import com.github.technus.tectech.mechanics.elementalMatter.core.tElementalException; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; import com.github.technus.tectech.mechanics.structure.IStructureDefinition; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.thing.metaTileEntity.hatch.*; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java index 1c76f7be6c..6b26132292 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java @@ -3,7 +3,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi.em_machine; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; -import com.github.technus.tectech.mechanics.structure.IHatchAdder; +import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.thing.block.QuantumStuffBlock; -- cgit From 9450b8b91b629095036d783b9b01f5a39508a80a Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 26 Apr 2020 09:16:44 +0200 Subject: Do not all methods on navigation --- .../mechanics/structure/IStructureDefinition.java | 40 ++++++++++------------ 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java index 97e4fe2bad..f70422fe72 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java @@ -65,20 +65,19 @@ public interface IStructureDefinition { xyz[1] += basePositionY; xyz[2] += basePositionZ; - if (world.blockExists(xyz[0], xyz[1], xyz[2])) { - if(!element.check(object, world, xyz[0], xyz[1], xyz[2])){ - return false; - } - }else { - return false; - } - if(element instanceof IStructureNavigate) { IStructureNavigate navigate=(IStructureNavigate)element; abc[0] = (navigate.resetA() ? basePositionA : abc[0]) + navigate.getStepA(); abc[1] = (navigate.resetB() ? basePositionA : abc[1]) + navigate.getStepB(); abc[2] = (navigate.resetC() ? basePositionA : abc[2]) + navigate.getStepC(); }else { + if (world.blockExists(xyz[0], xyz[1], xyz[2])) { + if(!element.check(object, world, xyz[0], xyz[1], xyz[2])){ + return false; + } + }else { + return false; + } abc[0]+=1; } } @@ -89,18 +88,17 @@ public interface IStructureDefinition { xyz[1] += basePositionY; xyz[2] += basePositionZ; - if (world.blockExists(xyz[0], xyz[1], xyz[2])) { - if(!element.check(object, world, xyz[0], xyz[1], xyz[2])){ - return false; - } - } - if(element instanceof IStructureNavigate) { IStructureNavigate navigate=(IStructureNavigate)element; abc[0] = (navigate.resetA() ? basePositionA : abc[0]) + navigate.getStepA(); abc[1] = (navigate.resetB() ? basePositionA : abc[1]) + navigate.getStepB(); abc[2] = (navigate.resetC() ? basePositionA : abc[2]) + navigate.getStepC(); }else { + if (world.blockExists(xyz[0], xyz[1], xyz[2])) { + if(!element.check(object, world, xyz[0], xyz[1], xyz[2])){ + return false; + } + } abc[0]+=1; } } @@ -113,16 +111,15 @@ public interface IStructureDefinition { xyz[1] += basePositionY; xyz[2] += basePositionZ; - if (world.blockExists(xyz[0], xyz[1], xyz[2])) { - element.spawnHint(object, world, xyz[0], xyz[1], xyz[2]); - } - if(element instanceof IStructureNavigate) { IStructureNavigate navigate=(IStructureNavigate)element; abc[0] = (navigate.resetA() ? basePositionA : abc[0]) + navigate.getStepA(); abc[1] = (navigate.resetB() ? basePositionA : abc[1]) + navigate.getStepB(); abc[2] = (navigate.resetC() ? basePositionA : abc[2]) + navigate.getStepC(); }else { + if (world.blockExists(xyz[0], xyz[1], xyz[2])) { + element.spawnHint(object, world, xyz[0], xyz[1], xyz[2]); + } abc[0]+=1; } } @@ -133,16 +130,15 @@ public interface IStructureDefinition { xyz[1] += basePositionY; xyz[2] += basePositionZ; - if (world.blockExists(xyz[0], xyz[1], xyz[2])) { - element.placeBlock(object, world, xyz[0], xyz[1], xyz[2]); - } - if(element instanceof IStructureNavigate) { IStructureNavigate navigate=(IStructureNavigate)element; abc[0] = (navigate.resetA() ? basePositionA : abc[0]) + navigate.getStepA(); abc[1] = (navigate.resetB() ? basePositionA : abc[1]) + navigate.getStepB(); abc[2] = (navigate.resetC() ? basePositionA : abc[2]) + navigate.getStepC(); }else { + if (world.blockExists(xyz[0], xyz[1], xyz[2])) { + element.placeBlock(object, world, xyz[0], xyz[1], xyz[2]); + } abc[0]+=1; } } -- cgit From b8a654436e29505d1ac7bae0742819ff756b5e0f Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 26 Apr 2020 09:25:06 +0200 Subject: Refactor instance of for isNavigating method --- .../mechanics/structure/IStructureDefinition.java | 36 ++++++++++------------ .../mechanics/structure/IStructureElement.java | 28 +++++++++++++++++ .../mechanics/structure/IStructureNavigate.java | 24 ++------------- 3 files changed, 46 insertions(+), 42 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java index f70422fe72..a32c1f8840 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java @@ -65,11 +65,10 @@ public interface IStructureDefinition { xyz[1] += basePositionY; xyz[2] += basePositionZ; - if(element instanceof IStructureNavigate) { - IStructureNavigate navigate=(IStructureNavigate)element; - abc[0] = (navigate.resetA() ? basePositionA : abc[0]) + navigate.getStepA(); - abc[1] = (navigate.resetB() ? basePositionA : abc[1]) + navigate.getStepB(); - abc[2] = (navigate.resetC() ? basePositionA : abc[2]) + navigate.getStepC(); + if(element.isNavigating()) { + abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA(); + abc[1] = (element.resetB() ? basePositionA : abc[1]) + element.getStepB(); + abc[2] = (element.resetC() ? basePositionA : abc[2]) + element.getStepC(); }else { if (world.blockExists(xyz[0], xyz[1], xyz[2])) { if(!element.check(object, world, xyz[0], xyz[1], xyz[2])){ @@ -88,11 +87,10 @@ public interface IStructureDefinition { xyz[1] += basePositionY; xyz[2] += basePositionZ; - if(element instanceof IStructureNavigate) { - IStructureNavigate navigate=(IStructureNavigate)element; - abc[0] = (navigate.resetA() ? basePositionA : abc[0]) + navigate.getStepA(); - abc[1] = (navigate.resetB() ? basePositionA : abc[1]) + navigate.getStepB(); - abc[2] = (navigate.resetC() ? basePositionA : abc[2]) + navigate.getStepC(); + if(element.isNavigating()) { + abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA(); + abc[1] = (element.resetB() ? basePositionA : abc[1]) + element.getStepB(); + abc[2] = (element.resetC() ? basePositionA : abc[2]) + element.getStepC(); }else { if (world.blockExists(xyz[0], xyz[1], xyz[2])) { if(!element.check(object, world, xyz[0], xyz[1], xyz[2])){ @@ -111,11 +109,10 @@ public interface IStructureDefinition { xyz[1] += basePositionY; xyz[2] += basePositionZ; - if(element instanceof IStructureNavigate) { - IStructureNavigate navigate=(IStructureNavigate)element; - abc[0] = (navigate.resetA() ? basePositionA : abc[0]) + navigate.getStepA(); - abc[1] = (navigate.resetB() ? basePositionA : abc[1]) + navigate.getStepB(); - abc[2] = (navigate.resetC() ? basePositionA : abc[2]) + navigate.getStepC(); + if(element.isNavigating()) { + abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA(); + abc[1] = (element.resetB() ? basePositionA : abc[1]) + element.getStepB(); + abc[2] = (element.resetC() ? basePositionA : abc[2]) + element.getStepC(); }else { if (world.blockExists(xyz[0], xyz[1], xyz[2])) { element.spawnHint(object, world, xyz[0], xyz[1], xyz[2]); @@ -130,11 +127,10 @@ public interface IStructureDefinition { xyz[1] += basePositionY; xyz[2] += basePositionZ; - if(element instanceof IStructureNavigate) { - IStructureNavigate navigate=(IStructureNavigate)element; - abc[0] = (navigate.resetA() ? basePositionA : abc[0]) + navigate.getStepA(); - abc[1] = (navigate.resetB() ? basePositionA : abc[1]) + navigate.getStepB(); - abc[2] = (navigate.resetC() ? basePositionA : abc[2]) + navigate.getStepC(); + if(element.isNavigating()) { + abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA(); + abc[1] = (element.resetB() ? basePositionA : abc[1]) + element.getStepB(); + abc[2] = (element.resetC() ? basePositionA : abc[2]) + element.getStepC(); }else { if (world.blockExists(xyz[0], xyz[1], xyz[2])) { element.placeBlock(object, world, xyz[0], xyz[1], xyz[2]); diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java index 2ac5c19538..f9510910ed 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java @@ -15,4 +15,32 @@ public interface IStructureElement { default boolean placeBlock(T t,World world,int x,int y,int z){ return false; } + + default int getStepA(){ + return 1; + } + + default int getStepB(){ + return 0; + } + + default int getStepC(){ + return 0; + } + + default boolean resetA(){ + return false; + } + + default boolean resetB(){ + return false; + } + + default boolean resetC(){ + return false; + } + + default boolean isNavigating(){ + return false; + } } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureNavigate.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureNavigate.java index 6382f130ee..4628c710af 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureNavigate.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureNavigate.java @@ -21,27 +21,7 @@ interface IStructureNavigate extends IStructureElement { return true; } - default int getStepA(){ - return 1; - } - - default int getStepB(){ - return 0; - } - - default int getStepC(){ - return 0; - } - - default boolean resetA(){ - return false; - } - - default boolean resetB(){ - return false; - } - - default boolean resetC(){ - return false; + default boolean isNavigating(){ + return true; } } -- cgit From 6e9b51fe3affc60e3969ba50c2090fb82116467a Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 26 Apr 2020 09:25:43 +0200 Subject: Bump version --- build.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.properties b/build.properties index c75d05a3da..aa0710220a 100644 --- a/build.properties +++ b/build.properties @@ -1,6 +1,6 @@ minecraft.version=1.7.10 forge.version=10.13.4.1614 -tectech.version=3.8.0 +tectech.version=3.8.1 ic2.version=2.2.790-experimental codechickenlib.version=1.1.3.140 -- cgit From c601ecf8cd72b76f88fe0b020305a79405a484a5 Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 26 Apr 2020 10:04:43 +0200 Subject: Further optimize navigation --- .../mechanics/structure/IStructureDefinition.java | 40 +++++++++++----------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java index a32c1f8840..ef6ead0eed 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java @@ -60,16 +60,16 @@ public interface IStructureDefinition { if(checkBlocksIfNotNullForceCheckAllIfTrue!=null){ if(checkBlocksIfNotNullForceCheckAllIfTrue){ for (IStructureElement element : elements) { - extendedFacing.getWorldOffset(abc, xyz); - xyz[0] += basePositionX; - xyz[1] += basePositionY; - xyz[2] += basePositionZ; - if(element.isNavigating()) { abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA(); abc[1] = (element.resetB() ? basePositionA : abc[1]) + element.getStepB(); abc[2] = (element.resetC() ? basePositionA : abc[2]) + element.getStepC(); }else { + extendedFacing.getWorldOffset(abc, xyz); + xyz[0] += basePositionX; + xyz[1] += basePositionY; + xyz[2] += basePositionZ; + if (world.blockExists(xyz[0], xyz[1], xyz[2])) { if(!element.check(object, world, xyz[0], xyz[1], xyz[2])){ return false; @@ -82,16 +82,16 @@ public interface IStructureDefinition { } } else { for (IStructureElement element : elements) { - extendedFacing.getWorldOffset(abc, xyz); - xyz[0] += basePositionX; - xyz[1] += basePositionY; - xyz[2] += basePositionZ; - if(element.isNavigating()) { abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA(); abc[1] = (element.resetB() ? basePositionA : abc[1]) + element.getStepB(); abc[2] = (element.resetC() ? basePositionA : abc[2]) + element.getStepC(); }else { + extendedFacing.getWorldOffset(abc, xyz); + xyz[0] += basePositionX; + xyz[1] += basePositionY; + xyz[2] += basePositionZ; + if (world.blockExists(xyz[0], xyz[1], xyz[2])) { if(!element.check(object, world, xyz[0], xyz[1], xyz[2])){ return false; @@ -104,16 +104,16 @@ public interface IStructureDefinition { }else { if(hintsOnly) { for (IStructureElement element : elements) { - extendedFacing.getWorldOffset(abc, xyz); - xyz[0] += basePositionX; - xyz[1] += basePositionY; - xyz[2] += basePositionZ; - if(element.isNavigating()) { abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA(); abc[1] = (element.resetB() ? basePositionA : abc[1]) + element.getStepB(); abc[2] = (element.resetC() ? basePositionA : abc[2]) + element.getStepC(); }else { + extendedFacing.getWorldOffset(abc, xyz); + xyz[0] += basePositionX; + xyz[1] += basePositionY; + xyz[2] += basePositionZ; + if (world.blockExists(xyz[0], xyz[1], xyz[2])) { element.spawnHint(object, world, xyz[0], xyz[1], xyz[2]); } @@ -122,16 +122,16 @@ public interface IStructureDefinition { } } else { for (IStructureElement element : elements) { - extendedFacing.getWorldOffset(abc, xyz); - xyz[0] += basePositionX; - xyz[1] += basePositionY; - xyz[2] += basePositionZ; - if(element.isNavigating()) { abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA(); abc[1] = (element.resetB() ? basePositionA : abc[1]) + element.getStepB(); abc[2] = (element.resetC() ? basePositionA : abc[2]) + element.getStepC(); }else { + extendedFacing.getWorldOffset(abc, xyz); + xyz[0] += basePositionX; + xyz[1] += basePositionY; + xyz[2] += basePositionZ; + if (world.blockExists(xyz[0], xyz[1], xyz[2])) { element.placeBlock(object, world, xyz[0], xyz[1], xyz[2]); } -- cgit From f1d6a097d4bbe66de07e78a9997eb7f2d6ac2cb6 Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 26 Apr 2020 10:54:31 +0200 Subject: Remove more old api, add compat, fix typos,add hint only --- .../tectech/loader/ConstructableLoader.java | 32 +++++--- .../mechanics/structure/IStructureDefinition.java | 16 ++-- .../tectech/mechanics/structure/Structure.java | 25 +----- .../mechanics/structure/StructureDefinition.java | 91 +++++++++++++++++++++- .../mechanics/structure/StructureUtility.java | 16 ++++ 5 files changed, 136 insertions(+), 44 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/loader/ConstructableLoader.java b/src/main/java/com/github/technus/tectech/loader/ConstructableLoader.java index 2cd4f04fc8..537bbf8cca 100644 --- a/src/main/java/com/github/technus/tectech/loader/ConstructableLoader.java +++ b/src/main/java/com/github/technus/tectech/loader/ConstructableLoader.java @@ -2,13 +2,16 @@ package com.github.technus.tectech.loader; import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; import com.github.technus.tectech.mechanics.constructable.IMultiblockInfoContainer; -import com.github.technus.tectech.mechanics.structure.Structure; +import com.github.technus.tectech.mechanics.structure.IStructureDefinition; +import com.github.technus.tectech.mechanics.structure.StructureDefinition; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_ElectricBlastFurnace; -import net.minecraft.block.Block; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import static com.github.technus.tectech.mechanics.constructable.IMultiblockInfoContainer.registerMetaClass; +import static com.github.technus.tectech.mechanics.structure.StructureUtility.ofBlock; +import static com.github.technus.tectech.mechanics.structure.StructureUtility.ofHintOnly; import static gregtech.api.GregTech_API.sBlockCasings1; public class ConstructableLoader implements Runnable { @@ -17,13 +20,18 @@ public class ConstructableLoader implements Runnable { public void run() { registerMetaClass(GT_MetaTileEntity_ElectricBlastFurnace.class, new IMultiblockInfoContainer() { //region Structure - private final String[][] shape = new String[][]{ - {"000","\"\"\"","\"\"\""," . ",}, - {"0!0","\"A\"","\"A\""," ",}, - {"000","\"\"\"","\"\"\""," ",}, - }; - private final Block[] blockType = new Block[]{sBlockCasings1}; - private final byte[] blockMeta = new byte[]{11}; + private final IStructureDefinition definition= + StructureDefinition.builder() + .addShapeOldApi("main",new String[][]{ + {"000","\"\"\"","\"\"\""," . ",}, + {"0!0","\"A\"","\"A\""," ",}, + {"000","\"\"\"","\"\"\""," ",}, + }) + .addElement('0', ofBlock(sBlockCasings1,11)) + .addElement('\"', ofHintOnly(3)) + .addElement('!', ofHintOnly(2)) + .addElement(' ', ofHintOnly(1)) + .build(); private final String[] desc=new String[]{ EnumChatFormatting.AQUA+"Hint Details:", "1 - Classic Hatches or Heat Proof Casing", @@ -34,8 +42,10 @@ public class ConstructableLoader implements Runnable { @Override public void construct(ItemStack stackSize, boolean hintsOnly, GT_MetaTileEntity_ElectricBlastFurnace tileEntity, ExtendedFacing aSide) { - Structure.builder(shape, blockType, blockMeta, 1, 3, 0, - tileEntity.getBaseMetaTileEntity(), aSide, hintsOnly); + IGregTechTileEntity base = tileEntity.getBaseMetaTileEntity(); + definition.buildOrHints(tileEntity,"main", base.getWorld(),aSide, + base.getXCoord(),base.getYCoord(),base.getZCoord(), + 1, 3, 0,hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java index ef6ead0eed..9319b4954b 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java @@ -62,8 +62,8 @@ public interface IStructureDefinition { for (IStructureElement element : elements) { if(element.isNavigating()) { abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA(); - abc[1] = (element.resetB() ? basePositionA : abc[1]) + element.getStepB(); - abc[2] = (element.resetC() ? basePositionA : abc[2]) + element.getStepC(); + abc[1] = (element.resetB() ? basePositionB : abc[1]) + element.getStepB(); + abc[2] = (element.resetC() ? basePositionC : abc[2]) + element.getStepC(); }else { extendedFacing.getWorldOffset(abc, xyz); xyz[0] += basePositionX; @@ -84,8 +84,8 @@ public interface IStructureDefinition { for (IStructureElement element : elements) { if(element.isNavigating()) { abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA(); - abc[1] = (element.resetB() ? basePositionA : abc[1]) + element.getStepB(); - abc[2] = (element.resetC() ? basePositionA : abc[2]) + element.getStepC(); + abc[1] = (element.resetB() ? basePositionB : abc[1]) + element.getStepB(); + abc[2] = (element.resetC() ? basePositionC : abc[2]) + element.getStepC(); }else { extendedFacing.getWorldOffset(abc, xyz); xyz[0] += basePositionX; @@ -106,8 +106,8 @@ public interface IStructureDefinition { for (IStructureElement element : elements) { if(element.isNavigating()) { abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA(); - abc[1] = (element.resetB() ? basePositionA : abc[1]) + element.getStepB(); - abc[2] = (element.resetC() ? basePositionA : abc[2]) + element.getStepC(); + abc[1] = (element.resetB() ? basePositionB : abc[1]) + element.getStepB(); + abc[2] = (element.resetC() ? basePositionC : abc[2]) + element.getStepC(); }else { extendedFacing.getWorldOffset(abc, xyz); xyz[0] += basePositionX; @@ -124,8 +124,8 @@ public interface IStructureDefinition { for (IStructureElement element : elements) { if(element.isNavigating()) { abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA(); - abc[1] = (element.resetB() ? basePositionA : abc[1]) + element.getStepB(); - abc[2] = (element.resetC() ? basePositionA : abc[2]) + element.getStepC(); + abc[1] = (element.resetB() ? basePositionB : abc[1]) + element.getStepB(); + abc[2] = (element.resetC() ? basePositionC : abc[2]) + element.getStepC(); }else { extendedFacing.getWorldOffset(abc, xyz); xyz[0] += basePositionX; diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java b/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java index 4bab18bd28..e7769b3e04 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java @@ -9,7 +9,6 @@ import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.init.Blocks; -import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -154,26 +153,10 @@ public class Structure { byte[] blockMeta,//use numbers 0-9 for casing types int horizontalOffset, int verticalOffset, int depthOffset, IGregTechTileEntity tileEntity, ExtendedFacing extendedFacing, boolean hintsOnly) { - return builder(structure, blockType, blockMeta, horizontalOffset, verticalOffset, depthOffset, - tileEntity.getWorld(), tileEntity.getXCoord(), tileEntity.getYCoord(), tileEntity.getZCoord(), - extendedFacing, hintsOnly); - } - - public static boolean builder(String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR+1 blocks - Block[] blockType,//use numbers 0-9 for casing types - byte[] blockMeta,//use numbers 0-9 for casing types - int horizontalOffset, int verticalOffset, int depthOffset, - TileEntity tileEntity, ExtendedFacing extendedFacing, boolean hintsOnly) { - return builder(structure, blockType, blockMeta, horizontalOffset, verticalOffset, depthOffset, - tileEntity.getWorldObj(), tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord, - extendedFacing, hintsOnly); - } - - public static boolean builder(String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR+1 blocks - Block[] blockType,//use numbers 0-9 for casing types - byte[] blockMeta,//use numbers 0-9 for casing types - int horizontalOffset, int verticalOffset, int depthOffset, - World world, int baseX, int baseY, int baseZ, ExtendedFacing extendedFacing, boolean hintsOnly) { + World world=tileEntity.getWorld(); + int baseX=tileEntity.getXCoord(); + int baseY=tileEntity.getYCoord(); + int baseZ=tileEntity.getZCoord(); if (world == null || (!world.isRemote && hintsOnly)) { return false; } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java index c8262e8473..5c54d05e60 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java @@ -1,5 +1,7 @@ package com.github.technus.tectech.mechanics.structure; +import com.github.technus.tectech.util.Vec3Impl; + import java.util.*; import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; @@ -28,10 +30,12 @@ public class StructureDefinition implements IStructureDefinition { private static final char B='\uB000'; private static final char C='\uC000'; private static final char D='\uD000'; + private final Map navigates; private final Map> elements; private final Map shapes; private Builder() { + navigates=new HashMap<>(); elements = new HashMap<>(); shapes = new HashMap<>(); } @@ -44,6 +48,79 @@ public class StructureDefinition implements IStructureDefinition { return shapes; } + @Deprecated + public Builder addShapeOldApi(String name, String[][] structurePiece) { + StringBuilder builder = new StringBuilder(); + if (structurePiece.length > 0) { + for (String[] strings : structurePiece) { + if (strings.length > 0) { + for (String string : strings) { + for (int i = 0; i < string.length(); i++) { + char ch = string.charAt(i); + if(ch<' '){ + for (int c = 0; c < ch; c++) { + builder.append(B); + } + }else if(ch>'@'){ + for (int c = '@'; c < ch; c++) { + builder.append(A); + } + }else{ + builder.append(ch); + } + } + builder.append(B); + } + builder.setLength(builder.length() - 1); + } + builder.append(C); + } + builder.setLength(builder.length() - 1); + } + int a=0,b=0,c=0; + char d=D; + for (int i = 0; i < builder.length(); i++) { + char ch = builder.charAt(i); + if(ch =='.'){ + builder.setCharAt(i,A); + ch=A; + } + if(ch==A){ + a++; + }else if(ch==B){ + a=0; + b++; + }else if(ch==C){ + a=0; + b=0; + c++; + }else if(a!=0 || b!=0 || c!=0){ + Vec3Impl vec3 = new Vec3Impl(a, b, c); + Character navigate = navigates.get(vec3); + if(navigate==null){ + navigate=d++; + navigates.put(vec3,navigate); + addElement(navigate,step(vec3)); + } + builder.setCharAt(i-1,navigate); + a=0; + b=0; + c=0; + } + } + + String built = builder.toString().replaceAll("[\\uA000\\uB000\\uC000]",""); + + if(built.contains("+")){ + addElement('+',notAir()); + } + if (built.contains("-")) { + addElement('-', isAir()); + } + shapes.put(name, built); + return this; + } + /** * Adds shape * +- is air/no air checks @@ -92,8 +169,14 @@ public class StructureDefinition implements IStructureDefinition { b=0; c++; }else if(a!=0 || b!=0 || c!=0){ - builder.setCharAt(i-1,d); - addElement(d,step(a,b,c)); + Vec3Impl vec3 = new Vec3Impl(a, b, c); + Character navigate = navigates.get(vec3); + if(navigate==null){ + navigate=d++; + navigates.put(vec3,navigate); + addElement(navigate,step(vec3)); + } + builder.setCharAt(i-1,navigate); a=0; b=0; c=0; @@ -114,7 +197,7 @@ public class StructureDefinition implements IStructureDefinition { } public Builder addElement(Character name, IStructureElement structurePiece) { - elements.put(name, structurePiece); + elements.putIfAbsent(name, structurePiece); return this; } @@ -128,7 +211,7 @@ public class StructureDefinition implements IStructureDefinition { @SuppressWarnings("unchecked") private Map[]> compileMap() { - List mising = new ArrayList<>(); + Set mising = new HashSet<>(); shapes.values().stream().map(CharSequence::chars).forEach(intStream -> intStream.forEach(c -> { IStructureElement iStructureElement = elements.get((char) c); if (iStructureElement == null) { diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java index a953cf277f..40b1793f93 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java @@ -151,6 +151,22 @@ public class StructureUtility { return ofHint(block, meta,block,meta); } + public static IStructureElement ofHintOnly(int dots){ + int meta=dots-1; + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + return false; + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z) { + TecTech.proxy.hint_particle(world,x,y,z,sHintCasingsTT,meta); + return true; + } + }; + } + public static IStructureElement ofHintAdder(IBlockAdder iBlockAdder, Block hintBlock, int hintMeta){ if(iBlockAdder==null ||hintBlock==null){ throw new IllegalArgumentException(); -- cgit From 0f5cbab6552dfbd514f3183afd4b855f3d1ccb9d Mon Sep 17 00:00:00 2001 From: Tec Date: Mon, 27 Apr 2020 18:01:15 +0200 Subject: Addmore util --- .../tectech/loader/ConstructableLoader.java | 8 +- .../mechanics/structure/StructureUtility.java | 98 ++++++++++++++++++---- 2 files changed, 88 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/loader/ConstructableLoader.java b/src/main/java/com/github/technus/tectech/loader/ConstructableLoader.java index 537bbf8cca..4e1a2eff75 100644 --- a/src/main/java/com/github/technus/tectech/loader/ConstructableLoader.java +++ b/src/main/java/com/github/technus/tectech/loader/ConstructableLoader.java @@ -11,7 +11,7 @@ import net.minecraft.util.EnumChatFormatting; import static com.github.technus.tectech.mechanics.constructable.IMultiblockInfoContainer.registerMetaClass; import static com.github.technus.tectech.mechanics.structure.StructureUtility.ofBlock; -import static com.github.technus.tectech.mechanics.structure.StructureUtility.ofHintOnly; +import static com.github.technus.tectech.mechanics.structure.StructureUtility.ofHint; import static gregtech.api.GregTech_API.sBlockCasings1; public class ConstructableLoader implements Runnable { @@ -28,9 +28,9 @@ public class ConstructableLoader implements Runnable { {"000","\"\"\"","\"\"\""," ",}, }) .addElement('0', ofBlock(sBlockCasings1,11)) - .addElement('\"', ofHintOnly(3)) - .addElement('!', ofHintOnly(2)) - .addElement(' ', ofHintOnly(1)) + .addElement('\"', ofHint(3)) + .addElement('!', ofHint(2)) + .addElement(' ', ofHint(1)) .build(); private final String[] desc=new String[]{ EnumChatFormatting.AQUA+"Hint Details:", diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java index 40b1793f93..b1be2071a7 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java @@ -85,7 +85,7 @@ public class StructureUtility { /** * Does not allow Block duplicates (with different meta) */ - public static IStructureElement ofHintFlat(Map blocsMap,Block hintBlock,int hintMeta){ + public static IStructureElement ofBlocksFlatHint(Map blocsMap,Block hintBlock,int hintMeta){ if(blocsMap==null || blocsMap.isEmpty() || hintBlock==null){ throw new IllegalArgumentException(); } @@ -106,7 +106,7 @@ public class StructureUtility { /** * Allows block duplicates (with different meta) */ - public static IStructureElement ofHint(Map> blocsMap,Block hintBlock,int hintMeta){ + public static IStructureElement ofBlocksMapHint(Map> blocsMap,Block hintBlock,int hintMeta){ if(blocsMap==null || blocsMap.isEmpty() || hintBlock==null){ throw new IllegalArgumentException(); } @@ -129,7 +129,7 @@ public class StructureUtility { }; } - public static IStructureElement ofHint(Block block, int meta,Block hintBlock,int hintMeta){ + public static IStructureElement ofBlockHint(Block block, int meta,Block hintBlock,int hintMeta){ if(block==null || hintBlock==null){ throw new IllegalArgumentException(); } @@ -147,11 +147,11 @@ public class StructureUtility { }; } - public static IStructureElement ofHint(Block block, int meta){ - return ofHint(block, meta,block,meta); + public static IStructureElement ofBlockHint(Block block, int meta){ + return ofBlockHint(block, meta,block,meta); } - public static IStructureElement ofHintOnly(int dots){ + public static IStructureElement ofHint(int dots){ int meta=dots-1; return new IStructureElement() { @Override @@ -167,7 +167,7 @@ public class StructureUtility { }; } - public static IStructureElement ofHintAdder(IBlockAdder iBlockAdder, Block hintBlock, int hintMeta){ + public static IStructureElement ofBlockAdderHint(IBlockAdder iBlockAdder, Block hintBlock, int hintMeta){ if(iBlockAdder==null ||hintBlock==null){ throw new IllegalArgumentException(); } @@ -215,7 +215,7 @@ public class StructureUtility { /** * Allows block duplicates (with different meta) */ - public static IStructureElement ofBlocks(Map> blocsMap,Block hintBlock,int hintMeta){ + public static IStructureElement ofBlocskMap(Map> blocsMap,Block hintBlock,int hintMeta){ if(blocsMap==null || blocsMap.isEmpty() || hintBlock==null){ throw new IllegalArgumentException(); } @@ -296,7 +296,6 @@ public class StructureUtility { }; } - public static IStructureElement ofTileAdder(ITileAdder iTileAdder, Block hintBlock, int hintMeta){ if(iTileAdder==null ||hintBlock==null){ throw new IllegalArgumentException(); @@ -316,6 +315,52 @@ public class StructureUtility { }; } + public static IStructureElement ofHatchAdder(IHatchAdder iHatchAdder, Short textureIndex, int dots){ + int meta=dots-1; + if(iHatchAdder==null){ + throw new IllegalArgumentException(); + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + TileEntity tileEntity = world.getTileEntity(x, y, z); + return tileEntity instanceof IGregTechTileEntity && iHatchAdder.apply(t,(IGregTechTileEntity) tileEntity, textureIndex); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z) { + TecTech.proxy.hint_particle(world,x,y,z,sHintCasingsTT,meta); + return true; + } + }; + } + + public static IStructureElement ofHatchAdder(IHatchAdder iHatchAdder, Short textureIndex, int dots, Block placeCasing,int placeCasingMeta){ + int meta=dots-1; + if(iHatchAdder==null){ + throw new IllegalArgumentException(); + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + TileEntity tileEntity = world.getTileEntity(x, y, z); + return tileEntity instanceof IGregTechTileEntity && iHatchAdder.apply(t,(IGregTechTileEntity) tileEntity, textureIndex); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z) { + TecTech.proxy.hint_particle(world,x,y,z,sHintCasingsTT,meta); + return true; + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z) { + world.setBlock(x,y,z,placeCasing,placeCasingMeta,2); + return true; + } + }; + } + public static IStructureElement ofHatchAdder(IHatchAdder iHatchAdder, Short textureIndex, Block hintBlock, int hintMeta){ if(iHatchAdder==null ||hintBlock==null){ throw new IllegalArgumentException(); @@ -335,6 +380,31 @@ public class StructureUtility { }; } + public static IStructureElement ofHatchAdder(IHatchAdder iHatchAdder, Short textureIndex, Block hintBlock, int hintMeta, Block placeCasing,int placeCasingMeta){ + if(iHatchAdder==null ||hintBlock==null){ + throw new IllegalArgumentException(); + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + TileEntity tileEntity = world.getTileEntity(x, y, z); + return tileEntity instanceof IGregTechTileEntity && iHatchAdder.apply(t,(IGregTechTileEntity) tileEntity, textureIndex); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z) { + TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); + return true; + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z) { + world.setBlock(x,y,z,placeCasing,placeCasingMeta,2); + return true; + } + }; + } + public static IStructureElement onElementPass(Consumer onCheckPass, IStructureElement element){ return new IStructureElement() { @Override @@ -381,8 +451,12 @@ public class StructureUtility { }; } + public static IStructureNavigate step(int a,int b, int c){ + return step(new Vec3Impl(a,b,c)); + } + @SuppressWarnings("unchecked") - static IStructureNavigate step(Vec3Impl step){ + public static IStructureNavigate step(Vec3Impl step){ if(step==null || step.get0()<0 || step.get1()<0 || step.get2()<0){ throw new IllegalArgumentException(); } @@ -397,10 +471,6 @@ public class StructureUtility { }); } - static IStructureNavigate step(int a,int b, int c){ - return step(new Vec3Impl(a,b,c)); - } - private static IStructureNavigate stepA(int a,int b, int c){ return new IStructureNavigate() { @Override -- cgit From d58f2055aab235a3f3ead64ef86d1dc39396cae5 Mon Sep 17 00:00:00 2001 From: Tec Date: Tue, 28 Apr 2020 19:21:13 +0200 Subject: Implement new api for collider --- .../tectech/loader/ConstructableLoader.java | 6 +- .../mechanics/structure/IStructureDefinition.java | 23 +- .../mechanics/structure/IStructureElement.java | 5 +- .../mechanics/structure/IStructureFallback.java | 9 +- .../mechanics/structure/IStructureNavigate.java | 5 +- .../mechanics/structure/StructureDefinition.java | 59 ++- .../mechanics/structure/StructureUtility.java | 488 ++++++++++++++++++--- .../multi/GT_MetaTileEntity_EM_collider.java | 123 +++--- .../multi/GT_MetaTileEntity_EM_transformer.java | 2 +- .../base/GT_MetaTileEntity_MultiblockBase_EM.java | 8 +- 10 files changed, 570 insertions(+), 158 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/loader/ConstructableLoader.java b/src/main/java/com/github/technus/tectech/loader/ConstructableLoader.java index 4e1a2eff75..dc282ec0b6 100644 --- a/src/main/java/com/github/technus/tectech/loader/ConstructableLoader.java +++ b/src/main/java/com/github/technus/tectech/loader/ConstructableLoader.java @@ -43,9 +43,9 @@ public class ConstructableLoader implements Runnable { @Override public void construct(ItemStack stackSize, boolean hintsOnly, GT_MetaTileEntity_ElectricBlastFurnace tileEntity, ExtendedFacing aSide) { IGregTechTileEntity base = tileEntity.getBaseMetaTileEntity(); - definition.buildOrHints(tileEntity,"main", base.getWorld(),aSide, - base.getXCoord(),base.getYCoord(),base.getZCoord(), - 1, 3, 0,hintsOnly); + definition.buildOrHints(tileEntity, stackSize, "main", base.getWorld(), + aSide, base.getXCoord(), base.getYCoord(), + base.getZCoord(), 1, 3, 0, hintsOnly); } @Override diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java index 9319b4954b..71305ebd92 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java @@ -1,6 +1,7 @@ package com.github.technus.tectech.mechanics.structure; import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; +import net.minecraft.item.ItemStack; import net.minecraft.world.World; public interface IStructureDefinition { @@ -9,39 +10,39 @@ public interface IStructureDefinition { * @param name same name as for other methods here * @return the array of elements to process */ - IStructureElement[] getElementsFor(String name); + IStructureElement[] getStructureFor(String name); default boolean check(T object,String piece, World world, ExtendedFacing extendedFacing, int basePositionX, int basePositionY, int basePositionZ, int basePositionA, int basePositionB, int basePositionC, boolean forceCheckAllBlocks){ - return iterate(object,getElementsFor(piece), world, extendedFacing, basePositionX, basePositionY, basePositionZ, + return iterate(object, null, getStructureFor(piece), world, extendedFacing, basePositionX, basePositionY, basePositionZ, basePositionA, basePositionB, basePositionC,false,forceCheckAllBlocks); } - default boolean hints(T object,String piece, World world, ExtendedFacing extendedFacing, + default boolean hints(T object, ItemStack trigger,String piece, World world, ExtendedFacing extendedFacing, int basePositionX, int basePositionY, int basePositionZ, int basePositionA, int basePositionB, int basePositionC) { - return iterate(object,getElementsFor(piece), world, extendedFacing, basePositionX, basePositionY, basePositionZ, + return iterate(object, trigger, getStructureFor(piece), world, extendedFacing, basePositionX, basePositionY, basePositionZ, basePositionA, basePositionB, basePositionC,true,null); } - default boolean build(T object,String piece, World world, ExtendedFacing extendedFacing, + default boolean build(T object, ItemStack trigger,String piece, World world, ExtendedFacing extendedFacing, int basePositionX, int basePositionY, int basePositionZ, int basePositionA, int basePositionB, int basePositionC) { - return iterate(object,getElementsFor(piece), world, extendedFacing, basePositionX, basePositionY, basePositionZ, + return iterate(object, trigger, getStructureFor(piece), world, extendedFacing, basePositionX, basePositionY, basePositionZ, basePositionA, basePositionB, basePositionC,false,null); } - default boolean buildOrHints(T object,String piece, World world, ExtendedFacing extendedFacing, + default boolean buildOrHints(T object, ItemStack trigger,String piece, World world, ExtendedFacing extendedFacing, int basePositionX, int basePositionY, int basePositionZ, int basePositionA, int basePositionB, int basePositionC, boolean hintsOnly){ - return iterate(object,getElementsFor(piece), world, extendedFacing, basePositionX, basePositionY, basePositionZ, + return iterate(object, trigger, getStructureFor(piece), world, extendedFacing, basePositionX, basePositionY, basePositionZ, basePositionA, basePositionB, basePositionC,hintsOnly,null); } - static boolean iterate(T object, IStructureElement[] elements, World world, ExtendedFacing extendedFacing, + static boolean iterate(T object, ItemStack trigger, IStructureElement[] elements, World world, ExtendedFacing extendedFacing, int basePositionX, int basePositionY, int basePositionZ, int basePositionA, int basePositionB, int basePositionC, boolean hintsOnly, Boolean checkBlocksIfNotNullForceCheckAllIfTrue){ @@ -115,7 +116,7 @@ public interface IStructureDefinition { xyz[2] += basePositionZ; if (world.blockExists(xyz[0], xyz[1], xyz[2])) { - element.spawnHint(object, world, xyz[0], xyz[1], xyz[2]); + element.spawnHint(object, world, xyz[0], xyz[1], xyz[2], trigger); } abc[0]+=1; } @@ -133,7 +134,7 @@ public interface IStructureDefinition { xyz[2] += basePositionZ; if (world.blockExists(xyz[0], xyz[1], xyz[2])) { - element.placeBlock(object, world, xyz[0], xyz[1], xyz[2]); + element.placeBlock(object, world, xyz[0], xyz[1], xyz[2], trigger); } abc[0]+=1; } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java index f9510910ed..7ed173fbfa 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java @@ -1,5 +1,6 @@ package com.github.technus.tectech.mechanics.structure; +import net.minecraft.item.ItemStack; import net.minecraft.world.World; /** @@ -8,11 +9,11 @@ import net.minecraft.world.World; public interface IStructureElement { boolean check(T t,World world,int x,int y,int z); - default boolean spawnHint(T t,World world,int x,int y,int z){ + default boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger){ return false; } - default boolean placeBlock(T t,World world,int x,int y,int z){ + default boolean placeBlock(T t,World world,int x,int y,int z, ItemStack trigger){ return false; } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureFallback.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureFallback.java index 354aaf60e9..1c55753d19 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureFallback.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureFallback.java @@ -1,5 +1,6 @@ package com.github.technus.tectech.mechanics.structure; +import net.minecraft.item.ItemStack; import net.minecraft.world.World; /** @@ -19,9 +20,9 @@ public interface IStructureFallback extends IStructureElement { } @Override - default boolean spawnHint(T t, World world, int x, int y, int z) { + default boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { for (IStructureElement fallback : fallbacks()) { - if (fallback.spawnHint(t, world, x, y, z)) { + if (fallback.spawnHint(t, world, x, y, z, trigger)) { return true; } } @@ -29,9 +30,9 @@ public interface IStructureFallback extends IStructureElement { } @Override - default boolean placeBlock(T t, World world, int x, int y, int z) { + default boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { for (IStructureElement fallback : fallbacks()) { - if (fallback.placeBlock(t, world, x, y, z)) { + if (fallback.placeBlock(t, world, x, y, z, trigger)) { return true; } } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureNavigate.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureNavigate.java index 4628c710af..d3f4134cea 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureNavigate.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureNavigate.java @@ -1,5 +1,6 @@ package com.github.technus.tectech.mechanics.structure; +import net.minecraft.item.ItemStack; import net.minecraft.world.World; /** @@ -12,12 +13,12 @@ interface IStructureNavigate extends IStructureElement { } @Override - default boolean spawnHint(T t, World world, int x, int y, int z) { + default boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { return true; } @Override - default boolean placeBlock(T t, World world, int x, int y, int z) { + default boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { return true; } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java index 5c54d05e60..9cc82699b9 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java @@ -10,7 +10,7 @@ import static com.github.technus.tectech.mechanics.structure.StructureUtility.*; public class StructureDefinition implements IStructureDefinition { private final Map> elements; private final Map shapes; - private final Map[]> compiled; + private final Map[]> structures; public static Builder builder() { return new Builder<>(); @@ -19,10 +19,10 @@ public class StructureDefinition implements IStructureDefinition { private StructureDefinition( Map> elements, Map shapes, - Map[]> compiled) { + Map[]> structures) { this.elements =elements; this.shapes=shapes; - this.compiled =compiled; + this.structures = structures; } public static class Builder { @@ -48,6 +48,14 @@ public class StructureDefinition implements IStructureDefinition { return shapes; } + /** + * Casings go: 0 1 2 3 4 5 6 7 8 9 : ; < = > ? + *
+ * HatchAdders go: space ! " # $ % & ' ( ) * + * @param name + * @param structurePiece + * @return + */ @Deprecated public Builder addShapeOldApi(String name, String[][] structurePiece) { StringBuilder builder = new StringBuilder(); @@ -202,15 +210,46 @@ public class StructureDefinition implements IStructureDefinition { } public IStructureDefinition build() { + Map[]> structures = compileStructureMap(); if(DEBUG_MODE){ - return new StructureDefinition<>(new HashMap<>(elements), new HashMap<>(shapes), compileMap()); + return new StructureDefinition<>(new HashMap<>(elements), new HashMap<>(shapes), structures); }else { - return compileMap()::get; + return structures::get; + } + } + + @SuppressWarnings("unchecked") + private Map[]> compileElementSetMap() { + Set mising = new HashSet<>(); + shapes.values().stream().map(CharSequence::chars).forEach(intStream -> intStream.forEach(c -> { + IStructureElement iStructureElement = elements.get((char) c); + if (iStructureElement == null) { + mising.add(c); + } + })); + if (mising.isEmpty()) { + Map[]> map = new HashMap<>(); + shapes.forEach((key, value) -> { + Set chars=new HashSet<>(); + for (char c : value.toCharArray()) { + chars.add(c); + } + IStructureElement[] compiled = new IStructureElement[chars.size()]; + int i=0; + for (Character aChar : chars) { + compiled[i++]=elements.get(aChar); + } + map.put(key, compiled); + }); + return map; + } else { + throw new RuntimeException("Missing Structure Element bindings for (chars as integers): " + + Arrays.toString(mising.toArray())); } } @SuppressWarnings("unchecked") - private Map[]> compileMap() { + private Map[]> compileStructureMap() { Set mising = new HashSet<>(); shapes.values().stream().map(CharSequence::chars).forEach(intStream -> intStream.forEach(c -> { IStructureElement iStructureElement = elements.get((char) c); @@ -243,12 +282,12 @@ public class StructureDefinition implements IStructureDefinition { return shapes; } - public Map[]> getCompiled() { - return compiled; + public Map[]> getStructures() { + return structures; } @Override - public IStructureElement[] getElementsFor(String name) { - return compiled.get(name); + public IStructureElement[] getStructureFor(String name) { + return structures.get(name); } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java index b1be2071a7..1658620d2e 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java @@ -11,11 +11,15 @@ import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import java.util.*; +import java.util.function.BiFunction; import java.util.function.Consumer; +import java.util.function.Function; +import java.util.function.Supplier; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sHintCasingsTT; @@ -31,7 +35,7 @@ public class StructureUtility { } @Override - public boolean spawnHint(Object o, World world, int x, int y, int z) { + public boolean spawnHint(Object o, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world,x,y,z,sHintCasingsTT,13); return true; } @@ -44,7 +48,7 @@ public class StructureUtility { } @Override - public boolean spawnHint(Object o, World world, int x, int y, int z) { + public boolean spawnHint(Object o, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world,x,y,z,sHintCasingsTT,14); return true; } @@ -57,7 +61,7 @@ public class StructureUtility { } @Override - public boolean spawnHint(Object o, World world, int x, int y, int z) { + public boolean spawnHint(Object o, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world,x,y,z,sHintCasingsTT,15); return true; } @@ -96,7 +100,7 @@ public class StructureUtility { } @Override - public boolean spawnHint(T t, World world, int x, int y, int z) { + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); return true; } @@ -122,7 +126,7 @@ public class StructureUtility { } @Override - public boolean spawnHint(T t, World world, int x, int y, int z) { + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); return true; } @@ -140,7 +144,7 @@ public class StructureUtility { } @Override - public boolean spawnHint(T t, World world, int x, int y, int z) { + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); return true; } @@ -160,7 +164,7 @@ public class StructureUtility { } @Override - public boolean spawnHint(T t, World world, int x, int y, int z) { + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world,x,y,z,sHintCasingsTT,meta); return true; } @@ -178,7 +182,7 @@ public class StructureUtility { } @Override - public boolean spawnHint(T t, World world, int x, int y, int z) { + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); return true; } @@ -199,13 +203,13 @@ public class StructureUtility { } @Override - public boolean placeBlock(T t, World world, int x, int y, int z) { + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { world.setBlock(x,y,z,hintBlock,hintMeta,2); return true; } @Override - public boolean spawnHint(T t, World world, int x, int y, int z) { + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); return true; } @@ -231,13 +235,13 @@ public class StructureUtility { } @Override - public boolean placeBlock(T t, World world, int x, int y, int z) { + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { world.setBlock(x,y,z,hintBlock,hintMeta,2); return true; } @Override - public boolean spawnHint(T t, World world, int x, int y, int z) { + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); return true; } @@ -255,13 +259,13 @@ public class StructureUtility { } @Override - public boolean placeBlock(T t, World world, int x, int y, int z) { + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { world.setBlock(x,y,z,hintBlock,hintMeta,2); return true; } @Override - public boolean spawnHint(T t, World world, int x, int y, int z) { + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); return true; } @@ -283,19 +287,44 @@ public class StructureUtility { } @Override - public boolean placeBlock(T t, World world, int x, int y, int z) { + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { world.setBlock(x,y,z,hintBlock,hintMeta,2); return true; } @Override - public boolean spawnHint(T t, World world, int x, int y, int z) { + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); return true; } }; } + public static IStructureElement ofBlockAdder(IBlockAdder iBlockAdder,int dots){ + int meta=dots-1; + if(iBlockAdder==null ){ + throw new IllegalArgumentException(); + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + return iBlockAdder.apply(t,world.getBlock(x, y, z), world.getBlockMetadata(x, y, z)); + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + world.setBlock(x,y,z,sHintCasingsTT,meta,2); + return true; + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + TecTech.proxy.hint_particle(world,x,y,z,sHintCasingsTT,meta); + return true; + } + }; + } + public static IStructureElement ofTileAdder(ITileAdder iTileAdder, Block hintBlock, int hintMeta){ if(iTileAdder==null ||hintBlock==null){ throw new IllegalArgumentException(); @@ -308,14 +337,14 @@ public class StructureUtility { } @Override - public boolean spawnHint(T t, World world, int x, int y, int z) { + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); return true; } }; } - public static IStructureElement ofHatchAdder(IHatchAdder iHatchAdder, Short textureIndex, int dots){ + public static IStructureElement ofHatchAdder(IHatchAdder iHatchAdder, int textureIndex, int dots){ int meta=dots-1; if(iHatchAdder==null){ throw new IllegalArgumentException(); @@ -324,18 +353,18 @@ public class StructureUtility { @Override public boolean check(T t, World world, int x, int y, int z) { TileEntity tileEntity = world.getTileEntity(x, y, z); - return tileEntity instanceof IGregTechTileEntity && iHatchAdder.apply(t,(IGregTechTileEntity) tileEntity, textureIndex); + return tileEntity instanceof IGregTechTileEntity && iHatchAdder.apply(t,(IGregTechTileEntity) tileEntity, (short)textureIndex); } @Override - public boolean spawnHint(T t, World world, int x, int y, int z) { + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world,x,y,z,sHintCasingsTT,meta); return true; } }; } - public static IStructureElement ofHatchAdder(IHatchAdder iHatchAdder, Short textureIndex, int dots, Block placeCasing,int placeCasingMeta){ + public static IStructureElement ofHatchAdder(IHatchAdder iHatchAdder, int textureIndex, int dots, Block placeCasing,int placeCasingMeta){ int meta=dots-1; if(iHatchAdder==null){ throw new IllegalArgumentException(); @@ -344,24 +373,24 @@ public class StructureUtility { @Override public boolean check(T t, World world, int x, int y, int z) { TileEntity tileEntity = world.getTileEntity(x, y, z); - return tileEntity instanceof IGregTechTileEntity && iHatchAdder.apply(t,(IGregTechTileEntity) tileEntity, textureIndex); + return tileEntity instanceof IGregTechTileEntity && iHatchAdder.apply(t,(IGregTechTileEntity) tileEntity, (short)textureIndex); } @Override - public boolean spawnHint(T t, World world, int x, int y, int z) { + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world,x,y,z,sHintCasingsTT,meta); return true; } @Override - public boolean placeBlock(T t, World world, int x, int y, int z) { + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { world.setBlock(x,y,z,placeCasing,placeCasingMeta,2); return true; } }; } - public static IStructureElement ofHatchAdder(IHatchAdder iHatchAdder, Short textureIndex, Block hintBlock, int hintMeta){ + public static IStructureElement ofHatchAdder(IHatchAdder iHatchAdder, int textureIndex, Block hintBlock, int hintMeta){ if(iHatchAdder==null ||hintBlock==null){ throw new IllegalArgumentException(); } @@ -369,18 +398,18 @@ public class StructureUtility { @Override public boolean check(T t, World world, int x, int y, int z) { TileEntity tileEntity = world.getTileEntity(x, y, z); - return tileEntity instanceof IGregTechTileEntity && iHatchAdder.apply(t,(IGregTechTileEntity) tileEntity, textureIndex); + return tileEntity instanceof IGregTechTileEntity && iHatchAdder.apply(t,(IGregTechTileEntity) tileEntity, (short)textureIndex); } @Override - public boolean spawnHint(T t, World world, int x, int y, int z) { + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); return true; } }; } - public static IStructureElement ofHatchAdder(IHatchAdder iHatchAdder, Short textureIndex, Block hintBlock, int hintMeta, Block placeCasing,int placeCasingMeta){ + public static IStructureElement ofHatchAdder(IHatchAdder iHatchAdder, int textureIndex, Block hintBlock, int hintMeta, Block placeCasing,int placeCasingMeta){ if(iHatchAdder==null ||hintBlock==null){ throw new IllegalArgumentException(); } @@ -388,17 +417,17 @@ public class StructureUtility { @Override public boolean check(T t, World world, int x, int y, int z) { TileEntity tileEntity = world.getTileEntity(x, y, z); - return tileEntity instanceof IGregTechTileEntity && iHatchAdder.apply(t,(IGregTechTileEntity) tileEntity, textureIndex); + return tileEntity instanceof IGregTechTileEntity && iHatchAdder.apply(t,(IGregTechTileEntity) tileEntity, (short)textureIndex); } @Override - public boolean spawnHint(T t, World world, int x, int y, int z) { + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); return true; } @Override - public boolean placeBlock(T t, World world, int x, int y, int z) { + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { world.setBlock(x,y,z,placeCasing,placeCasingMeta,2); return true; } @@ -417,13 +446,13 @@ public class StructureUtility { } @Override - public boolean placeBlock(T t, World world, int x, int y, int z) { - return element.placeBlock(t, world, x, y, z); + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return element.placeBlock(t, world, x, y, z, trigger); } @Override - public boolean spawnHint(T t, World world, int x, int y, int z) { - return element.spawnHint(t, world, x, y, z); + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + return element.spawnHint(t, world, x, y, z, trigger); } }; } @@ -440,13 +469,381 @@ public class StructureUtility { } @Override - public boolean placeBlock(T t, World world, int x, int y, int z) { - return element.placeBlock(t, world, x, y, z); + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return element.placeBlock(t, world, x, y, z, trigger); } @Override - public boolean spawnHint(T t, World world, int x, int y, int z) { - return element.spawnHint(t, world, x, y, z); + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + return element.spawnHint(t, world, x, y, z, trigger); + } + }; + } + + @SafeVarargs + public static IStructureFallback ofElementChain(IStructureElement... elementChain){ + if(elementChain==null || elementChain.length==0){ + throw new IllegalArgumentException(); + } + for (IStructureElement iStructureElement : elementChain) { + if(iStructureElement==null){ + throw new IllegalArgumentException(); + } + } + return () -> elementChain; + } + + public static IStructureElement defer(Supplier> to){ + if(to==null){ + throw new IllegalArgumentException(); + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + return to.get().check(t, world, x, y, z); + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return to.get().placeBlock(t, world, x, y, z, trigger); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + return to.get().spawnHint(t, world, x, y, z, trigger); + } + }; + } + + public static IStructureElement defer(Function> to){ + if(to==null){ + throw new IllegalArgumentException(); + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + return to.apply(t).check(t, world, x, y, z); + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return to.apply(t).placeBlock(t, world, x, y, z, trigger); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + return to.apply(t).spawnHint(t, world, x, y, z, trigger); + } + }; + } + + public static IStructureElement defer(Function keyExtractor,Map> map){ + if(keyExtractor==null||map==null){ + throw new IllegalArgumentException(); + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + return map.get(keyExtractor.apply(t)).check(t, world, x, y, z); + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return map.get(keyExtractor.apply(t)).placeBlock(t, world, x, y, z, trigger); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + return map.get(keyExtractor.apply(t)).spawnHint(t, world, x, y, z, trigger); + } + }; + } + + public static IStructureElement defer(Function keyExtractor,Map> map,IStructureElement defaultElem){ + if(keyExtractor==null||map==null){ + throw new IllegalArgumentException(); + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + return map.getOrDefault(keyExtractor.apply(t),defaultElem).check(t, world, x, y, z); + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return map.getOrDefault(keyExtractor.apply(t),defaultElem).placeBlock(t, world, x, y, z, trigger); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + return map.getOrDefault(keyExtractor.apply(t),defaultElem).spawnHint(t, world, x, y, z, trigger); + } + }; + } + + @SafeVarargs + public static IStructureElement defer(Function keyExtractor, IStructureElement... array){ + if(keyExtractor==null||array==null){ + throw new IllegalArgumentException(); + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + return array[keyExtractor.apply(t)].check(t, world, x, y, z); + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return array[keyExtractor.apply(t)].placeBlock(t, world, x, y, z, trigger); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + return array[keyExtractor.apply(t)].spawnHint(t, world, x, y, z, trigger); + } + }; + } + + public static IStructureElement defer(Function keyExtractor,List> array){ + if(keyExtractor==null||array==null){ + throw new IllegalArgumentException(); + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + return array.get(keyExtractor.apply(t)).check(t, world, x, y, z); + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return array.get(keyExtractor.apply(t)).placeBlock(t, world, x, y, z, trigger); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + return array.get(keyExtractor.apply(t)).spawnHint(t, world, x, y, z, trigger); + } + }; + } + + public static IStructureElement defer(BiFunction> to){ + if(to==null){ + throw new IllegalArgumentException(); + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + return to.apply(t,null).check(t, world, x, y, z); + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return to.apply(t,trigger).placeBlock(t, world, x, y, z, trigger); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + return to.apply(t,trigger).spawnHint(t, world, x, y, z, trigger); + } + }; + } + + public static IStructureElement defer(BiFunction keyExtractor,Map> map){ + if(keyExtractor==null||map==null){ + throw new IllegalArgumentException(); + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + return map.get(keyExtractor.apply(t,null)).check(t, world, x, y, z); + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return map.get(keyExtractor.apply(t,trigger)).placeBlock(t, world, x, y, z, trigger); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + return map.get(keyExtractor.apply(t,trigger)).spawnHint(t, world, x, y, z, trigger); + } + }; + } + + public static IStructureElement defer(BiFunction keyExtractor,Map> map,IStructureElement defaultElem){ + if(keyExtractor==null||map==null){ + throw new IllegalArgumentException(); + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + return map.getOrDefault(keyExtractor.apply(t,null),defaultElem).check(t, world, x, y, z); + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return map.getOrDefault(keyExtractor.apply(t,trigger),defaultElem).placeBlock(t, world, x, y, z, trigger); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + return map.getOrDefault(keyExtractor.apply(t,trigger),defaultElem).spawnHint(t, world, x, y, z, trigger); + } + }; + } + + @SafeVarargs + public static IStructureElement defer(BiFunction keyExtractor, IStructureElement... array){ + if(keyExtractor==null||array==null){ + throw new IllegalArgumentException(); + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + return array[keyExtractor.apply(t,null)].check(t, world, x, y, z); + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return array[keyExtractor.apply(t,trigger)].placeBlock(t, world, x, y, z, trigger); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + return array[keyExtractor.apply(t,trigger)].spawnHint(t, world, x, y, z, trigger); + } + }; + } + + public static IStructureElement defer(BiFunction keyExtractor, List> array){ + if(keyExtractor==null||array==null){ + throw new IllegalArgumentException(); + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + return array.get(keyExtractor.apply(t,null)).check(t, world, x, y, z); + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return array.get(keyExtractor.apply(t,trigger)).placeBlock(t, world, x, y, z, trigger); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + return array.get(keyExtractor.apply(t,trigger)).spawnHint(t, world, x, y, z, trigger); + } + }; + } + + public static IStructureElement defer(Function> toCheck, BiFunction> to){ + if(to==null){ + throw new IllegalArgumentException(); + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + return toCheck.apply(t).check(t, world, x, y, z); + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return to.apply(t,trigger).placeBlock(t, world, x, y, z, trigger); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + return to.apply(t,trigger).spawnHint(t, world, x, y, z, trigger); + } + }; + } + + public static IStructureElement defer(Function keyExtractorCheck,BiFunction keyExtractor,Map> map){ + if(keyExtractor==null||map==null){ + throw new IllegalArgumentException(); + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + return map.get(keyExtractorCheck.apply(t)).check(t, world, x, y, z); + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return map.get(keyExtractor.apply(t,trigger)).placeBlock(t, world, x, y, z, trigger); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + return map.get(keyExtractor.apply(t,trigger)).spawnHint(t, world, x, y, z, trigger); + } + }; + } + + public static IStructureElement defer(Function keyExtractorCheck,BiFunction keyExtractor,Map> map,IStructureElement defaultElem){ + if(keyExtractor==null||map==null){ + throw new IllegalArgumentException(); + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + return map.getOrDefault(keyExtractorCheck.apply(t),defaultElem).check(t, world, x, y, z); + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return map.getOrDefault(keyExtractor.apply(t,trigger),defaultElem).placeBlock(t, world, x, y, z, trigger); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + return map.getOrDefault(keyExtractor.apply(t,trigger),defaultElem).spawnHint(t, world, x, y, z, trigger); + } + }; + } + + @SafeVarargs + public static IStructureElement defer(Function keyExtractorCheck,BiFunction keyExtractor, IStructureElement... array){ + if(keyExtractor==null||array==null){ + throw new IllegalArgumentException(); + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + return array[keyExtractorCheck.apply(t)].check(t, world, x, y, z); + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return array[keyExtractor.apply(t,trigger)].placeBlock(t, world, x, y, z, trigger); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + return array[keyExtractor.apply(t,trigger)].spawnHint(t, world, x, y, z, trigger); + } + }; + } + + public static IStructureElement defer(Function keyExtractorCheck,BiFunction keyExtractor, List> array){ + if(keyExtractor==null||array==null){ + throw new IllegalArgumentException(); + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + return array.get(keyExtractorCheck.apply(t)).check(t, world, x, y, z); + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return array.get(keyExtractor.apply(t,trigger)).placeBlock(t, world, x, y, z, trigger); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + return array.get(keyExtractor.apply(t,trigger)).spawnHint(t, world, x, y, z, trigger); } }; } @@ -543,19 +940,6 @@ public class StructureUtility { }; } - @SafeVarargs - public static IStructureFallback ofElementChain(IStructureElement... elementChain){ - if(elementChain==null || elementChain.length==0){ - throw new IllegalArgumentException(); - } - for (IStructureElement iStructureElement : elementChain) { - if(iStructureElement==null){ - throw new IllegalArgumentException(); - } - } - return () -> elementChain; - } - /** * Use only to get pseudo code... * @param world diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java index dea65d322f..924353cd29 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java @@ -11,8 +11,8 @@ import com.github.technus.tectech.mechanics.elementalMatter.core.templates.cElem import com.github.technus.tectech.mechanics.elementalMatter.definitions.complex.dAtomDefinition; import com.github.technus.tectech.mechanics.elementalMatter.definitions.complex.dHadronDefinition; import com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.eQuarkDefinition; -import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; -import com.github.technus.tectech.mechanics.structure.Structure; +import com.github.technus.tectech.mechanics.structure.IStructureDefinition; +import com.github.technus.tectech.mechanics.structure.StructureDefinition; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.thing.casing.TT_Container_Casings; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputElemental; @@ -28,8 +28,6 @@ import gregtech.api.enums.Textures; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -38,7 +36,7 @@ import net.minecraftforge.common.util.ForgeDirection; import java.util.HashMap; -import static com.github.technus.tectech.mechanics.structure.Structure.adders; +import static com.github.technus.tectech.mechanics.structure.StructureUtility.*; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -300,47 +298,49 @@ public class GT_MetaTileEntity_EM_collider extends GT_MetaTileEntity_MultiblockB //region structure //use multi A energy inputs, use less power the longer it runs - private static final String[][] shape = new String[][]{ - {"I0A0A0", "I00000", "I0A0A0",}, - {"H0000000", "G001111100", "H0000000",}, - {"F22223332222", "F41155555114", "F22223332222",}, - {"E2000000000002", "E4155111115514", "E2000000000002",}, - {"D20000E00002", "D41511E11514", "D20000E00002",}, - {"C2000I0002", "C4151I1514", "C2000I0002",}, - {"B2000K0002", "B4151K1514", "B2000K0002",}, - {"B200M002", "A0151M1510", "B200M002",}, - {"A0200M0020", "A0151M1510", "A0200M0020",}, - {"0020O0200", "0151O1510", "0020O0200",}, - {"A030O030", "0151O1510", "A030O030",}, - {"0030O0300", "0151O1510", "0030O0300",}, - {"A030O030", "0151O1510", "A030O030",}, - {"0020O0200", "0151O1510", "0020O0200",}, - {"A0200M0020", "A0151M1510", "A0200M0020",}, - {"B200M002", "A0151M1510", "B200M002",}, - {"B2000K0002", "B4151K1514", "B2000K0002",}, - {"C2000I0002", "C4151I1514", "C2000I0002",}, - {"D200002 200002", "D415112 . 211514", "D200002 200002",}, - {"E20!!22222!!02", "E4155111115514", "E20!!22222!!02",}, - {"F2222#\"#2222", "F41155555114", "F2222#\"#2222",}, - }; - private static final Block[] blockType = new Block[]{ - sBlockCasingsTT, - sBlockCasingsTT, - sBlockCasingsTT, - QuantumGlassBlock.INSTANCE, - sBlockCasingsTT, - sBlockCasingsTT - }; - private static final byte[] blockMeta1 = new byte[]{4, 7, 4, 0, 4, 8}; - private static final byte[] blockMeta2 = new byte[]{4, 7, 5, 0, 6, 9}; - private static final IHatchAdder[] addingMethods = adders( - GT_MetaTileEntity_EM_collider::addClassicToMachineList, - GT_MetaTileEntity_EM_collider::addElementalInputToMachineList, - GT_MetaTileEntity_EM_collider::addElementalOutputToMachineList, - GT_MetaTileEntity_EM_collider::addElementalMufflerToMachineList); - private static final short[] casingTextures = new short[]{textureOffset, textureOffset + 4, textureOffset + 4, textureOffset + 4}; - private static final Block[] blockTypeFallback = new Block[]{sBlockCasingsTT, sBlockCasingsTT, sBlockCasingsTT, sBlockCasingsTT}; - private static final byte[] blockMetaFallback = new byte[]{0, 4, 4, 4}; + private static final IStructureDefinition STRUCTURE_DEFINITION= StructureDefinition + .builder() + .addShapeOldApi("main",new String[][]{ + {"I0A0A0", "I00000", "I0A0A0",}, + {"H0000000", "G001111100", "H0000000",}, + {"F22223332222", "F41155555114", "F22223332222",}, + {"E2000000000002", "E4155111115514", "E2000000000002",}, + {"D20000E00002", "D41511E11514", "D20000E00002",}, + {"C2000I0002", "C4151I1514", "C2000I0002",}, + {"B2000K0002", "B4151K1514", "B2000K0002",}, + {"B200M002", "A0151M1510", "B200M002",}, + {"A0200M0020", "A0151M1510", "A0200M0020",}, + {"0020O0200", "0151O1510", "0020O0200",}, + {"A030O030", "0151O1510", "A030O030",}, + {"0030O0300", "0151O1510", "0030O0300",}, + {"A030O030", "0151O1510", "A030O030",}, + {"0020O0200", "0151O1510", "0020O0200",}, + {"A0200M0020", "A0151M1510", "A0200M0020",}, + {"B200M002", "A0151M1510", "B200M002",}, + {"B2000K0002", "B4151K1514", "B2000K0002",}, + {"C2000I0002", "C4151I1514", "C2000I0002",}, + {"D200002&&&200002", "D415112&.&211514", "D200002&&&200002",}, + {"E20!!22222!!02", "E4155111115514", "E20!!22222!!02",}, + {"F2222#$#2222", "F41155555114", "F2222#$#2222",}, + }) + .addElement('0', ofBlock(sBlockCasingsTT,4)) + .addElement('1', ofBlock(sBlockCasingsTT,7)) + .addElement('2', defer(t->(int)t.eTier,(t,item)->(item.stackSize%2)+1, + error(),ofBlock(sBlockCasingsTT,4),ofBlock(sBlockCasingsTT,5))) + .addElement('3', ofBlock(QuantumGlassBlock.INSTANCE,0)) + .addElement('4', defer(t->(int)t.eTier,(t,item)->(item.stackSize%2)+1, + error(),ofBlock(sBlockCasingsTT,4),ofBlock(sBlockCasingsTT,6))) + .addElement('5', defer(t->(int)t.eTier,(t,item)->(item.stackSize%2)+1, + error(),ofBlock(sBlockCasingsTT,8),ofBlock(sBlockCasingsTT,9))) + .addElement('&', ofHatchAdder(GT_MetaTileEntity_EM_collider::addClassicToMachineList, + textureOffset,1,sBlockCasingsTT,0)) + .addElement('!', ofHatchAdder(GT_MetaTileEntity_EM_collider::addElementalInputToMachineList, + textureOffset + 4,2,sBlockCasingsTT,4)) + .addElement('$', ofHatchAdder(GT_MetaTileEntity_EM_collider::addElementalOutputToMachineList, + textureOffset + 4,3,sBlockCasingsTT,4)) + .addElement('#', ofHatchAdder(GT_MetaTileEntity_EM_collider::addElementalMufflerToMachineList, + textureOffset + 4,4,sBlockCasingsTT,4)) + .build(); private static final String[] description = new String[]{ EnumChatFormatting.AQUA + translateToLocal("tt.keyphrase.Hint_Details") + ":", translateToLocal("gt.blockmachines.multimachine.em.collider.hint.0"),//1 - Classic Hatches or High Power Casing @@ -349,6 +349,12 @@ public class GT_MetaTileEntity_EM_collider extends GT_MetaTileEntity_MultiblockB translateToLocal("gt.blockmachines.multimachine.em.collider.hint.3"),//4 - Elemental Overflow Hatches or Molecular Casing translateToLocal("gt.blockmachines.multimachine.em.collider.hint.4"),//General - Another Controller facing opposite direction }; + + @Override + public IStructureDefinition getStructure_EM() { + return STRUCTURE_DEFINITION; + } + //endregion public GT_MetaTileEntity_EM_collider(int aID, String aName, String aNameRegional) { @@ -470,20 +476,7 @@ public class GT_MetaTileEntity_EM_collider extends GT_MetaTileEntity_MultiblockB eTier = 0; return false; } - - boolean test; - switch (eTier) { - case 1: - test = structureCheck_EM(shape, blockType, blockMeta1, addingMethods, casingTextures, blockTypeFallback, blockMetaFallback, 11, 1, 18); - break; - case 2: - test = structureCheck_EM(shape, blockType, blockMeta2, addingMethods, casingTextures, blockTypeFallback, blockMetaFallback, 11, 1, 18); - break; - default: - eTier = 0; - return false; - } - if (test) { + if (structureCheck_EM("main",11, 1, 18)) { return true; } eTier = 0; @@ -681,16 +674,8 @@ public class GT_MetaTileEntity_EM_collider extends GT_MetaTileEntity_MultiblockB iGregTechTileEntity.getYCoord() + yDir, iGregTechTileEntity.getZCoord() + zDir, TT_Container_Casings.sHintCasingsTT, 12); - } else { - if (iGregTechTileEntity.getBlockOffset(xDir, 0, zDir).getMaterial() == Material.air) { - iGregTechTileEntity.getWorld().setBlock(iGregTechTileEntity.getXCoord() + xDir, iGregTechTileEntity.getYCoord() + yDir, iGregTechTileEntity.getZCoord() + zDir, TT_Container_Casings.sHintCasingsTT, 12, 2); - } - } - if ((stackSize.stackSize & 1) == 1) { - Structure.builder(shape, blockType, blockMeta1, 11, 1, 18, iGregTechTileEntity, getExtendedFacing(), hintsOnly); - } else { - Structure.builder(shape, blockType, blockMeta2, 11, 1, 18, iGregTechTileEntity, getExtendedFacing(), hintsOnly); } + structureBuild_EM("main",11, 1, 18,hintsOnly, stackSize); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java index 2d7fc5b524..26a8af04ed 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java @@ -160,7 +160,7 @@ public class GT_MetaTileEntity_EM_transformer extends GT_MetaTileEntity_Multiblo @Override public void construct(ItemStack stackSize, boolean hintsOnly) { - structureBuild_EM("main", 1, 1, 0, hintsOnly); + structureBuild_EM("main", 1, 1, 0, hintsOnly, stackSize); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java index dc9c6d39e5..3e53f63736 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java @@ -216,11 +216,11 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt horizontalOffset,verticalOffset,depthOffset,!mMachine); } - public final boolean structureBuild_EM(String piece,int horizontalOffset, int verticalOffset, int depthOffset,boolean hintsOnly) { + public final boolean structureBuild_EM(String piece,int horizontalOffset, int verticalOffset, int depthOffset,boolean hintsOnly,ItemStack trigger) { IGregTechTileEntity baseMetaTileEntity = getBaseMetaTileEntity(); - return getStructure_EM_Internal().buildOrHints(this,piece, baseMetaTileEntity.getWorld(),getExtendedFacing(), - baseMetaTileEntity.getXCoord(),baseMetaTileEntity.getYCoord(),baseMetaTileEntity.getZCoord(), - horizontalOffset,verticalOffset,depthOffset,hintsOnly); + return getStructure_EM_Internal().buildOrHints(this, trigger, piece, baseMetaTileEntity.getWorld(), + getExtendedFacing(), baseMetaTileEntity.getXCoord(), baseMetaTileEntity.getYCoord(), + baseMetaTileEntity.getZCoord(), horizontalOffset, verticalOffset, depthOffset, hintsOnly); } @Deprecated -- cgit From c6615bd442b41170c6ab46d948d832bc063f2b4a Mon Sep 17 00:00:00 2001 From: Tec Date: Tue, 28 Apr 2020 21:47:13 +0200 Subject: Add optional hatch adders --- .../mechanics/structure/StructureUtility.java | 55 ++++++++++++++++++++++ .../multi/GT_MetaTileEntity_EM_collider.java | 14 +++--- 2 files changed, 62 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java index 1658620d2e..467140cb2c 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java @@ -390,6 +390,34 @@ public class StructureUtility { }; } + public static IStructureElement ofHatchAdderOptional(IHatchAdder iHatchAdder, int textureIndex, int dots, Block placeCasing,int placeCasingMeta){ + int meta=dots-1; + if(iHatchAdder==null){ + throw new IllegalArgumentException(); + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + TileEntity tileEntity = world.getTileEntity(x, y, z); + return tileEntity instanceof IGregTechTileEntity && + (iHatchAdder.apply(t,(IGregTechTileEntity) tileEntity, (short)textureIndex) || + (world.getBlock(x,y,z)==placeCasing&&world.getBlockMetadata(x,y,z)==placeCasingMeta)); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + TecTech.proxy.hint_particle(world,x,y,z,sHintCasingsTT,meta); + return true; + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + world.setBlock(x,y,z,placeCasing,placeCasingMeta,2); + return true; + } + }; + } + public static IStructureElement ofHatchAdder(IHatchAdder iHatchAdder, int textureIndex, Block hintBlock, int hintMeta){ if(iHatchAdder==null ||hintBlock==null){ throw new IllegalArgumentException(); @@ -434,6 +462,33 @@ public class StructureUtility { }; } + public static IStructureElement ofHatchAdderOptional(IHatchAdder iHatchAdder, int textureIndex, Block hintBlock, int hintMeta, Block placeCasing,int placeCasingMeta){ + if(iHatchAdder==null ||hintBlock==null){ + throw new IllegalArgumentException(); + } + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + TileEntity tileEntity = world.getTileEntity(x, y, z); + return tileEntity instanceof IGregTechTileEntity && + (iHatchAdder.apply(t,(IGregTechTileEntity) tileEntity, (short)textureIndex) || + (world.getBlock(x,y,z)==placeCasing&&world.getBlockMetadata(x,y,z)==placeCasingMeta)); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); + return true; + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + world.setBlock(x,y,z,placeCasing,placeCasingMeta,2); + return true; + } + }; + } + public static IStructureElement onElementPass(Consumer onCheckPass, IStructureElement element){ return new IStructureElement() { @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java index 924353cd29..2782e7924f 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java @@ -325,20 +325,20 @@ public class GT_MetaTileEntity_EM_collider extends GT_MetaTileEntity_MultiblockB }) .addElement('0', ofBlock(sBlockCasingsTT,4)) .addElement('1', ofBlock(sBlockCasingsTT,7)) - .addElement('2', defer(t->(int)t.eTier,(t,item)->(item.stackSize%2)+1, + .addElement('2', defer(t->(int)t.eTier,(t,item)->(item.stackSize&1)+1, error(),ofBlock(sBlockCasingsTT,4),ofBlock(sBlockCasingsTT,5))) .addElement('3', ofBlock(QuantumGlassBlock.INSTANCE,0)) - .addElement('4', defer(t->(int)t.eTier,(t,item)->(item.stackSize%2)+1, + .addElement('4', defer(t->(int)t.eTier,(t,item)->(item.stackSize&1)+1, error(),ofBlock(sBlockCasingsTT,4),ofBlock(sBlockCasingsTT,6))) - .addElement('5', defer(t->(int)t.eTier,(t,item)->(item.stackSize%2)+1, + .addElement('5', defer(t->(int)t.eTier,(t,item)->(item.stackSize&1)+1, error(),ofBlock(sBlockCasingsTT,8),ofBlock(sBlockCasingsTT,9))) - .addElement('&', ofHatchAdder(GT_MetaTileEntity_EM_collider::addClassicToMachineList, + .addElement('&', ofHatchAdderOptional(GT_MetaTileEntity_EM_collider::addClassicToMachineList, textureOffset,1,sBlockCasingsTT,0)) - .addElement('!', ofHatchAdder(GT_MetaTileEntity_EM_collider::addElementalInputToMachineList, + .addElement('!', ofHatchAdderOptional(GT_MetaTileEntity_EM_collider::addElementalInputToMachineList, textureOffset + 4,2,sBlockCasingsTT,4)) - .addElement('$', ofHatchAdder(GT_MetaTileEntity_EM_collider::addElementalOutputToMachineList, + .addElement('$', ofHatchAdderOptional(GT_MetaTileEntity_EM_collider::addElementalOutputToMachineList, textureOffset + 4,3,sBlockCasingsTT,4)) - .addElement('#', ofHatchAdder(GT_MetaTileEntity_EM_collider::addElementalMufflerToMachineList, + .addElement('#', ofHatchAdderOptional(GT_MetaTileEntity_EM_collider::addElementalMufflerToMachineList, textureOffset + 4,4,sBlockCasingsTT,4)) .build(); private static final String[] description = new String[]{ -- cgit From 15dbf1c823e31c437cde0b3e186f791b71ec3506 Mon Sep 17 00:00:00 2001 From: Tec Date: Wed, 29 Apr 2020 20:50:47 +0200 Subject: Cleanup struct util --- .../mechanics/structure/IStructureElement.java | 8 +- .../structure/IStructureElementChain.java | 41 +++ .../structure/IStructureElementCheckOnly.java | 16 + .../structure/IStructureElementDeferred.java | 7 + .../structure/IStructureElementNoPlacement.java | 11 + .../mechanics/structure/IStructureFallback.java | 41 --- .../mechanics/structure/StructureUtility.java | 374 ++++++++------------- .../multi/GT_MetaTileEntity_EM_transformer.java | 2 +- 8 files changed, 223 insertions(+), 277 deletions(-) create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementChain.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementCheckOnly.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementDeferred.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementNoPlacement.java delete mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/IStructureFallback.java diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java index 7ed173fbfa..f946e71f91 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java @@ -9,13 +9,9 @@ import net.minecraft.world.World; public interface IStructureElement { boolean check(T t,World world,int x,int y,int z); - default boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger){ - return false; - } + boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger); - default boolean placeBlock(T t,World world,int x,int y,int z, ItemStack trigger){ - return false; - } + boolean placeBlock(T t,World world,int x,int y,int z, ItemStack trigger); default int getStepA(){ return 1; diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementChain.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementChain.java new file mode 100644 index 0000000000..f9593ee1c5 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementChain.java @@ -0,0 +1,41 @@ +package com.github.technus.tectech.mechanics.structure; + +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +/** + * Use StructureUtility to instantiate + */ +public interface IStructureElementChain extends IStructureElement { + IStructureElement[] fallbacks(); + + @Override + default boolean check(T t, World world, int x, int y, int z){ + for (IStructureElement fallback : fallbacks()) { + if (fallback.check(t, world, x, y, z)) { + return true; + } + } + return false; + } + + @Override + default boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + for (IStructureElement fallback : fallbacks()) { + if (fallback.spawnHint(t, world, x, y, z, trigger)) { + return true; + } + } + return false; + } + + @Override + default boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + for (IStructureElement fallback : fallbacks()) { + if (fallback.placeBlock(t, world, x, y, z, trigger)) { + return true; + } + } + return false; + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementCheckOnly.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementCheckOnly.java new file mode 100644 index 0000000000..ec15aea53b --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementCheckOnly.java @@ -0,0 +1,16 @@ +package com.github.technus.tectech.mechanics.structure; + +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public interface IStructureElementCheckOnly extends IStructureElement { + @Override + default boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger){ + return false; + } + + @Override + default boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger){ + return false; + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementDeferred.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementDeferred.java new file mode 100644 index 0000000000..dbb74312a8 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementDeferred.java @@ -0,0 +1,7 @@ +package com.github.technus.tectech.mechanics.structure; + +/** + * Use StructureUtility to instantiate + */ +public interface IStructureElementDeferred extends IStructureElement { +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementNoPlacement.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementNoPlacement.java new file mode 100644 index 0000000000..47e6060878 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementNoPlacement.java @@ -0,0 +1,11 @@ +package com.github.technus.tectech.mechanics.structure; + +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public interface IStructureElementNoPlacement extends IStructureElement { + @Override + default boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger){ + return false; + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureFallback.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureFallback.java deleted file mode 100644 index 1c55753d19..0000000000 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureFallback.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.github.technus.tectech.mechanics.structure; - -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -/** - * Use StructureUtility to instantiate - */ -public interface IStructureFallback extends IStructureElement { - IStructureElement[] fallbacks(); - - @Override - default boolean check(T t, World world, int x, int y, int z){ - for (IStructureElement fallback : fallbacks()) { - if (fallback.check(t, world, x, y, z)) { - return true; - } - } - return false; - } - - @Override - default boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - for (IStructureElement fallback : fallbacks()) { - if (fallback.spawnHint(t, world, x, y, z, trigger)) { - return true; - } - } - return false; - } - - @Override - default boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - for (IStructureElement fallback : fallbacks()) { - if (fallback.placeBlock(t, world, x, y, z, trigger)) { - return true; - } - } - return false; - } -} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java index 467140cb2c..68c00cf1ac 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java @@ -39,6 +39,12 @@ public class StructureUtility { TecTech.proxy.hint_particle(world,x,y,z,sHintCasingsTT,13); return true; } + + @Override + public boolean placeBlock(Object o, World world, int x, int y, int z, ItemStack trigger) { + world.setBlock(x,y,z,Blocks.air,0,2); + return false; + } }; @SuppressWarnings("rawtypes") private static final IStructureElement NOT_AIR= new IStructureElement() { @@ -52,6 +58,12 @@ public class StructureUtility { TecTech.proxy.hint_particle(world,x,y,z,sHintCasingsTT,14); return true; } + + @Override + public boolean placeBlock(Object o, World world, int x, int y, int z, ItemStack trigger) { + world.setBlock(x,y,z,sHintCasingsTT,14,2); + return true; + } }; @SuppressWarnings("rawtypes") private static final IStructureElement ERROR= new IStructureElement() { @@ -65,6 +77,11 @@ public class StructureUtility { TecTech.proxy.hint_particle(world,x,y,z,sHintCasingsTT,15); return true; } + + @Override + public boolean placeBlock(Object o, World world, int x, int y, int z, ItemStack trigger) { + return true; + } }; private StructureUtility(){ @@ -81,19 +98,48 @@ public class StructureUtility { return NOT_AIR; } + /** + * Check returns false. + * Placement is always handled by this and does nothing. + * Makes little to no use it in fallback chain. + * @param + * @return + */ @SuppressWarnings("unchecked") public static IStructureElement error(){ return ERROR; } + /** + * Check always returns: true. + * @param dots + * @param + * @return + */ + public static IStructureElementNoPlacement ofHint(int dots){ + int meta=dots-1; + return new IStructureElementNoPlacement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + return true; + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + TecTech.proxy.hint_particle(world, x, y, z, sHintCasingsTT, meta); + return false; + } + }; + } + /** * Does not allow Block duplicates (with different meta) */ - public static IStructureElement ofBlocksFlatHint(Map blocsMap,Block hintBlock,int hintMeta){ + public static IStructureElementNoPlacement ofBlocksFlatHint(Map blocsMap, Block hintBlock, int hintMeta){ if(blocsMap==null || blocsMap.isEmpty() || hintBlock==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementNoPlacement() { @Override public boolean check(T t, World world, int x, int y, int z) { return blocsMap.getOrDefault(world.getBlock(x, y, z), -1) == world.getBlockMetadata(x, y, z); @@ -110,7 +156,7 @@ public class StructureUtility { /** * Allows block duplicates (with different meta) */ - public static IStructureElement ofBlocksMapHint(Map> blocsMap,Block hintBlock,int hintMeta){ + public static IStructureElementNoPlacement ofBlocksMapHint(Map> blocsMap, Block hintBlock, int hintMeta){ if(blocsMap==null || blocsMap.isEmpty() || hintBlock==null){ throw new IllegalArgumentException(); } @@ -119,7 +165,7 @@ public class StructureUtility { throw new IllegalArgumentException(); } } - return new IStructureElement() { + return new IStructureElementNoPlacement() { @Override public boolean check(T t, World world, int x, int y, int z) { return blocsMap.getOrDefault(world.getBlock(x, y, z), Collections.emptySet()).contains(world.getBlockMetadata(x, y, z)); @@ -133,11 +179,11 @@ public class StructureUtility { }; } - public static IStructureElement ofBlockHint(Block block, int meta,Block hintBlock,int hintMeta){ + public static IStructureElementNoPlacement ofBlockHint(Block block, int meta,Block hintBlock,int hintMeta){ if(block==null || hintBlock==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementNoPlacement() { @Override public boolean check(T t, World world, int x, int y, int z) { return block == world.getBlock(x, y, z) && meta == world.getBlockMetadata(x, y, z); @@ -151,31 +197,15 @@ public class StructureUtility { }; } - public static IStructureElement ofBlockHint(Block block, int meta){ + public static IStructureElementNoPlacement ofBlockHint(Block block, int meta){ return ofBlockHint(block, meta,block,meta); } - public static IStructureElement ofHint(int dots){ - int meta=dots-1; - return new IStructureElement() { - @Override - public boolean check(T t, World world, int x, int y, int z) { - return false; - } - - @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle(world,x,y,z,sHintCasingsTT,meta); - return true; - } - }; - } - - public static IStructureElement ofBlockAdderHint(IBlockAdder iBlockAdder, Block hintBlock, int hintMeta){ + public static IStructureElementNoPlacement ofBlockAdderHint(IBlockAdder iBlockAdder, Block hintBlock, int hintMeta){ if(iBlockAdder==null ||hintBlock==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementNoPlacement() { @Override public boolean check(T t, World world, int x, int y, int z) { return iBlockAdder.apply(t,world.getBlock(x, y, z), world.getBlockMetadata(x, y, z)); @@ -192,8 +222,8 @@ public class StructureUtility { /** * Does not allow Block duplicates (with different meta) */ - public static IStructureElement ofBlocksFlat(Map blocsMap,Block hintBlock,int hintMeta){ - if(blocsMap==null || blocsMap.isEmpty() || hintBlock==null){ + public static IStructureElement ofBlocksFlat(Map blocsMap,Block defaultBlock,int defaultMeta){ + if(blocsMap==null || blocsMap.isEmpty() || defaultBlock==null){ throw new IllegalArgumentException(); } return new IStructureElement() { @@ -204,13 +234,13 @@ public class StructureUtility { @Override public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - world.setBlock(x,y,z,hintBlock,hintMeta,2); + world.setBlock(x,y,z,defaultBlock,defaultMeta,2); return true; } @Override public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); + TecTech.proxy.hint_particle(world,x,y,z,defaultBlock,defaultMeta); return true; } }; @@ -219,8 +249,8 @@ public class StructureUtility { /** * Allows block duplicates (with different meta) */ - public static IStructureElement ofBlocskMap(Map> blocsMap,Block hintBlock,int hintMeta){ - if(blocsMap==null || blocsMap.isEmpty() || hintBlock==null){ + public static IStructureElement ofBlocksMap(Map> blocsMap, Block defaultBlock, int defaultMeta){ + if(blocsMap==null || blocsMap.isEmpty() || defaultBlock==null){ throw new IllegalArgumentException(); } for (Set value : blocsMap.values()) { @@ -236,20 +266,20 @@ public class StructureUtility { @Override public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - world.setBlock(x,y,z,hintBlock,hintMeta,2); + world.setBlock(x,y,z,defaultBlock,defaultMeta,2); return true; } @Override public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); + TecTech.proxy.hint_particle(world,x,y,z,defaultBlock,defaultMeta); return true; } }; } - public static IStructureElement ofBlock(Block block, int meta,Block hintBlock,int hintMeta){ - if(block==null || hintBlock==null){ + public static IStructureElement ofBlock(Block block, int meta,Block defaultBlock,int defaultMeta){ + if(block==null || defaultBlock==null){ throw new IllegalArgumentException(); } return new IStructureElement() { @@ -260,13 +290,13 @@ public class StructureUtility { @Override public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - world.setBlock(x,y,z,hintBlock,hintMeta,2); + world.setBlock(x,y,z,defaultBlock,defaultMeta,2); return true; } @Override public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); + TecTech.proxy.hint_particle(world,x,y,z,defaultBlock,defaultMeta); return true; } }; @@ -276,8 +306,8 @@ public class StructureUtility { return ofBlock(block, meta,block,meta); } - public static IStructureElement ofBlockAdder(IBlockAdder iBlockAdder,Block hintBlock,int hintMeta){ - if(iBlockAdder==null ||hintBlock==null){ + public static IStructureElement ofBlockAdder(IBlockAdder iBlockAdder,Block defaultBlock,int defaultMeta){ + if(iBlockAdder==null ||defaultBlock==null){ throw new IllegalArgumentException(); } return new IStructureElement() { @@ -288,48 +318,27 @@ public class StructureUtility { @Override public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - world.setBlock(x,y,z,hintBlock,hintMeta,2); + world.setBlock(x,y,z,defaultBlock,defaultMeta,2); return true; } @Override public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); + TecTech.proxy.hint_particle(world,x,y,z,defaultBlock,defaultMeta); return true; } }; } public static IStructureElement ofBlockAdder(IBlockAdder iBlockAdder,int dots){ - int meta=dots-1; - if(iBlockAdder==null ){ - throw new IllegalArgumentException(); - } - return new IStructureElement() { - @Override - public boolean check(T t, World world, int x, int y, int z) { - return iBlockAdder.apply(t,world.getBlock(x, y, z), world.getBlockMetadata(x, y, z)); - } - - @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - world.setBlock(x,y,z,sHintCasingsTT,meta,2); - return true; - } - - @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle(world,x,y,z,sHintCasingsTT,meta); - return true; - } - }; + return ofBlockAdder(iBlockAdder,sHintCasingsTT,dots-1); } - public static IStructureElement ofTileAdder(ITileAdder iTileAdder, Block hintBlock, int hintMeta){ + public static IStructureElementNoPlacement ofTileAdder(ITileAdder iTileAdder, Block hintBlock, int hintMeta){ if(iTileAdder==null ||hintBlock==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementNoPlacement() { @Override public boolean check(T t, World world, int x, int y, int z) { TileEntity tileEntity = world.getTileEntity(x, y, z); @@ -344,85 +353,15 @@ public class StructureUtility { }; } - public static IStructureElement ofHatchAdder(IHatchAdder iHatchAdder, int textureIndex, int dots){ - int meta=dots-1; - if(iHatchAdder==null){ - throw new IllegalArgumentException(); - } - return new IStructureElement() { - @Override - public boolean check(T t, World world, int x, int y, int z) { - TileEntity tileEntity = world.getTileEntity(x, y, z); - return tileEntity instanceof IGregTechTileEntity && iHatchAdder.apply(t,(IGregTechTileEntity) tileEntity, (short)textureIndex); - } - - @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle(world,x,y,z,sHintCasingsTT,meta); - return true; - } - }; + public static IStructureElementNoPlacement ofHatchAdder(IHatchAdder iHatchAdder, int textureIndex, int dots){ + return ofHatchAdder(iHatchAdder, textureIndex,sHintCasingsTT, dots-1); } - public static IStructureElement ofHatchAdder(IHatchAdder iHatchAdder, int textureIndex, int dots, Block placeCasing,int placeCasingMeta){ - int meta=dots-1; - if(iHatchAdder==null){ - throw new IllegalArgumentException(); - } - return new IStructureElement() { - @Override - public boolean check(T t, World world, int x, int y, int z) { - TileEntity tileEntity = world.getTileEntity(x, y, z); - return tileEntity instanceof IGregTechTileEntity && iHatchAdder.apply(t,(IGregTechTileEntity) tileEntity, (short)textureIndex); - } - - @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle(world,x,y,z,sHintCasingsTT,meta); - return true; - } - - @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - world.setBlock(x,y,z,placeCasing,placeCasingMeta,2); - return true; - } - }; - } - - public static IStructureElement ofHatchAdderOptional(IHatchAdder iHatchAdder, int textureIndex, int dots, Block placeCasing,int placeCasingMeta){ - int meta=dots-1; - if(iHatchAdder==null){ - throw new IllegalArgumentException(); - } - return new IStructureElement() { - @Override - public boolean check(T t, World world, int x, int y, int z) { - TileEntity tileEntity = world.getTileEntity(x, y, z); - return tileEntity instanceof IGregTechTileEntity && - (iHatchAdder.apply(t,(IGregTechTileEntity) tileEntity, (short)textureIndex) || - (world.getBlock(x,y,z)==placeCasing&&world.getBlockMetadata(x,y,z)==placeCasingMeta)); - } - - @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle(world,x,y,z,sHintCasingsTT,meta); - return true; - } - - @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - world.setBlock(x,y,z,placeCasing,placeCasingMeta,2); - return true; - } - }; - } - - public static IStructureElement ofHatchAdder(IHatchAdder iHatchAdder, int textureIndex, Block hintBlock, int hintMeta){ + public static IStructureElementNoPlacement ofHatchAdder(IHatchAdder iHatchAdder, int textureIndex, Block hintBlock, int hintMeta){ if(iHatchAdder==null ||hintBlock==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementNoPlacement() { @Override public boolean check(T t, World world, int x, int y, int z) { TileEntity tileEntity = world.getTileEntity(x, y, z); @@ -437,6 +376,10 @@ public class StructureUtility { }; } + public static IStructureElement ofHatchAdder(IHatchAdder iHatchAdder, int textureIndex, int dots, Block placeCasing,int placeCasingMeta){ + return ofHatchAdder(iHatchAdder, textureIndex,sHintCasingsTT, dots-1, placeCasing, placeCasingMeta); + } + public static IStructureElement ofHatchAdder(IHatchAdder iHatchAdder, int textureIndex, Block hintBlock, int hintMeta, Block placeCasing,int placeCasingMeta){ if(iHatchAdder==null ||hintBlock==null){ throw new IllegalArgumentException(); @@ -462,6 +405,10 @@ public class StructureUtility { }; } + public static IStructureElement ofHatchAdderOptional(IHatchAdder iHatchAdder, int textureIndex, int dots, Block placeCasing,int placeCasingMeta){ + return ofHatchAdderOptional(iHatchAdder, textureIndex, sHintCasingsTT, dots-1, placeCasing, placeCasingMeta); + } + public static IStructureElement ofHatchAdderOptional(IHatchAdder iHatchAdder, int textureIndex, Block hintBlock, int hintMeta, Block placeCasing,int placeCasingMeta){ if(iHatchAdder==null ||hintBlock==null){ throw new IllegalArgumentException(); @@ -489,7 +436,7 @@ public class StructureUtility { }; } - public static IStructureElement onElementPass(Consumer onCheckPass, IStructureElement element){ + public static ,T> IStructureElement onElementPass(Consumer onCheckPass, B element){ return new IStructureElement() { @Override public boolean check(T t, World world, int x, int y, int z) { @@ -512,7 +459,7 @@ public class StructureUtility { }; } - public static IStructureElement onElementFail(Consumer onFail, IStructureElement element){ + public static ,T> IStructureElement onElementFail(Consumer onFail, B element){ return new IStructureElement() { @Override public boolean check(T t, World world, int x, int y, int z) { @@ -535,8 +482,16 @@ public class StructureUtility { }; } + + /** + * Take care while chaining, as it will try to call every structure element until it returns true. + * If none does it will finally return false. + * @param elementChain + * @param + * @return + */ @SafeVarargs - public static IStructureFallback ofElementChain(IStructureElement... elementChain){ + public static IStructureElementChain ofChain(IStructureElement... elementChain){ if(elementChain==null || elementChain.length==0){ throw new IllegalArgumentException(); } @@ -548,11 +503,23 @@ public class StructureUtility { return () -> elementChain; } - public static IStructureElement defer(Supplier> to){ + /** + * Take care while chaining, as it will try to call every structure element until it returns true. + * If none does it will finally return false. + * @param elementChain + * @param + * @return + */ + @SuppressWarnings("unchecked") + public static IStructureElementChain ofChain(List> elementChain){ + return ofChain(elementChain.toArray(new IStructureElement[0])); + } + + public static IStructureElementDeferred defer(Supplier> to){ if(to==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementDeferred() { @Override public boolean check(T t, World world, int x, int y, int z) { return to.get().check(t, world, x, y, z); @@ -570,11 +537,11 @@ public class StructureUtility { }; } - public static IStructureElement defer(Function> to){ + public static IStructureElementDeferred defer(Function> to){ if(to==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementDeferred() { @Override public boolean check(T t, World world, int x, int y, int z) { return to.apply(t).check(t, world, x, y, z); @@ -592,11 +559,11 @@ public class StructureUtility { }; } - public static IStructureElement defer(Function keyExtractor,Map> map){ + public static IStructureElementDeferred defer(Function keyExtractor,Map> map){ if(keyExtractor==null||map==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementDeferred() { @Override public boolean check(T t, World world, int x, int y, int z) { return map.get(keyExtractor.apply(t)).check(t, world, x, y, z); @@ -614,11 +581,11 @@ public class StructureUtility { }; } - public static IStructureElement defer(Function keyExtractor,Map> map,IStructureElement defaultElem){ + public static IStructureElementDeferred defer(Function keyExtractor,Map> map,IStructureElement defaultElem){ if(keyExtractor==null||map==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementDeferred() { @Override public boolean check(T t, World world, int x, int y, int z) { return map.getOrDefault(keyExtractor.apply(t),defaultElem).check(t, world, x, y, z); @@ -637,11 +604,11 @@ public class StructureUtility { } @SafeVarargs - public static IStructureElement defer(Function keyExtractor, IStructureElement... array){ + public static IStructureElementDeferred defer(Function keyExtractor, IStructureElement... array){ if(keyExtractor==null||array==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementDeferred() { @Override public boolean check(T t, World world, int x, int y, int z) { return array[keyExtractor.apply(t)].check(t, world, x, y, z); @@ -659,33 +626,16 @@ public class StructureUtility { }; } - public static IStructureElement defer(Function keyExtractor,List> array){ - if(keyExtractor==null||array==null){ - throw new IllegalArgumentException(); - } - return new IStructureElement() { - @Override - public boolean check(T t, World world, int x, int y, int z) { - return array.get(keyExtractor.apply(t)).check(t, world, x, y, z); - } - - @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return array.get(keyExtractor.apply(t)).placeBlock(t, world, x, y, z, trigger); - } - - @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - return array.get(keyExtractor.apply(t)).spawnHint(t, world, x, y, z, trigger); - } - }; + @SuppressWarnings("unchecked") + public static IStructureElementDeferred defer(Function keyExtractor,List> array){ + return defer(keyExtractor, array.toArray(new IStructureElement[0])); } - public static IStructureElement defer(BiFunction> to){ + public static IStructureElementDeferred defer(BiFunction> to){ if(to==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementDeferred() { @Override public boolean check(T t, World world, int x, int y, int z) { return to.apply(t,null).check(t, world, x, y, z); @@ -703,11 +653,11 @@ public class StructureUtility { }; } - public static IStructureElement defer(BiFunction keyExtractor,Map> map){ + public static IStructureElementDeferred defer(BiFunction keyExtractor,Map> map){ if(keyExtractor==null||map==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementDeferred() { @Override public boolean check(T t, World world, int x, int y, int z) { return map.get(keyExtractor.apply(t,null)).check(t, world, x, y, z); @@ -725,11 +675,11 @@ public class StructureUtility { }; } - public static IStructureElement defer(BiFunction keyExtractor,Map> map,IStructureElement defaultElem){ + public static IStructureElementDeferred defer(BiFunction keyExtractor,Map> map,IStructureElement defaultElem){ if(keyExtractor==null||map==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementDeferred() { @Override public boolean check(T t, World world, int x, int y, int z) { return map.getOrDefault(keyExtractor.apply(t,null),defaultElem).check(t, world, x, y, z); @@ -748,11 +698,11 @@ public class StructureUtility { } @SafeVarargs - public static IStructureElement defer(BiFunction keyExtractor, IStructureElement... array){ + public static IStructureElementDeferred defer(BiFunction keyExtractor, IStructureElement... array){ if(keyExtractor==null||array==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementDeferred() { @Override public boolean check(T t, World world, int x, int y, int z) { return array[keyExtractor.apply(t,null)].check(t, world, x, y, z); @@ -770,33 +720,16 @@ public class StructureUtility { }; } - public static IStructureElement defer(BiFunction keyExtractor, List> array){ - if(keyExtractor==null||array==null){ - throw new IllegalArgumentException(); - } - return new IStructureElement() { - @Override - public boolean check(T t, World world, int x, int y, int z) { - return array.get(keyExtractor.apply(t,null)).check(t, world, x, y, z); - } - - @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return array.get(keyExtractor.apply(t,trigger)).placeBlock(t, world, x, y, z, trigger); - } - - @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - return array.get(keyExtractor.apply(t,trigger)).spawnHint(t, world, x, y, z, trigger); - } - }; + @SuppressWarnings("unchecked") + public static IStructureElementDeferred defer(BiFunction keyExtractor, List> array){ + return defer(keyExtractor, array.toArray(new IStructureElement[0])); } - public static IStructureElement defer(Function> toCheck, BiFunction> to){ + public static IStructureElementDeferred defer(Function> toCheck, BiFunction> to){ if(to==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementDeferred() { @Override public boolean check(T t, World world, int x, int y, int z) { return toCheck.apply(t).check(t, world, x, y, z); @@ -814,11 +747,11 @@ public class StructureUtility { }; } - public static IStructureElement defer(Function keyExtractorCheck,BiFunction keyExtractor,Map> map){ + public static IStructureElementDeferred defer(Function keyExtractorCheck,BiFunction keyExtractor,Map> map){ if(keyExtractor==null||map==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementDeferred() { @Override public boolean check(T t, World world, int x, int y, int z) { return map.get(keyExtractorCheck.apply(t)).check(t, world, x, y, z); @@ -836,11 +769,11 @@ public class StructureUtility { }; } - public static IStructureElement defer(Function keyExtractorCheck,BiFunction keyExtractor,Map> map,IStructureElement defaultElem){ + public static IStructureElementDeferred defer(Function keyExtractorCheck,BiFunction keyExtractor,Map> map,IStructureElement defaultElem){ if(keyExtractor==null||map==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementDeferred() { @Override public boolean check(T t, World world, int x, int y, int z) { return map.getOrDefault(keyExtractorCheck.apply(t),defaultElem).check(t, world, x, y, z); @@ -859,11 +792,11 @@ public class StructureUtility { } @SafeVarargs - public static IStructureElement defer(Function keyExtractorCheck,BiFunction keyExtractor, IStructureElement... array){ + public static IStructureElementDeferred defer(Function keyExtractorCheck,BiFunction keyExtractor, IStructureElement... array){ if(keyExtractor==null||array==null){ throw new IllegalArgumentException(); } - return new IStructureElement() { + return new IStructureElementDeferred() { @Override public boolean check(T t, World world, int x, int y, int z) { return array[keyExtractorCheck.apply(t)].check(t, world, x, y, z); @@ -881,26 +814,9 @@ public class StructureUtility { }; } - public static IStructureElement defer(Function keyExtractorCheck,BiFunction keyExtractor, List> array){ - if(keyExtractor==null||array==null){ - throw new IllegalArgumentException(); - } - return new IStructureElement() { - @Override - public boolean check(T t, World world, int x, int y, int z) { - return array.get(keyExtractorCheck.apply(t)).check(t, world, x, y, z); - } - - @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return array.get(keyExtractor.apply(t,trigger)).placeBlock(t, world, x, y, z, trigger); - } - - @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - return array.get(keyExtractor.apply(t,trigger)).spawnHint(t, world, x, y, z, trigger); - } - }; + @SuppressWarnings("unchecked") + public static IStructureElementDeferred defer(Function keyExtractorCheck,BiFunction keyExtractor, List> array){ + return defer(keyExtractorCheck, keyExtractor, array.toArray(new IStructureElement[0])); } public static IStructureNavigate step(int a,int b, int c){ @@ -996,7 +912,7 @@ public class StructureUtility { } /** - * Use only to get pseudo code... + * Used only to get pseudo code in structure writer... * @param world * @return */ diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java index 26a8af04ed..bfd74ab448 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java @@ -45,7 +45,7 @@ public class GT_MetaTileEntity_EM_transformer extends GT_MetaTileEntity_Multiblo {"111", "111", "111",}, }) .addElement('0', ofBlock(sBlockCasings1,15)) - .addElement('1', ofElementChain( + .addElement('1', ofChain( ofHatchAdder(GT_MetaTileEntity_EM_transformer::addEnergyIOToMachineList,textureOffset,sHintCasingsTT,0), onElementPass(t->t.casingCount++,ofBlock(sBlockCasingsTT,0)) )) -- cgit From 9099a93e902cd29f5312f4691e00be91c2dbe554 Mon Sep 17 00:00:00 2001 From: Tec Date: Wed, 29 Apr 2020 20:57:41 +0200 Subject: Remove pointless methods --- .../mechanics/structure/StructureUtility.java | 29 ---------------------- 1 file changed, 29 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java index 68c00cf1ac..1f8beaa240 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java @@ -376,35 +376,6 @@ public class StructureUtility { }; } - public static IStructureElement ofHatchAdder(IHatchAdder iHatchAdder, int textureIndex, int dots, Block placeCasing,int placeCasingMeta){ - return ofHatchAdder(iHatchAdder, textureIndex,sHintCasingsTT, dots-1, placeCasing, placeCasingMeta); - } - - public static IStructureElement ofHatchAdder(IHatchAdder iHatchAdder, int textureIndex, Block hintBlock, int hintMeta, Block placeCasing,int placeCasingMeta){ - if(iHatchAdder==null ||hintBlock==null){ - throw new IllegalArgumentException(); - } - return new IStructureElement() { - @Override - public boolean check(T t, World world, int x, int y, int z) { - TileEntity tileEntity = world.getTileEntity(x, y, z); - return tileEntity instanceof IGregTechTileEntity && iHatchAdder.apply(t,(IGregTechTileEntity) tileEntity, (short)textureIndex); - } - - @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); - return true; - } - - @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - world.setBlock(x,y,z,placeCasing,placeCasingMeta,2); - return true; - } - }; - } - public static IStructureElement ofHatchAdderOptional(IHatchAdder iHatchAdder, int textureIndex, int dots, Block placeCasing,int placeCasingMeta){ return ofHatchAdderOptional(iHatchAdder, textureIndex, sHintCasingsTT, dots-1, placeCasing, placeCasingMeta); } -- cgit From 31f7fc89f41e430494bb6e03415f58049f85da51 Mon Sep 17 00:00:00 2001 From: Tec Date: Fri, 1 May 2020 10:47:04 +0200 Subject: Fix navigation, move handles to util --- .../mechanics/alignment/AlignmentUtility.java | 45 ++ .../constructable/ConstructableUtility.java | 114 +++++ .../mechanics/structure/IStructureDefinition.java | 5 +- .../mechanics/structure/StructureDefinition.java | 38 +- .../mechanics/structure/StructureUtility.java | 481 ++++++++++++--------- .../thing/item/ConstructableTriggerItem.java | 104 +---- .../technus/tectech/thing/item/EuMeterGT.java | 2 +- .../thing/item/FrontRotationTriggerItem.java | 36 +- 8 files changed, 468 insertions(+), 357 deletions(-) create mode 100644 src/main/java/com/github/technus/tectech/mechanics/alignment/AlignmentUtility.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/constructable/ConstructableUtility.java diff --git a/src/main/java/com/github/technus/tectech/mechanics/alignment/AlignmentUtility.java b/src/main/java/com/github/technus/tectech/mechanics/alignment/AlignmentUtility.java new file mode 100644 index 0000000000..68e11b77af --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/alignment/AlignmentUtility.java @@ -0,0 +1,45 @@ +package com.github.technus.tectech.mechanics.alignment; + +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.FakePlayer; + +public class AlignmentUtility { + private AlignmentUtility(){ + + } + + public static boolean handle(EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ){ + TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if(tTileEntity==null || aPlayer instanceof FakePlayer) { + return aPlayer instanceof EntityPlayerMP; + } + if (aPlayer instanceof EntityPlayerMP) { + if (tTileEntity instanceof IGregTechTileEntity) { + IMetaTileEntity metaTE = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity(); + if (metaTE instanceof IAlignmentProvider) { + IAlignment alignment = ((IAlignmentProvider) metaTE).getAlignment(); + if(aPlayer.isSneaking()){ + alignment.toolSetFlip(null); + }else { + alignment.toolSetRotation(null); + } + return true; + } + } else if (tTileEntity instanceof IAlignmentProvider) { + IAlignment alignment = ((IAlignmentProvider) tTileEntity).getAlignment(); + if(aPlayer.isSneaking()){ + alignment.toolSetFlip(null); + }else { + alignment.toolSetRotation(null); + } + return true; + } + } + return false; + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/constructable/ConstructableUtility.java b/src/main/java/com/github/technus/tectech/mechanics/constructable/ConstructableUtility.java new file mode 100644 index 0000000000..2dc74330f9 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/constructable/ConstructableUtility.java @@ -0,0 +1,114 @@ +package com.github.technus.tectech.mechanics.constructable; + +import com.github.technus.tectech.TecTech; +import com.github.technus.tectech.mechanics.alignment.IAlignment; +import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.FakePlayer; +import net.minecraftforge.common.util.ForgeDirection; + +public class ConstructableUtility { + private ConstructableUtility(){ + + } + + public static boolean handle(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide) { + TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if(tTileEntity==null || aPlayer instanceof FakePlayer) { + return aPlayer instanceof EntityPlayerMP; + } + if (aPlayer instanceof EntityPlayerMP) { + //struct gen + if (aPlayer.isSneaking() && aPlayer.capabilities.isCreativeMode) { + if (tTileEntity instanceof IGregTechTileEntity) { + IMetaTileEntity metaTE = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity(); + if (metaTE instanceof IConstructable) { + ((IConstructable) metaTE).construct(aStack, false); + } else if (IMultiblockInfoContainer.contains(metaTE.getClass())) { + IMultiblockInfoContainer iMultiblockInfoContainer =IMultiblockInfoContainer.get(metaTE.getClass()); + if(metaTE instanceof IAlignment){ + iMultiblockInfoContainer.construct(aStack, false, metaTE, ( + (IAlignment) metaTE).getExtendedFacing()); + }else { + iMultiblockInfoContainer.construct(aStack, false, metaTE, + ExtendedFacing.of(ForgeDirection.getOrientation(((IGregTechTileEntity) tTileEntity).getFrontFacing()))); + } + } + } else if (tTileEntity instanceof IConstructable) { + ((IConstructable) tTileEntity).construct(aStack, false); + } else if (IMultiblockInfoContainer.contains(tTileEntity.getClass())) { + IMultiblockInfoContainer iMultiblockInfoContainer =IMultiblockInfoContainer.get(tTileEntity.getClass()); + if(tTileEntity instanceof IAlignment){ + iMultiblockInfoContainer.construct(aStack, false, tTileEntity, + ((IAlignment) tTileEntity).getExtendedFacing()); + }else { + iMultiblockInfoContainer.construct(aStack, false, tTileEntity, + ExtendedFacing.of(ForgeDirection.getOrientation(aSide))); + } + } + } + return true; + }else if (TecTech.proxy.isThePlayer(aPlayer)){//particles and text client side + //if ((!aPlayer.isSneaking() || !aPlayer.capabilities.isCreativeMode)) { + if(tTileEntity instanceof IGregTechTileEntity) { + IMetaTileEntity metaTE = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity(); + if (metaTE instanceof IConstructable) { + ((IConstructable) metaTE).construct(aStack, true); + TecTech.proxy.printInchat(((IConstructable) metaTE).getStructureDescription(aStack)); + return false; + } else if(IMultiblockInfoContainer.contains(metaTE.getClass())){ + IMultiblockInfoContainer iMultiblockInfoContainer =IMultiblockInfoContainer.get(metaTE.getClass()); + if(metaTE instanceof IAlignment){ + iMultiblockInfoContainer.construct(aStack, true, metaTE, + ((IAlignment) metaTE).getExtendedFacing()); + }else { + iMultiblockInfoContainer.construct(aStack, true, metaTE, + ExtendedFacing.of(ForgeDirection.getOrientation(((IGregTechTileEntity) tTileEntity).getFrontFacing()))); + } + TecTech.proxy.printInchat(IMultiblockInfoContainer.get(metaTE.getClass()).getDescription(aStack)); + return false; + } + } else if(tTileEntity instanceof IConstructable){ + ((IConstructable) tTileEntity).construct(aStack,true); + TecTech.proxy.printInchat(((IConstructable) tTileEntity).getStructureDescription(aStack)); + return false; + } else if(IMultiblockInfoContainer.contains(tTileEntity.getClass())){ + IMultiblockInfoContainer iMultiblockInfoContainer = IMultiblockInfoContainer.get(tTileEntity.getClass()); + if(tTileEntity instanceof IAlignment){ + iMultiblockInfoContainer.construct(aStack, true, tTileEntity, + ((IAlignment) tTileEntity).getExtendedFacing()); + }else { + iMultiblockInfoContainer.construct(aStack, true, tTileEntity, + ExtendedFacing.of(ForgeDirection.getOrientation(aSide))); + } + TecTech.proxy.printInchat(IMultiblockInfoContainer.get(tTileEntity.getClass()).getDescription(aStack)); + return false; + } + //} else { + // if(tTileEntity instanceof IGregTechTileEntity) { + // IMetaTileEntity metaTE = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity(); + // if (metaTE instanceof IConstructable) { + // TecTech.proxy.printInchat(((IConstructable) metaTE).getStructureDescription(aStack.stackSize)); + // return false; + // } else if(multiblockMap.containsKey(metaTE.getClass().getCanonicalName())){ + // TecTech.proxy.printInchat(multiblockMap.get(metaTE.getClass().getCanonicalName()).getDescription(aStack.stackSize)); + // return false; + // } + // } else if(tTileEntity instanceof IConstructable){ + // TecTech.proxy.printInchat(((IConstructable) tTileEntity).getStructureDescription(aStack.stackSize)); + // return false; + // } else if(multiblockMap.containsKey(tTileEntity.getClass().getCanonicalName())){ + // TecTech.proxy.printInchat(multiblockMap.get(tTileEntity.getClass().getCanonicalName()).getDescription(aStack.stackSize)); + // return false; + // } + //} + } + return false; + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java index 71305ebd92..542d13a7cd 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java @@ -115,9 +115,8 @@ public interface IStructureDefinition { xyz[1] += basePositionY; xyz[2] += basePositionZ; - if (world.blockExists(xyz[0], xyz[1], xyz[2])) { - element.spawnHint(object, world, xyz[0], xyz[1], xyz[2], trigger); - } + element.spawnHint(object, world, xyz[0], xyz[1], xyz[2], trigger); + abc[0]+=1; } } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java index 9cc82699b9..29114647ac 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java @@ -1,5 +1,6 @@ package com.github.technus.tectech.mechanics.structure; +import com.github.technus.tectech.TecTech; import com.github.technus.tectech.util.Vec3Impl; import java.util.*; @@ -29,7 +30,7 @@ public class StructureDefinition implements IStructureDefinition { private static final char A='\uA000'; private static final char B='\uB000'; private static final char C='\uC000'; - private static final char D='\uD000'; + private char d ='\uD000'; private final Map navigates; private final Map> elements; private final Map shapes; @@ -61,8 +62,12 @@ public class StructureDefinition implements IStructureDefinition { StringBuilder builder = new StringBuilder(); if (structurePiece.length > 0) { for (String[] strings : structurePiece) { + + if (strings.length > 0) { for (String string : strings) { + + for (int i = 0; i < string.length(); i++) { char ch = string.charAt(i); if(ch<' '){ @@ -77,16 +82,29 @@ public class StructureDefinition implements IStructureDefinition { builder.append(ch); } } + + builder.append(B); } builder.setLength(builder.length() - 1); } + + builder.append(C); } builder.setLength(builder.length() - 1); } + if(DEBUG_MODE){ + Exception exception = new Exception(); + exception.getStackTrace(); + + TecTech.LOGGER.info("Structure shape normal:"); + + + TecTech.LOGGER.info("Structure shape transposed:"); + + } int a=0,b=0,c=0; - char d=D; for (int i = 0; i < builder.length(); i++) { char ch = builder.charAt(i); if(ch =='.'){ @@ -106,7 +124,7 @@ public class StructureDefinition implements IStructureDefinition { Vec3Impl vec3 = new Vec3Impl(a, b, c); Character navigate = navigates.get(vec3); if(navigate==null){ - navigate=d++; + navigate= d++; navigates.put(vec3,navigate); addElement(navigate,step(vec3)); } @@ -137,8 +155,8 @@ public class StructureDefinition implements IStructureDefinition { * rest needs to be defined * * next char is next block(a) - * next string is next line(a,b) - * next string[] is next slice(a,b,c) + * next string is next line(b) + * next string[] is next slice(c) * * char A000-FFFF range is reserved for generated skips * @param name unlocalized/code name @@ -160,7 +178,6 @@ public class StructureDefinition implements IStructureDefinition { builder.setLength(builder.length() - 1); } int a=0,b=0,c=0; - char d=D; for (int i = 0; i < builder.length(); i++) { char ch = builder.charAt(i); if(ch ==' ' || ch =='.'){ @@ -188,7 +205,6 @@ public class StructureDefinition implements IStructureDefinition { a=0; b=0; c=0; - d++; } } @@ -220,14 +236,14 @@ public class StructureDefinition implements IStructureDefinition { @SuppressWarnings("unchecked") private Map[]> compileElementSetMap() { - Set mising = new HashSet<>(); + Set missing = new HashSet<>(); shapes.values().stream().map(CharSequence::chars).forEach(intStream -> intStream.forEach(c -> { IStructureElement iStructureElement = elements.get((char) c); if (iStructureElement == null) { - mising.add(c); + missing.add(c); } })); - if (mising.isEmpty()) { + if (missing.isEmpty()) { Map[]> map = new HashMap<>(); shapes.forEach((key, value) -> { Set chars=new HashSet<>(); @@ -244,7 +260,7 @@ public class StructureDefinition implements IStructureDefinition { return map; } else { throw new RuntimeException("Missing Structure Element bindings for (chars as integers): " + - Arrays.toString(mising.toArray())); + Arrays.toString(missing.toArray())); } } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java index 1f8beaa240..868bfec181 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java @@ -24,11 +24,11 @@ import java.util.function.Supplier; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sHintCasingsTT; public class StructureUtility { - private static final String NICE_CHARS ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789`~!@#$%^&*()_=|[]{};:'<>,./?"; + private static final String NICE_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789`~!@#$%^&*()_=|[]{};:'<>,./?"; @SuppressWarnings("rawtypes") - private static final Map STEP = new HashMap<>(); + private static final Map STEP = new HashMap<>(); @SuppressWarnings("rawtypes") - private static final IStructureElement AIR= new IStructureElement() { + private static final IStructureElement AIR = new IStructureElement() { @Override public boolean check(Object t, World world, int x, int y, int z) { return world.getBlock(x, y, z).getMaterial() == Material.air; @@ -36,18 +36,18 @@ public class StructureUtility { @Override public boolean spawnHint(Object o, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle(world,x,y,z,sHintCasingsTT,13); + TecTech.proxy.hint_particle(world, x, y, z, sHintCasingsTT, 13); return true; } @Override public boolean placeBlock(Object o, World world, int x, int y, int z, ItemStack trigger) { - world.setBlock(x,y,z,Blocks.air,0,2); + world.setBlock(x, y, z, Blocks.air, 0, 2); return false; } }; @SuppressWarnings("rawtypes") - private static final IStructureElement NOT_AIR= new IStructureElement() { + private static final IStructureElement NOT_AIR = new IStructureElement() { @Override public boolean check(Object t, World world, int x, int y, int z) { return world.getBlock(x, y, z).getMaterial() != Material.air; @@ -55,18 +55,18 @@ public class StructureUtility { @Override public boolean spawnHint(Object o, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle(world,x,y,z,sHintCasingsTT,14); + TecTech.proxy.hint_particle(world, x, y, z, sHintCasingsTT, 14); return true; } @Override public boolean placeBlock(Object o, World world, int x, int y, int z, ItemStack trigger) { - world.setBlock(x,y,z,sHintCasingsTT,14,2); + world.setBlock(x, y, z, sHintCasingsTT, 14, 2); return true; } }; @SuppressWarnings("rawtypes") - private static final IStructureElement ERROR= new IStructureElement() { + private static final IStructureElement ERROR = new IStructureElement() { @Override public boolean check(Object t, World world, int x, int y, int z) { return false; @@ -74,7 +74,7 @@ public class StructureUtility { @Override public boolean spawnHint(Object o, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle(world,x,y,z,sHintCasingsTT,15); + TecTech.proxy.hint_particle(world, x, y, z, sHintCasingsTT, 15); return true; } @@ -84,17 +84,17 @@ public class StructureUtility { } }; - private StructureUtility(){ + private StructureUtility() { } @SuppressWarnings("unchecked") - public static IStructureElement isAir(){ + public static IStructureElement isAir() { return AIR; } @SuppressWarnings("unchecked") - public static IStructureElement notAir(){ + public static IStructureElement notAir() { return NOT_AIR; } @@ -102,22 +102,24 @@ public class StructureUtility { * Check returns false. * Placement is always handled by this and does nothing. * Makes little to no use it in fallback chain. + * * @param * @return */ @SuppressWarnings("unchecked") - public static IStructureElement error(){ + public static IStructureElement error() { return ERROR; } /** * Check always returns: true. + * * @param dots * @param * @return */ - public static IStructureElementNoPlacement ofHint(int dots){ - int meta=dots-1; + public static IStructureElementNoPlacement ofHint(int dots) { + int meta = dots - 1; return new IStructureElementNoPlacement() { @Override public boolean check(T t, World world, int x, int y, int z) { @@ -135,8 +137,8 @@ public class StructureUtility { /** * Does not allow Block duplicates (with different meta) */ - public static IStructureElementNoPlacement ofBlocksFlatHint(Map blocsMap, Block hintBlock, int hintMeta){ - if(blocsMap==null || blocsMap.isEmpty() || hintBlock==null){ + public static IStructureElementNoPlacement ofBlocksFlatHint(Map blocsMap, Block hintBlock, int hintMeta) { + if (blocsMap == null || blocsMap.isEmpty() || hintBlock == null) { throw new IllegalArgumentException(); } return new IStructureElementNoPlacement() { @@ -147,7 +149,7 @@ public class StructureUtility { @Override public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); + TecTech.proxy.hint_particle(world, x, y, z, hintBlock, hintMeta); return true; } }; @@ -156,12 +158,12 @@ public class StructureUtility { /** * Allows block duplicates (with different meta) */ - public static IStructureElementNoPlacement ofBlocksMapHint(Map> blocsMap, Block hintBlock, int hintMeta){ - if(blocsMap==null || blocsMap.isEmpty() || hintBlock==null){ + public static IStructureElementNoPlacement ofBlocksMapHint(Map> blocsMap, Block hintBlock, int hintMeta) { + if (blocsMap == null || blocsMap.isEmpty() || hintBlock == null) { throw new IllegalArgumentException(); } for (Set value : blocsMap.values()) { - if(value.isEmpty()){ + if (value.isEmpty()) { throw new IllegalArgumentException(); } } @@ -173,14 +175,14 @@ public class StructureUtility { @Override public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); + TecTech.proxy.hint_particle(world, x, y, z, hintBlock, hintMeta); return true; } }; } - public static IStructureElementNoPlacement ofBlockHint(Block block, int meta,Block hintBlock,int hintMeta){ - if(block==null || hintBlock==null){ + public static IStructureElementNoPlacement ofBlockHint(Block block, int meta, Block hintBlock, int hintMeta) { + if (block == null || hintBlock == null) { throw new IllegalArgumentException(); } return new IStructureElementNoPlacement() { @@ -191,29 +193,29 @@ public class StructureUtility { @Override public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); + TecTech.proxy.hint_particle(world, x, y, z, hintBlock, hintMeta); return true; } }; } - public static IStructureElementNoPlacement ofBlockHint(Block block, int meta){ - return ofBlockHint(block, meta,block,meta); + public static IStructureElementNoPlacement ofBlockHint(Block block, int meta) { + return ofBlockHint(block, meta, block, meta); } - public static IStructureElementNoPlacement ofBlockAdderHint(IBlockAdder iBlockAdder, Block hintBlock, int hintMeta){ - if(iBlockAdder==null ||hintBlock==null){ + public static IStructureElementNoPlacement ofBlockAdderHint(IBlockAdder iBlockAdder, Block hintBlock, int hintMeta) { + if (iBlockAdder == null || hintBlock == null) { throw new IllegalArgumentException(); } return new IStructureElementNoPlacement() { @Override public boolean check(T t, World world, int x, int y, int z) { - return iBlockAdder.apply(t,world.getBlock(x, y, z), world.getBlockMetadata(x, y, z)); + return iBlockAdder.apply(t, world.getBlock(x, y, z), world.getBlockMetadata(x, y, z)); } @Override public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); + TecTech.proxy.hint_particle(world, x, y, z, hintBlock, hintMeta); return true; } }; @@ -222,8 +224,8 @@ public class StructureUtility { /** * Does not allow Block duplicates (with different meta) */ - public static IStructureElement ofBlocksFlat(Map blocsMap,Block defaultBlock,int defaultMeta){ - if(blocsMap==null || blocsMap.isEmpty() || defaultBlock==null){ + public static IStructureElement ofBlocksFlat(Map blocsMap, Block defaultBlock, int defaultMeta) { + if (blocsMap == null || blocsMap.isEmpty() || defaultBlock == null) { throw new IllegalArgumentException(); } return new IStructureElement() { @@ -234,13 +236,13 @@ public class StructureUtility { @Override public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - world.setBlock(x,y,z,defaultBlock,defaultMeta,2); + world.setBlock(x, y, z, defaultBlock, defaultMeta, 2); return true; } @Override public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle(world,x,y,z,defaultBlock,defaultMeta); + TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); return true; } }; @@ -249,12 +251,12 @@ public class StructureUtility { /** * Allows block duplicates (with different meta) */ - public static IStructureElement ofBlocksMap(Map> blocsMap, Block defaultBlock, int defaultMeta){ - if(blocsMap==null || blocsMap.isEmpty() || defaultBlock==null){ + public static IStructureElement ofBlocksMap(Map> blocsMap, Block defaultBlock, int defaultMeta) { + if (blocsMap == null || blocsMap.isEmpty() || defaultBlock == null) { throw new IllegalArgumentException(); } for (Set value : blocsMap.values()) { - if(value.isEmpty()){ + if (value.isEmpty()) { throw new IllegalArgumentException(); } } @@ -266,20 +268,20 @@ public class StructureUtility { @Override public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - world.setBlock(x,y,z,defaultBlock,defaultMeta,2); + world.setBlock(x, y, z, defaultBlock, defaultMeta, 2); return true; } @Override public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle(world,x,y,z,defaultBlock,defaultMeta); + TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); return true; } }; } - public static IStructureElement ofBlock(Block block, int meta,Block defaultBlock,int defaultMeta){ - if(block==null || defaultBlock==null){ + public static IStructureElement ofBlock(Block block, int meta, Block defaultBlock, int defaultMeta) { + if (block == null || defaultBlock == null) { throw new IllegalArgumentException(); } return new IStructureElement() { @@ -290,98 +292,98 @@ public class StructureUtility { @Override public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - world.setBlock(x,y,z,defaultBlock,defaultMeta,2); + world.setBlock(x, y, z, defaultBlock, defaultMeta, 2); return true; } @Override public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle(world,x,y,z,defaultBlock,defaultMeta); + TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); return true; } }; } - public static IStructureElement ofBlock(Block block, int meta){ - return ofBlock(block, meta,block,meta); + public static IStructureElement ofBlock(Block block, int meta) { + return ofBlock(block, meta, block, meta); } - public static IStructureElement ofBlockAdder(IBlockAdder iBlockAdder,Block defaultBlock,int defaultMeta){ - if(iBlockAdder==null ||defaultBlock==null){ + public static IStructureElement ofBlockAdder(IBlockAdder iBlockAdder, Block defaultBlock, int defaultMeta) { + if (iBlockAdder == null || defaultBlock == null) { throw new IllegalArgumentException(); } return new IStructureElement() { @Override public boolean check(T t, World world, int x, int y, int z) { - return iBlockAdder.apply(t,world.getBlock(x, y, z), world.getBlockMetadata(x, y, z)); + return iBlockAdder.apply(t, world.getBlock(x, y, z), world.getBlockMetadata(x, y, z)); } @Override public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - world.setBlock(x,y,z,defaultBlock,defaultMeta,2); + world.setBlock(x, y, z, defaultBlock, defaultMeta, 2); return true; } @Override public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle(world,x,y,z,defaultBlock,defaultMeta); + TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); return true; } }; } - public static IStructureElement ofBlockAdder(IBlockAdder iBlockAdder,int dots){ - return ofBlockAdder(iBlockAdder,sHintCasingsTT,dots-1); + public static IStructureElement ofBlockAdder(IBlockAdder iBlockAdder, int dots) { + return ofBlockAdder(iBlockAdder, sHintCasingsTT, dots - 1); } - public static IStructureElementNoPlacement ofTileAdder(ITileAdder iTileAdder, Block hintBlock, int hintMeta){ - if(iTileAdder==null ||hintBlock==null){ + public static IStructureElementNoPlacement ofTileAdder(ITileAdder iTileAdder, Block hintBlock, int hintMeta) { + if (iTileAdder == null || hintBlock == null) { throw new IllegalArgumentException(); } return new IStructureElementNoPlacement() { @Override public boolean check(T t, World world, int x, int y, int z) { TileEntity tileEntity = world.getTileEntity(x, y, z); - return tileEntity instanceof IGregTechTileEntity && iTileAdder.apply(t,tileEntity); + return tileEntity instanceof IGregTechTileEntity && iTileAdder.apply(t, tileEntity); } @Override public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); + TecTech.proxy.hint_particle(world, x, y, z, hintBlock, hintMeta); return true; } }; } - public static IStructureElementNoPlacement ofHatchAdder(IHatchAdder iHatchAdder, int textureIndex, int dots){ - return ofHatchAdder(iHatchAdder, textureIndex,sHintCasingsTT, dots-1); + public static IStructureElementNoPlacement ofHatchAdder(IHatchAdder iHatchAdder, int textureIndex, int dots) { + return ofHatchAdder(iHatchAdder, textureIndex, sHintCasingsTT, dots - 1); } - public static IStructureElementNoPlacement ofHatchAdder(IHatchAdder iHatchAdder, int textureIndex, Block hintBlock, int hintMeta){ - if(iHatchAdder==null ||hintBlock==null){ + public static IStructureElementNoPlacement ofHatchAdder(IHatchAdder iHatchAdder, int textureIndex, Block hintBlock, int hintMeta) { + if (iHatchAdder == null || hintBlock == null) { throw new IllegalArgumentException(); } return new IStructureElementNoPlacement() { @Override public boolean check(T t, World world, int x, int y, int z) { TileEntity tileEntity = world.getTileEntity(x, y, z); - return tileEntity instanceof IGregTechTileEntity && iHatchAdder.apply(t,(IGregTechTileEntity) tileEntity, (short)textureIndex); + return tileEntity instanceof IGregTechTileEntity && iHatchAdder.apply(t, (IGregTechTileEntity) tileEntity, (short) textureIndex); } @Override public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); + TecTech.proxy.hint_particle(world, x, y, z, hintBlock, hintMeta); return true; } }; } - public static IStructureElement ofHatchAdderOptional(IHatchAdder iHatchAdder, int textureIndex, int dots, Block placeCasing,int placeCasingMeta){ - return ofHatchAdderOptional(iHatchAdder, textureIndex, sHintCasingsTT, dots-1, placeCasing, placeCasingMeta); + public static IStructureElement ofHatchAdderOptional(IHatchAdder iHatchAdder, int textureIndex, int dots, Block placeCasing, int placeCasingMeta) { + return ofHatchAdderOptional(iHatchAdder, textureIndex, sHintCasingsTT, dots - 1, placeCasing, placeCasingMeta); } - public static IStructureElement ofHatchAdderOptional(IHatchAdder iHatchAdder, int textureIndex, Block hintBlock, int hintMeta, Block placeCasing,int placeCasingMeta){ - if(iHatchAdder==null ||hintBlock==null){ + public static IStructureElement ofHatchAdderOptional(IHatchAdder iHatchAdder, int textureIndex, Block hintBlock, int hintMeta, Block placeCasing, int placeCasingMeta) { + if (iHatchAdder == null || hintBlock == null) { throw new IllegalArgumentException(); } return new IStructureElement() { @@ -389,30 +391,30 @@ public class StructureUtility { public boolean check(T t, World world, int x, int y, int z) { TileEntity tileEntity = world.getTileEntity(x, y, z); return tileEntity instanceof IGregTechTileEntity && - (iHatchAdder.apply(t,(IGregTechTileEntity) tileEntity, (short)textureIndex) || - (world.getBlock(x,y,z)==placeCasing&&world.getBlockMetadata(x,y,z)==placeCasingMeta)); + (iHatchAdder.apply(t, (IGregTechTileEntity) tileEntity, (short) textureIndex) || + (world.getBlock(x, y, z) == placeCasing && world.getBlockMetadata(x, y, z) == placeCasingMeta)); } @Override public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle(world,x,y,z,hintBlock,hintMeta); + TecTech.proxy.hint_particle(world, x, y, z, hintBlock, hintMeta); return true; } @Override public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - world.setBlock(x,y,z,placeCasing,placeCasingMeta,2); + world.setBlock(x, y, z, placeCasing, placeCasingMeta, 2); return true; } }; } - public static ,T> IStructureElement onElementPass(Consumer onCheckPass, B element){ + public static , T> IStructureElement onElementPass(Consumer onCheckPass, B element) { return new IStructureElement() { @Override public boolean check(T t, World world, int x, int y, int z) { boolean check = element.check(t, world, x, y, z); - if(check){ + if (check) { onCheckPass.accept(t); } return check; @@ -430,12 +432,12 @@ public class StructureUtility { }; } - public static ,T> IStructureElement onElementFail(Consumer onFail, B element){ + public static , T> IStructureElement onElementFail(Consumer onFail, B element) { return new IStructureElement() { @Override public boolean check(T t, World world, int x, int y, int z) { boolean check = element.check(t, world, x, y, z); - if(!check){ + if (!check) { onFail.accept(t); } return check; @@ -457,17 +459,18 @@ public class StructureUtility { /** * Take care while chaining, as it will try to call every structure element until it returns true. * If none does it will finally return false. + * * @param elementChain * @param * @return */ @SafeVarargs - public static IStructureElementChain ofChain(IStructureElement... elementChain){ - if(elementChain==null || elementChain.length==0){ + public static IStructureElementChain ofChain(IStructureElement... elementChain) { + if (elementChain == null || elementChain.length == 0) { throw new IllegalArgumentException(); } for (IStructureElement iStructureElement : elementChain) { - if(iStructureElement==null){ + if (iStructureElement == null) { throw new IllegalArgumentException(); } } @@ -477,17 +480,18 @@ public class StructureUtility { /** * Take care while chaining, as it will try to call every structure element until it returns true. * If none does it will finally return false. + * * @param elementChain * @param * @return */ @SuppressWarnings("unchecked") - public static IStructureElementChain ofChain(List> elementChain){ + public static IStructureElementChain ofChain(List> elementChain) { return ofChain(elementChain.toArray(new IStructureElement[0])); } - public static IStructureElementDeferred defer(Supplier> to){ - if(to==null){ + public static IStructureElementDeferred defer(Supplier> to) { + if (to == null) { throw new IllegalArgumentException(); } return new IStructureElementDeferred() { @@ -508,8 +512,8 @@ public class StructureUtility { }; } - public static IStructureElementDeferred defer(Function> to){ - if(to==null){ + public static IStructureElementDeferred defer(Function> to) { + if (to == null) { throw new IllegalArgumentException(); } return new IStructureElementDeferred() { @@ -530,8 +534,8 @@ public class StructureUtility { }; } - public static IStructureElementDeferred defer(Function keyExtractor,Map> map){ - if(keyExtractor==null||map==null){ + public static IStructureElementDeferred defer(Function keyExtractor, Map> map) { + if (keyExtractor == null || map == null) { throw new IllegalArgumentException(); } return new IStructureElementDeferred() { @@ -552,31 +556,31 @@ public class StructureUtility { }; } - public static IStructureElementDeferred defer(Function keyExtractor,Map> map,IStructureElement defaultElem){ - if(keyExtractor==null||map==null){ + public static IStructureElementDeferred defer(Function keyExtractor, Map> map, IStructureElement defaultElem) { + if (keyExtractor == null || map == null) { throw new IllegalArgumentException(); } return new IStructureElementDeferred() { @Override public boolean check(T t, World world, int x, int y, int z) { - return map.getOrDefault(keyExtractor.apply(t),defaultElem).check(t, world, x, y, z); + return map.getOrDefault(keyExtractor.apply(t), defaultElem).check(t, world, x, y, z); } @Override public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return map.getOrDefault(keyExtractor.apply(t),defaultElem).placeBlock(t, world, x, y, z, trigger); + return map.getOrDefault(keyExtractor.apply(t), defaultElem).placeBlock(t, world, x, y, z, trigger); } @Override public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - return map.getOrDefault(keyExtractor.apply(t),defaultElem).spawnHint(t, world, x, y, z, trigger); + return map.getOrDefault(keyExtractor.apply(t), defaultElem).spawnHint(t, world, x, y, z, trigger); } }; } @SafeVarargs - public static IStructureElementDeferred defer(Function keyExtractor, IStructureElement... array){ - if(keyExtractor==null||array==null){ + public static IStructureElementDeferred defer(Function keyExtractor, IStructureElement... array) { + if (keyExtractor == null || array == null) { throw new IllegalArgumentException(); } return new IStructureElementDeferred() { @@ -598,106 +602,106 @@ public class StructureUtility { } @SuppressWarnings("unchecked") - public static IStructureElementDeferred defer(Function keyExtractor,List> array){ + public static IStructureElementDeferred defer(Function keyExtractor, List> array) { return defer(keyExtractor, array.toArray(new IStructureElement[0])); } - public static IStructureElementDeferred defer(BiFunction> to){ - if(to==null){ + public static IStructureElementDeferred defer(BiFunction> to) { + if (to == null) { throw new IllegalArgumentException(); } return new IStructureElementDeferred() { @Override public boolean check(T t, World world, int x, int y, int z) { - return to.apply(t,null).check(t, world, x, y, z); + return to.apply(t, null).check(t, world, x, y, z); } @Override public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return to.apply(t,trigger).placeBlock(t, world, x, y, z, trigger); + return to.apply(t, trigger).placeBlock(t, world, x, y, z, trigger); } @Override public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - return to.apply(t,trigger).spawnHint(t, world, x, y, z, trigger); + return to.apply(t, trigger).spawnHint(t, world, x, y, z, trigger); } }; } - public static IStructureElementDeferred defer(BiFunction keyExtractor,Map> map){ - if(keyExtractor==null||map==null){ + public static IStructureElementDeferred defer(BiFunction keyExtractor, Map> map) { + if (keyExtractor == null || map == null) { throw new IllegalArgumentException(); } return new IStructureElementDeferred() { @Override public boolean check(T t, World world, int x, int y, int z) { - return map.get(keyExtractor.apply(t,null)).check(t, world, x, y, z); + return map.get(keyExtractor.apply(t, null)).check(t, world, x, y, z); } @Override public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return map.get(keyExtractor.apply(t,trigger)).placeBlock(t, world, x, y, z, trigger); + return map.get(keyExtractor.apply(t, trigger)).placeBlock(t, world, x, y, z, trigger); } @Override public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - return map.get(keyExtractor.apply(t,trigger)).spawnHint(t, world, x, y, z, trigger); + return map.get(keyExtractor.apply(t, trigger)).spawnHint(t, world, x, y, z, trigger); } }; } - public static IStructureElementDeferred defer(BiFunction keyExtractor,Map> map,IStructureElement defaultElem){ - if(keyExtractor==null||map==null){ + public static IStructureElementDeferred defer(BiFunction keyExtractor, Map> map, IStructureElement defaultElem) { + if (keyExtractor == null || map == null) { throw new IllegalArgumentException(); } return new IStructureElementDeferred() { @Override public boolean check(T t, World world, int x, int y, int z) { - return map.getOrDefault(keyExtractor.apply(t,null),defaultElem).check(t, world, x, y, z); + return map.getOrDefault(keyExtractor.apply(t, null), defaultElem).check(t, world, x, y, z); } @Override public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return map.getOrDefault(keyExtractor.apply(t,trigger),defaultElem).placeBlock(t, world, x, y, z, trigger); + return map.getOrDefault(keyExtractor.apply(t, trigger), defaultElem).placeBlock(t, world, x, y, z, trigger); } @Override public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - return map.getOrDefault(keyExtractor.apply(t,trigger),defaultElem).spawnHint(t, world, x, y, z, trigger); + return map.getOrDefault(keyExtractor.apply(t, trigger), defaultElem).spawnHint(t, world, x, y, z, trigger); } }; } @SafeVarargs - public static IStructureElementDeferred defer(BiFunction keyExtractor, IStructureElement... array){ - if(keyExtractor==null||array==null){ + public static IStructureElementDeferred defer(BiFunction keyExtractor, IStructureElement... array) { + if (keyExtractor == null || array == null) { throw new IllegalArgumentException(); } return new IStructureElementDeferred() { @Override public boolean check(T t, World world, int x, int y, int z) { - return array[keyExtractor.apply(t,null)].check(t, world, x, y, z); + return array[keyExtractor.apply(t, null)].check(t, world, x, y, z); } @Override public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return array[keyExtractor.apply(t,trigger)].placeBlock(t, world, x, y, z, trigger); + return array[keyExtractor.apply(t, trigger)].placeBlock(t, world, x, y, z, trigger); } @Override public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - return array[keyExtractor.apply(t,trigger)].spawnHint(t, world, x, y, z, trigger); + return array[keyExtractor.apply(t, trigger)].spawnHint(t, world, x, y, z, trigger); } }; } @SuppressWarnings("unchecked") - public static IStructureElementDeferred defer(BiFunction keyExtractor, List> array){ + public static IStructureElementDeferred defer(BiFunction keyExtractor, List> array) { return defer(keyExtractor, array.toArray(new IStructureElement[0])); } - public static IStructureElementDeferred defer(Function> toCheck, BiFunction> to){ - if(to==null){ + public static IStructureElementDeferred defer(Function> toCheck, BiFunction> to) { + if (to == null) { throw new IllegalArgumentException(); } return new IStructureElementDeferred() { @@ -708,18 +712,18 @@ public class StructureUtility { @Override public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return to.apply(t,trigger).placeBlock(t, world, x, y, z, trigger); + return to.apply(t, trigger).placeBlock(t, world, x, y, z, trigger); } @Override public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - return to.apply(t,trigger).spawnHint(t, world, x, y, z, trigger); + return to.apply(t, trigger).spawnHint(t, world, x, y, z, trigger); } }; } - public static IStructureElementDeferred defer(Function keyExtractorCheck,BiFunction keyExtractor,Map> map){ - if(keyExtractor==null||map==null){ + public static IStructureElementDeferred defer(Function keyExtractorCheck, BiFunction keyExtractor, Map> map) { + if (keyExtractor == null || map == null) { throw new IllegalArgumentException(); } return new IStructureElementDeferred() { @@ -730,41 +734,41 @@ public class StructureUtility { @Override public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return map.get(keyExtractor.apply(t,trigger)).placeBlock(t, world, x, y, z, trigger); + return map.get(keyExtractor.apply(t, trigger)).placeBlock(t, world, x, y, z, trigger); } @Override public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - return map.get(keyExtractor.apply(t,trigger)).spawnHint(t, world, x, y, z, trigger); + return map.get(keyExtractor.apply(t, trigger)).spawnHint(t, world, x, y, z, trigger); } }; } - public static IStructureElementDeferred defer(Function keyExtractorCheck,BiFunction keyExtractor,Map> map,IStructureElement defaultElem){ - if(keyExtractor==null||map==null){ + public static IStructureElementDeferred defer(Function keyExtractorCheck, BiFunction keyExtractor, Map> map, IStructureElement defaultElem) { + if (keyExtractor == null || map == null) { throw new IllegalArgumentException(); } return new IStructureElementDeferred() { @Override public boolean check(T t, World world, int x, int y, int z) { - return map.getOrDefault(keyExtractorCheck.apply(t),defaultElem).check(t, world, x, y, z); + return map.getOrDefault(keyExtractorCheck.apply(t), defaultElem).check(t, world, x, y, z); } @Override public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return map.getOrDefault(keyExtractor.apply(t,trigger),defaultElem).placeBlock(t, world, x, y, z, trigger); + return map.getOrDefault(keyExtractor.apply(t, trigger), defaultElem).placeBlock(t, world, x, y, z, trigger); } @Override public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - return map.getOrDefault(keyExtractor.apply(t,trigger),defaultElem).spawnHint(t, world, x, y, z, trigger); + return map.getOrDefault(keyExtractor.apply(t, trigger), defaultElem).spawnHint(t, world, x, y, z, trigger); } }; } @SafeVarargs - public static IStructureElementDeferred defer(Function keyExtractorCheck,BiFunction keyExtractor, IStructureElement... array){ - if(keyExtractor==null||array==null){ + public static IStructureElementDeferred defer(Function keyExtractorCheck, BiFunction keyExtractor, IStructureElement... array) { + if (keyExtractor == null || array == null) { throw new IllegalArgumentException(); } return new IStructureElementDeferred() { @@ -775,42 +779,42 @@ public class StructureUtility { @Override public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return array[keyExtractor.apply(t,trigger)].placeBlock(t, world, x, y, z, trigger); + return array[keyExtractor.apply(t, trigger)].placeBlock(t, world, x, y, z, trigger); } @Override public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - return array[keyExtractor.apply(t,trigger)].spawnHint(t, world, x, y, z, trigger); + return array[keyExtractor.apply(t, trigger)].spawnHint(t, world, x, y, z, trigger); } }; } @SuppressWarnings("unchecked") - public static IStructureElementDeferred defer(Function keyExtractorCheck,BiFunction keyExtractor, List> array){ + public static IStructureElementDeferred defer(Function keyExtractorCheck, BiFunction keyExtractor, List> array) { return defer(keyExtractorCheck, keyExtractor, array.toArray(new IStructureElement[0])); } - public static IStructureNavigate step(int a,int b, int c){ - return step(new Vec3Impl(a,b,c)); + public static IStructureNavigate step(int a, int b, int c) { + return step(new Vec3Impl(a, b, c)); } @SuppressWarnings("unchecked") - public static IStructureNavigate step(Vec3Impl step){ - if(step==null || step.get0()<0 || step.get1()<0 || step.get2()<0){ + public static IStructureNavigate step(Vec3Impl step) { + if (step == null || step.get0() < 0 || step.get1() < 0 || step.get2() < 0) { throw new IllegalArgumentException(); } return STEP.computeIfAbsent(step, vec3 -> { - if(vec3.get2()>0){ + if (vec3.get2() > 0) { return stepC(vec3.get0(), vec3.get1(), vec3.get2()); - }else if(vec3.get1()>0){ + } else if (vec3.get1() > 0) { return stepB(vec3.get0(), vec3.get1(), vec3.get2()); - }else { + } else { return stepA(vec3.get0(), vec3.get1(), vec3.get2()); } }); } - private static IStructureNavigate stepA(int a,int b, int c){ + private static IStructureNavigate stepA(int a, int b, int c) { return new IStructureNavigate() { @Override public int getStepA() { @@ -829,7 +833,7 @@ public class StructureUtility { }; } - private static IStructureNavigate stepB(int a,int b, int c){ + private static IStructureNavigate stepB(int a, int b, int c) { return new IStructureNavigate() { @Override public int getStepA() { @@ -853,7 +857,7 @@ public class StructureUtility { }; } - private static IStructureNavigate stepC(int a,int b, int c){ + private static IStructureNavigate stepC(int a, int b, int c) { return new IStructureNavigate() { @Override public int getStepA() { @@ -884,13 +888,14 @@ public class StructureUtility { /** * Used only to get pseudo code in structure writer... + * * @param world * @return */ public static String getPseudoJavaCode(World world, ExtendedFacing extendedFacing, int basePositionX, int basePositionY, int basePositionZ, int basePositionA, int basePositionB, int basePositionC, - int sizeA,int sizeB, int sizeC) { + int sizeA, int sizeB, int sizeC, boolean transpose) { Map> blocks = new TreeMap<>(Comparator.comparing(Block::getUnlocalizedName)); Set> tiles = new TreeSet<>(Comparator.comparing(Class::getCanonicalName)); Set> gtTiles = new TreeSet<>(Comparator.comparing(Class::getCanonicalName)); @@ -934,7 +939,7 @@ public class StructureUtility { Set set = entry.getValue(); for (Integer meta : set) { c = NICE_CHARS.charAt(i++); - if(i>NICE_CHARS.length()){ + if (i > NICE_CHARS.length()) { return "Too complicated for nice chars"; } map.put(block.getUnlocalizedName() + '\0' + meta, c); @@ -945,7 +950,7 @@ public class StructureUtility { builder.append("\nTiles:\n"); for (Class tile : tiles) { c = NICE_CHARS.charAt(i++); - if(i>NICE_CHARS.length()){ + if (i > NICE_CHARS.length()) { return "Too complicated for nice chars"; } map.put(tile.getCanonicalName(), c); @@ -955,7 +960,7 @@ public class StructureUtility { builder.append("\nMeta:\n"); for (Class gtTile : gtTiles) { c = NICE_CHARS.charAt(i++); - if(i>NICE_CHARS.length()){ + if (i > NICE_CHARS.length()) { return "Too complicated for nice chars"; } map.put(gtTile.getCanonicalName(), c); @@ -965,61 +970,97 @@ public class StructureUtility { } builder.append("\nOffsets:\n") .append(basePositionA).append(' ').append(basePositionB).append(' ').append(basePositionC).append('\n'); - builder.append("\nScan:\n") - .append("new String[][]{{\n") - .append(" \""); - - iterate(world, extendedFacing, basePositionX, basePositionY, basePositionZ, - basePositionA, basePositionB, basePositionC, - sizeA, sizeB, sizeC, ((w, x, y, z) -> { - TileEntity tileEntity = w.getTileEntity(x, y, z); - if (tileEntity == null) { - Block block = w.getBlock(x, y, z); - if (block != null && block != Blocks.air) { - builder.append(map.get(block.getUnlocalizedName() + '\0' + world.getBlockMetadata(x, y, z))); - }else { - builder.append(' '); - } - } else { - if (tileEntity instanceof IGregTechTileEntity) { - IMetaTileEntity meta = ((IGregTechTileEntity) tileEntity).getMetaTileEntity(); - if (meta != null) { - builder.append(map.get(meta.getClass().getCanonicalName())); + if (transpose) { + builder.append("\nTransposed Scan:\n") + .append("new String[][]{\n") + .append(" {\""); + iterate(world, extendedFacing, basePositionX, basePositionY, basePositionZ, + basePositionA, basePositionB, basePositionC, true, + sizeA, sizeB, sizeC, ((w, x, y, z) -> { + TileEntity tileEntity = w.getTileEntity(x, y, z); + if (tileEntity == null) { + Block block = w.getBlock(x, y, z); + if (block != null && block != Blocks.air) { + builder.append(map.get(block.getUnlocalizedName() + '\0' + world.getBlockMetadata(x, y, z))); + } else { + builder.append(' '); + } + } else { + if (tileEntity instanceof IGregTechTileEntity) { + IMetaTileEntity meta = ((IGregTechTileEntity) tileEntity).getMetaTileEntity(); + if (meta != null) { + builder.append(map.get(meta.getClass().getCanonicalName())); + } else { + builder.append(map.get(tileEntity.getClass().getCanonicalName())); + } } else { builder.append(map.get(tileEntity.getClass().getCanonicalName())); } + } + }), + () -> builder.append("\",\""), + () -> { + builder.setLength(builder.length() - 2); + builder.append("},\n {\""); + }); + builder.setLength(builder.length() - 8); + builder.append("\n}\n\n"); + } else { + builder.append("\nNormal Scan:\n") + .append("new String[][]{{\n") + .append(" \""); + iterate(world, extendedFacing, basePositionX, basePositionY, basePositionZ, + basePositionA, basePositionB, basePositionC, false, + sizeA, sizeB, sizeC, ((w, x, y, z) -> { + TileEntity tileEntity = w.getTileEntity(x, y, z); + if (tileEntity == null) { + Block block = w.getBlock(x, y, z); + if (block != null && block != Blocks.air) { + builder.append(map.get(block.getUnlocalizedName() + '\0' + world.getBlockMetadata(x, y, z))); + } else { + builder.append(' '); + } } else { - builder.append(map.get(tileEntity.getClass().getCanonicalName())); + if (tileEntity instanceof IGregTechTileEntity) { + IMetaTileEntity meta = ((IGregTechTileEntity) tileEntity).getMetaTileEntity(); + if (meta != null) { + builder.append(map.get(meta.getClass().getCanonicalName())); + } else { + builder.append(map.get(tileEntity.getClass().getCanonicalName())); + } + } else { + builder.append(map.get(tileEntity.getClass().getCanonicalName())); + } } - } - }), - () -> builder.append("\",\n").append(" \""), - () -> { - builder.setLength(builder.length()-7); - builder.append("\n").append("},{\n").append(" \""); - }); - builder.setLength(builder.length()-8); - builder.append("};\n\n"); - return(builder.toString().replaceAll("\"\"","E")); + }), + () -> builder.append("\",\n").append(" \""), + () -> { + builder.setLength(builder.length() - 7); + builder.append("\n").append("},{\n").append(" \""); + }); + builder.setLength(builder.length() - 8); + builder.append("}\n\n"); + } + return (builder.toString().replaceAll("\"\"", "E")); } public static void iterate(World world, ExtendedFacing extendedFacing, - int basePositionX, int basePositionY, int basePositionZ, - int basePositionA, int basePositionB, int basePositionC, - int sizeA,int sizeB, int sizeC, - IBlockPosConsumer iBlockPosConsumer){ - sizeA-=basePositionA; - sizeB-=basePositionB; - sizeC-=basePositionC; + int basePositionX, int basePositionY, int basePositionZ, + int basePositionA, int basePositionB, int basePositionC, + int sizeA, int sizeB, int sizeC, + IBlockPosConsumer iBlockPosConsumer) { + sizeA -= basePositionA; + sizeB -= basePositionB; + sizeC -= basePositionC; int[] abc = new int[3]; int[] xyz = new int[3]; - for (abc[2]=-basePositionC ; abc[2] < sizeC; abc[2]++) { - for (abc[1]=-basePositionB; abc[1] < sizeB; abc[1]++) { - for (abc[0]=-basePositionA ; abc[0] < sizeA; abc[0]++) { + for (abc[2] = -basePositionC; abc[2] < sizeC; abc[2]++) { + for (abc[1] = -basePositionB; abc[1] < sizeB; abc[1]++) { + for (abc[0] = -basePositionA; abc[0] < sizeA; abc[0]++) { extendedFacing.getWorldOffset(abc, xyz); - iBlockPosConsumer.consume(world, xyz[0]+basePositionX,xyz[1]+basePositionY,xyz[2]+basePositionZ); + iBlockPosConsumer.consume(world, xyz[0] + basePositionX, xyz[1] + basePositionY, xyz[2] + basePositionZ); } } @@ -1027,28 +1068,56 @@ public class StructureUtility { } public static void iterate(World world, ExtendedFacing extendedFacing, - int basePositionX, int basePositionY, int basePositionZ, - int basePositionA, int basePositionB, int basePositionC, - int sizeA, int sizeB, int sizeC, - IBlockPosConsumer iBlockPosConsumer, - Runnable nextB, - Runnable nextC){ - sizeA-=basePositionA; - sizeB-=basePositionB; - sizeC-=basePositionC; + int basePositionX, int basePositionY, int basePositionZ, + int basePositionA, int basePositionB, int basePositionC, + boolean transpose, int sizeA, int sizeB, int sizeC, + IBlockPosConsumer iBlockPosConsumer, + Runnable nextB, + Runnable nextC) { + sizeA -= basePositionA; + sizeB -= basePositionB; + sizeC -= basePositionC; int[] abc = new int[3]; int[] xyz = new int[3]; - - for (abc[2]=-basePositionC ; abc[2] < sizeC; abc[2]++) { - for (abc[1]=-basePositionB; abc[1] < sizeB; abc[1]++) { - for (abc[0]=-basePositionA ; abc[0] < sizeA; abc[0]++) { - extendedFacing.getWorldOffset(abc, xyz); - iBlockPosConsumer.consume(world, xyz[0]+basePositionX,xyz[1]+basePositionY,xyz[2]+basePositionZ); + if (transpose) { + for (abc[1] = -basePositionB; abc[1] < sizeB; abc[1]++) { + for (abc[2] = -basePositionC; abc[2] < sizeC; abc[2]++) { + for (abc[0] = -basePositionA; abc[0] < sizeA; abc[0]++) { + extendedFacing.getWorldOffset(abc, xyz); + iBlockPosConsumer.consume(world, xyz[0] + basePositionX, xyz[1] + basePositionY, xyz[2] + basePositionZ); + } + nextB.run(); + } + nextC.run(); + } + } else { + for (abc[2] = -basePositionC; abc[2] < sizeC; abc[2]++) { + for (abc[1] = -basePositionB; abc[1] < sizeB; abc[1]++) { + for (abc[0] = -basePositionA; abc[0] < sizeA; abc[0]++) { + extendedFacing.getWorldOffset(abc, xyz); + iBlockPosConsumer.consume(world, xyz[0] + basePositionX, xyz[1] + basePositionY, xyz[2] + basePositionZ); + } + nextB.run(); } - nextB.run(); + nextC.run(); + } + } + } + + /** + * Transposes shape (swaps B and C axis, can be used to un-transpose transposed shape) + * WARNING! Do not use on old api... + * @param structurePiece shape (transposed shape) + * @return transposed shape (untransposed shape) + */ + public static String[][] transpose(String[][] structurePiece){ + String[][] shape=new String[structurePiece[0].length][structurePiece.length]; + for (int i = 0; i < structurePiece.length; i++) { + for (int j = 0; j < structurePiece[i].length; j++) { + shape[j][i]=structurePiece[i][j]; } - nextC.run(); } + return shape; } } diff --git a/src/main/java/com/github/technus/tectech/thing/item/ConstructableTriggerItem.java b/src/main/java/com/github/technus/tectech/thing/item/ConstructableTriggerItem.java index c24b35f8d5..752f2d1bcc 100644 --- a/src/main/java/com/github/technus/tectech/thing/item/ConstructableTriggerItem.java +++ b/src/main/java/com/github/technus/tectech/thing/item/ConstructableTriggerItem.java @@ -1,23 +1,13 @@ package com.github.technus.tectech.thing.item; -import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.mechanics.alignment.IAlignment; -import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; -import com.github.technus.tectech.mechanics.constructable.IConstructable; -import com.github.technus.tectech.mechanics.constructable.IMultiblockInfoContainer; +import com.github.technus.tectech.mechanics.constructable.ConstructableUtility; import com.github.technus.tectech.util.CommonValues; import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; -import net.minecraftforge.common.util.FakePlayer; -import net.minecraftforge.common.util.ForgeDirection; import java.util.List; @@ -39,97 +29,7 @@ public final class ConstructableTriggerItem extends Item { @Override public boolean onItemUseFirst(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ) { - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if(tTileEntity==null || aPlayer instanceof FakePlayer) { - return aPlayer instanceof EntityPlayerMP; - } - if (aPlayer instanceof EntityPlayerMP) { - //struct gen - if (aPlayer.isSneaking() && aPlayer.capabilities.isCreativeMode) { - if (tTileEntity instanceof IGregTechTileEntity) { - IMetaTileEntity metaTE = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity(); - if (metaTE instanceof IConstructable) { - ((IConstructable) metaTE).construct(aStack, false); - } else if (IMultiblockInfoContainer.contains(metaTE.getClass())) { - IMultiblockInfoContainer iMultiblockInfoContainer =IMultiblockInfoContainer.get(metaTE.getClass()); - if(metaTE instanceof IAlignment){ - iMultiblockInfoContainer.construct(aStack, false, metaTE, ( - (IAlignment) metaTE).getExtendedFacing()); - }else { - iMultiblockInfoContainer.construct(aStack, false, metaTE, - ExtendedFacing.of(ForgeDirection.getOrientation(((IGregTechTileEntity) tTileEntity).getFrontFacing()))); - } - } - } else if (tTileEntity instanceof IConstructable) { - ((IConstructable) tTileEntity).construct(aStack, false); - } else if (IMultiblockInfoContainer.contains(tTileEntity.getClass())) { - IMultiblockInfoContainer iMultiblockInfoContainer =IMultiblockInfoContainer.get(tTileEntity.getClass()); - if(tTileEntity instanceof IAlignment){ - iMultiblockInfoContainer.construct(aStack, false, tTileEntity, - ((IAlignment) tTileEntity).getExtendedFacing()); - }else { - iMultiblockInfoContainer.construct(aStack, false, tTileEntity, - ExtendedFacing.of(ForgeDirection.getOrientation(aSide))); - } - } - } - return true; - }else if (TecTech.proxy.isThePlayer(aPlayer)){//particles and text client side - //if ((!aPlayer.isSneaking() || !aPlayer.capabilities.isCreativeMode)) { - if(tTileEntity instanceof IGregTechTileEntity) { - IMetaTileEntity metaTE = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity(); - if (metaTE instanceof IConstructable) { - ((IConstructable) metaTE).construct(aStack, true); - TecTech.proxy.printInchat(((IConstructable) metaTE).getStructureDescription(aStack)); - return false; - } else if(IMultiblockInfoContainer.contains(metaTE.getClass())){ - IMultiblockInfoContainer iMultiblockInfoContainer =IMultiblockInfoContainer.get(metaTE.getClass()); - if(metaTE instanceof IAlignment){ - iMultiblockInfoContainer.construct(aStack, true, metaTE, - ((IAlignment) metaTE).getExtendedFacing()); - }else { - iMultiblockInfoContainer.construct(aStack, true, metaTE, - ExtendedFacing.of(ForgeDirection.getOrientation(((IGregTechTileEntity) tTileEntity).getFrontFacing()))); - } - TecTech.proxy.printInchat(IMultiblockInfoContainer.get(metaTE.getClass()).getDescription(aStack)); - return false; - } - } else if(tTileEntity instanceof IConstructable){ - ((IConstructable) tTileEntity).construct(aStack,true); - TecTech.proxy.printInchat(((IConstructable) tTileEntity).getStructureDescription(aStack)); - return false; - } else if(IMultiblockInfoContainer.contains(tTileEntity.getClass())){ - IMultiblockInfoContainer iMultiblockInfoContainer = IMultiblockInfoContainer.get(tTileEntity.getClass()); - if(tTileEntity instanceof IAlignment){ - iMultiblockInfoContainer.construct(aStack, true, tTileEntity, - ((IAlignment) tTileEntity).getExtendedFacing()); - }else { - iMultiblockInfoContainer.construct(aStack, true, tTileEntity, - ExtendedFacing.of(ForgeDirection.getOrientation(aSide))); - } - TecTech.proxy.printInchat(IMultiblockInfoContainer.get(tTileEntity.getClass()).getDescription(aStack)); - return false; - } - //} else { - // if(tTileEntity instanceof IGregTechTileEntity) { - // IMetaTileEntity metaTE = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity(); - // if (metaTE instanceof IConstructable) { - // TecTech.proxy.printInchat(((IConstructable) metaTE).getStructureDescription(aStack.stackSize)); - // return false; - // } else if(multiblockMap.containsKey(metaTE.getClass().getCanonicalName())){ - // TecTech.proxy.printInchat(multiblockMap.get(metaTE.getClass().getCanonicalName()).getDescription(aStack.stackSize)); - // return false; - // } - // } else if(tTileEntity instanceof IConstructable){ - // TecTech.proxy.printInchat(((IConstructable) tTileEntity).getStructureDescription(aStack.stackSize)); - // return false; - // } else if(multiblockMap.containsKey(tTileEntity.getClass().getCanonicalName())){ - // TecTech.proxy.printInchat(multiblockMap.get(tTileEntity.getClass().getCanonicalName()).getDescription(aStack.stackSize)); - // return false; - // } - //} - } - return false; + return ConstructableUtility.handle(aStack, aPlayer, aWorld, aX, aY, aZ, aSide); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/item/EuMeterGT.java b/src/main/java/com/github/technus/tectech/thing/item/EuMeterGT.java index 8e3d770da1..f4531a248b 100644 --- a/src/main/java/com/github/technus/tectech/thing/item/EuMeterGT.java +++ b/src/main/java/com/github/technus/tectech/thing/item/EuMeterGT.java @@ -73,7 +73,7 @@ public class EuMeterGT extends Item { } } if (!(aPlayer instanceof EntityPlayerMP)) { - GT_Utility.doSoundAtClient(Reference.MODID + ":fx_scan", 1, 1.0F, (double) aX, (double) aY, (double) aZ); + GT_Utility.doSoundAtClient(Reference.MODID + ":fx_scan", 1, 1.0F, aX, aY, aZ); } return false; } diff --git a/src/main/java/com/github/technus/tectech/thing/item/FrontRotationTriggerItem.java b/src/main/java/com/github/technus/tectech/thing/item/FrontRotationTriggerItem.java index 5edc238a91..d71abb34b7 100644 --- a/src/main/java/com/github/technus/tectech/thing/item/FrontRotationTriggerItem.java +++ b/src/main/java/com/github/technus/tectech/thing/item/FrontRotationTriggerItem.java @@ -1,19 +1,13 @@ package com.github.technus.tectech.thing.item; -import com.github.technus.tectech.mechanics.alignment.IAlignment; -import com.github.technus.tectech.mechanics.alignment.IAlignmentProvider; +import com.github.technus.tectech.mechanics.alignment.AlignmentUtility; import com.github.technus.tectech.util.CommonValues; import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; -import net.minecraftforge.common.util.FakePlayer; import java.util.List; @@ -36,33 +30,7 @@ public final class FrontRotationTriggerItem extends Item { @Override public boolean onItemUseFirst(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ) { - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if(tTileEntity==null || aPlayer instanceof FakePlayer) { - return aPlayer instanceof EntityPlayerMP; - } - if (aPlayer instanceof EntityPlayerMP) { - if (tTileEntity instanceof IGregTechTileEntity) { - IMetaTileEntity metaTE = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity(); - if (metaTE instanceof IAlignmentProvider) { - IAlignment alignment = ((IAlignmentProvider) metaTE).getAlignment(); - if(aPlayer.isSneaking()){ - alignment.toolSetFlip(null); - }else { - alignment.toolSetRotation(null); - } - return true; - } - } else if (tTileEntity instanceof IAlignmentProvider) { - IAlignment alignment = ((IAlignmentProvider) tTileEntity).getAlignment(); - if(aPlayer.isSneaking()){ - alignment.toolSetFlip(null); - }else { - alignment.toolSetRotation(null); - } - return true; - } - } - return false; + return AlignmentUtility.handle(aPlayer,aWorld,aX,aY,aZ); } @Override -- cgit From ec623a00822141f002149f5f9453295288967119 Mon Sep 17 00:00:00 2001 From: Tec Date: Fri, 1 May 2020 10:47:43 +0200 Subject: Update struct writer --- .../single/GT_MetaTileEntity_DebugStructureWriter.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugStructureWriter.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugStructureWriter.java index 42f25ddfde..3b194c516b 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugStructureWriter.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugStructureWriter.java @@ -119,13 +119,26 @@ public class GT_MetaTileEntity_DebugStructureWriter extends GT_MetaTileEntity_Ti ExtendedFacing.of(ForgeDirection.getOrientation(aBaseMetaTileEntity.getFrontFacing())), aBaseMetaTileEntity.getXCoord(), aBaseMetaTileEntity.getYCoord(), aBaseMetaTileEntity.getZCoord(), numbers[0], numbers[1], numbers[2], - numbers[3], numbers[4], numbers[5]); + numbers[3], numbers[4], numbers[5],false); TecTech.LOGGER.info(pseudoJavaCode); result = pseudoJavaCode.split("\\n"); aBaseMetaTileEntity.disableWorking(); } } + @Override + public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) { + IGregTechTileEntity aBaseMetaTileEntity = getBaseMetaTileEntity(); + String pseudoJavaCode = StructureUtility.getPseudoJavaCode(aBaseMetaTileEntity.getWorld(), + ExtendedFacing.of(ForgeDirection.getOrientation(aBaseMetaTileEntity.getFrontFacing())), + aBaseMetaTileEntity.getXCoord(), aBaseMetaTileEntity.getYCoord(), aBaseMetaTileEntity.getZCoord(), + numbers[0], numbers[1], numbers[2], + numbers[3], numbers[4], numbers[5],true); + TecTech.LOGGER.info(pseudoJavaCode); + result = pseudoJavaCode.split("\\n"); + aBaseMetaTileEntity.disableWorking(); + } + @Override public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { if (aBaseMetaTileEntity.isClientSide()) { -- cgit From ed992c9ce5077a4ccf56d554eaba73e038258d9e Mon Sep 17 00:00:00 2001 From: Tec Date: Fri, 1 May 2020 12:15:47 +0200 Subject: Tweak the api some more, fix bugs --- .../mechanics/structure/StructureDefinition.java | 33 +--- .../mechanics/structure/StructureUtility.java | 2 +- .../multi/GT_MetaTileEntity_EM_bhg.java | 194 +++++++++++---------- .../multi/GT_MetaTileEntity_EM_collider.java | 6 +- .../multi/GT_MetaTileEntity_EM_transformer.java | 2 +- 5 files changed, 109 insertions(+), 128 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java index 29114647ac..9a1e94d98a 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java @@ -1,6 +1,5 @@ package com.github.technus.tectech.mechanics.structure; -import com.github.technus.tectech.TecTech; import com.github.technus.tectech.util.Vec3Impl; import java.util.*; @@ -62,55 +61,35 @@ public class StructureDefinition implements IStructureDefinition { StringBuilder builder = new StringBuilder(); if (structurePiece.length > 0) { for (String[] strings : structurePiece) { - - if (strings.length > 0) { for (String string : strings) { - - for (int i = 0; i < string.length(); i++) { char ch = string.charAt(i); if(ch<' '){ - for (int c = 0; c < ch; c++) { + for (int b = 0; b < ch; b++) { builder.append(B); } }else if(ch>'@'){ - for (int c = '@'; c < ch; c++) { + for (int a = '@'; a < ch; a++) { builder.append(A); } + }else if(ch=='.'){ + builder.append(A); }else{ builder.append(ch); } } - - builder.append(B); } builder.setLength(builder.length() - 1); } - - builder.append(C); } builder.setLength(builder.length() - 1); } - if(DEBUG_MODE){ - Exception exception = new Exception(); - exception.getStackTrace(); - - TecTech.LOGGER.info("Structure shape normal:"); - - - TecTech.LOGGER.info("Structure shape transposed:"); - - } int a=0,b=0,c=0; for (int i = 0; i < builder.length(); i++) { char ch = builder.charAt(i); - if(ch =='.'){ - builder.setCharAt(i,A); - ch=A; - } if(ch==A){ a++; }else if(ch==B){ @@ -151,7 +130,7 @@ public class StructureDefinition implements IStructureDefinition { * Adds shape * +- is air/no air checks * space bar is skip - * . is also skip (but marks controller position, optional and logically it is a space...) + * ~ is also skip (but marks controller position, optional and logically it is a space...) * rest needs to be defined * * next char is next block(a) @@ -180,7 +159,7 @@ public class StructureDefinition implements IStructureDefinition { int a=0,b=0,c=0; for (int i = 0; i < builder.length(); i++) { char ch = builder.charAt(i); - if(ch ==' ' || ch =='.'){ + if(ch ==' ' || ch =='~'){ builder.setCharAt(i,A); ch=A; } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java index 868bfec181..8e2cedd6e2 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java @@ -24,7 +24,7 @@ import java.util.function.Supplier; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sHintCasingsTT; public class StructureUtility { - private static final String NICE_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789`~!@#$%^&*()_=|[]{};:'<>,./?"; + private static final String NICE_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz=|!@#$%&()[]{};:<>/?_,.*^'`"; @SuppressWarnings("rawtypes") private static final Map STEP = new HashMap<>(); @SuppressWarnings("rawtypes") diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java index 63b45500ed..24fbb9e423 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java @@ -1,24 +1,24 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; -import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; -import com.github.technus.tectech.mechanics.structure.Structure; -import com.github.technus.tectech.util.CommonValues; -import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.mechanics.constructable.IConstructable; +import com.github.technus.tectech.mechanics.structure.IStructureDefinition; +import com.github.technus.tectech.mechanics.structure.StructureDefinition; +import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; +import com.github.technus.tectech.util.CommonValues; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import net.minecraft.block.Block; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; -import static com.github.technus.tectech.mechanics.structure.Structure.adders; +import static com.github.technus.tectech.mechanics.structure.StructureUtility.ofBlock; +import static com.github.technus.tectech.mechanics.structure.StructureUtility.ofHatchAdderOptional; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -48,49 +48,95 @@ public class GT_MetaTileEntity_EM_bhg extends GT_MetaTileEntity_MultiblockBase_E //per dim disable thingies //region structure actual - private static final String[][] shape = new String[][]{ - {"\u000B", "M0000000", "L00 00", "L0 0", "L0 !!! 0", "L0 !.! 0", "L0 !!! 0", "L0 0", "L00 00", "M0000000",}, - {"\u0008", "O0A0", "O0A0", "O0A0", "O0A0", "N11111", "M1101011", "I000010010010000", "M1111111", "I000010010010000", "M1101011", "N11111", "O0A0", "O0A0", "O0A0", "O0A0",}, - {"\u0006", "O0A0", "O0A0", "O0A0", "P1", "P1", "M1111111", "L11E11", "L1B222B1", "G000B1A23332A1B000", "J111A23332A111", "G000B1A23332A1B000", "L1B222B1", "L11E11", "M1111111", "P1", "P1", "O0A0", "O0A0", "O0A0",}, - {"\u0005", "O0A0", "O0A0", "P1", "P1", "\u0004", "F00Q00", "H11M11", "F00Q00", "\u0004", "P1", "P1", "O0A0", "O0A0",}, - {"\u0004", "O0A0", "N00000", "P1", "P4", "P4", "\u0003", "F0S0", "E00S00", "F0144M4410", "E00S00", "F0S0", "\u0003", "P4", "P4", "P1", "N00000", "O0A0",}, - {"\u0003", "O0A0", "O0A0", "P1", "M2224222", "\u0004", "G2Q2", "G2Q2", "D00A2Q2A00", "F14Q41", "D00A2Q2A00", "G2Q2", "G2Q2", "\u0004", "M2224222", "P1", "O0A0", "O0A0",}, - {"\u0002", "O0A0", "N00000", "P1", "P4", "\u0006", "D0W0", "C00W00", "D014S410", "C00W00", "D0W0", "\u0006", "P4", "P1", "N00000", "O0A0",}, - {"\u0001", "O0A0", "O0A0", "P1", "M2224222", "\u0006", "E2U2", "E2U2", "B00A2U2A00", "D14U41", "B00A2U2A00", "E2U2", "E2U2", "\u0006", "M2224222", "P1", "O0A0", "O0A0",}, - {"\u0001", "O0A0", "P1", "P4", "\u0009", "B0[0", "C14W41", "B0[0", "\u0009", "P4", "P1", "O0A0",}, - {E, "O0A0", "O0A0", "P1", "P4", "\u0009", "A00[00", "C14W41", "A00[00", "\u0009", "P4", "P1", "O0A0", "O0A0",}, - {E, "O0A0", "P1", "\u000B", "A0]0", "B1[1", "A0]0", "\u000B", "P1", "O0A0",}, - {E, "O0A0", "P1", "\u000B", "A0]0", "B1[1", "A0]0", "\u000B", "P1", "O0A0",}, - {"O0A0", "O0A0", "M1111111", "\u0009", "B1[1", "B1[1", "001[100", "B1[1", "001[100", "B1[1", "B1[1", "\u0009", "M1111111", "O0A0", "O0A0",}, - {"O0A0", "N11111", "L11E11", "\u0001", "G2Q2", E, "E2U2", "\u0003", "B1[1", "B1[1", "A1]1", "01]10", "A1]1", "01]10", "A1]1", "B1[1", "B1[1", "\u0003", "E2U2", E, "G2Q2", "\u0001", "L11E11", "N11111", "O0A0",}, - {"O0A0", "M1101011", "L1B222B1", E, "F0S0", "G2Q2", "D0W0", "E2U2", "\u0003", "B1[1", "A1]1", "A1]1", "002[200", "A12[21", "002[200", "A1]1", "A1]1", "B1[1", "\u0003", "E2U2", "D0W0", "G2Q2", "F0S0", E, "L1B222B1", "M1101011", "O0A0",}, - {"L000000000", "I000010010010000", "G000B1A23332A1B000", "F00Q00", "E00S00", "D00A2Q2A00", "C00W00", "B00A2U2A00", "B0[0", "A00[00", "A0]0", "A0]0", "001[100", "01]10", "002[200", "003[300", "013[310", "003[300", "002[200", "01]10", "001[100", "A0]0", "A0]0", "A00[00", "B0[0", "B00A2U2A00", "C00W00", "D00A2Q2A00", "E00S00", "F00Q00", "G000B1A23332A1B000", "I000010010010000", "L000000000",}, - {"O0A0", "M1111111", "J111A23332A111", "H11M11", "F0144M4410", "F14Q41", "D014S410", "D14U41", "C14W41", "C14W41", "B1[1", "B1[1", "B1[1", "A1]1", "A12[21", "013[310", "A13[31", "013[310", "A12[21", "A1]1", "B1[1", "B1[1", "B1[1", "C14W41", "C14W41", "D14U41", "D014S410", "F14Q41", "F0144M4410", "H11M11", "J111A23332A111", "M1111111", "O0A0",}, - {"L000000000", "I000010010010000", "G000B1A23332A1B000", "F00Q00", "E00S00", "D00A2Q2A00", "C00W00", "B00A2U2A00", "B0[0", "A00[00", "A0]0", "A0]0", "001[100", "01]10", "002[200", "003[300", "013[310", "003[300", "002[200", "01]10", "001[100", "A0]0", "A0]0", "A00[00", "B0[0", "B00A2U2A00", "C00W00", "D00A2Q2A00", "E00S00", "F00Q00", "G000B1A23332A1B000", "I000010010010000", "L000000000",}, - {"O0A0", "M1101011", "L1B222B1", E, "F0S0", "G2Q2", "D0W0", "E2U2", "\u0003", "B1[1", "A1]1", "A1]1", "002[200", "A12[21", "002[200", "A1]1", "A1]1", "B1[1", "\u0003", "E2U2", "D0W0", "G2Q2", "F0S0", E, "L1B222B1", "M1101011", "O0A0",}, - {"O0A0", "N11111", "L11E11", "\u0001", "G2Q2", E, "E2U2", "\u0003", "B1[1", "B1[1", "A1]1", "01]10", "A1]1", "01]10", "A1]1", "B1[1", "B1[1", "\u0003", "E2U2", E, "G2Q2", "\u0001", "L11E11", "N11111", "O0A0",}, - {"O0A0", "O0A0", "M1111111", "\u0009", "B1[1", "B1[1", "001[100", "B1[1", "001[100", "B1[1", "B1[1", "\u0009", "M1111111", "O0A0", "O0A0",}, - {E, "O0A0", "P1", "\u000B", "A0]0", "B1[1", "A0]0", "\u000B", "P1", "O0A0",}, - {E, "O0A0", "P1", "\u000B", "A0]0", "B1[1", "A0]0", "\u000B", "P1", "O0A0",}, - {E, "O0A0", "O0A0", "P1", "P4", "\u0009", "A00[00", "C14W41", "A00[00", "\u0009", "P4", "P1", "O0A0", "O0A0",}, - {"\u0001", "O0A0", "P1", "P4", "\u0009", "B0[0", "C14W41", "B0[0", "\u0009", "P4", "P1", "O0A0",}, - {"\u0001", "O0A0", "O0A0", "P1", "M2224222", "\u0006", "E2U2", "E2U2", "B00A2U2A00", "D14U41", "B00A2U2A00", "E2U2", "E2U2", "\u0006", "M2224222", "P1", "O0A0", "O0A0",}, - {"\u0002", "O0A0", "N00000", "P1", "P4", "\u0006", "D0W0", "C00W00", "D014S410", "C00W00", "D0W0", "\u0006", "P4", "P1", "N00000", "O0A0",}, - {"\u0003", "O0A0", "O0A0", "P1", "M2224222", "\u0004", "G2Q2", "G2Q2", "D00A2Q2A00", "F14Q41", "D00A2Q2A00", "G2Q2", "G2Q2", "\u0004", "M2224222", "P1", "O0A0", "O0A0",}, - {"\u0004", "O0A0", "N00000", "P1", "P4", "P4", "\u0003", "F0S0", "E00S00", "F0144M4410", "E00S00", "F0S0", "\u0003", "P4", "P4", "P1", "N00000", "O0A0",}, - {"\u0005", "O0A0", "O0A0", "P1", "P1", "\u0004", "F00Q00", "H11M11", "F00Q00", "\u0004", "P1", "P1", "O0A0", "O0A0",}, - {"\u0006", "O0A0", "O0A0", "O0A0", "P1", "P1", "M1111111", "L11E11", "L1B222B1", "G000B1A23332A1B000", "J111A23332A111", "G000B1A23332A1B000", "L1B222B1", "L11E11", "M1111111", "P1", "P1", "O0A0", "O0A0", "O0A0",}, - {"\u0008", "O0A0", "O0A0", "O0A0", "O0A0", "N11111", "M1101011", "I000010010010000", "M1111111", "I000010010010000", "M1101011", "N11111", "O0A0", "O0A0", "O0A0", "O0A0",}, - {"\u000B", "O0A0", "O0A0", "O0A0", "L000000000", "O0A0", "L000000000", "O0A0", "O0A0", "O0A0",}, - }; - private static final Block[] blockType = new Block[]{sBlockCasingsTT, sBlockCasingsTT, sBlockCasingsTT, sBlockCasingsTT, sBlockCasingsTT}; - private static final byte[] blockMeta = new byte[]{12, 13, 14, 10, 11}; - private static final IHatchAdder[] addingMethods = adders( - GT_MetaTileEntity_EM_bhg::addClassicToMachineList, - GT_MetaTileEntity_EM_bhg::addElementalToMachineList); - private static final short[] casingTextures = new short[]{textureOffset, textureOffset + 4}; - private static final Block[] blockTypeFallback = new Block[]{sBlockCasingsTT, sBlockCasingsTT}; - private static final byte[] blockMetaFallback = new byte[]{0, 4}; + private static final IStructureDefinition STRUCTURE_DEFINITION= StructureDefinition + .builder() + .addShapeOldApi("t1",new String[][]{ + {"\u000B", "M0000000", "L00 00", "L0 0", "L0 !!! 0", "L0 !.! 0", "L0 !!! 0", "L0 0", "L00 00", "M0000000",}, + {"\u0008", "O0A0", "O0A0", "O0A0", "O0A0", "N11111", "M1101011", "I000010010010000", "M1111111", "I000010010010000", "M1101011", "N11111", "O0A0", "O0A0", "O0A0", "O0A0",}, + {"\u0006", "O0A0", "O0A0", "O0A0", "P1", "P1", "M1111111", "L11E11", "L1B222B1", "G000B1A23332A1B000", "J111A23332A111", "G000B1A23332A1B000", "L1B222B1", "L11E11", "M1111111", "P1", "P1", "O0A0", "O0A0", "O0A0",}, + {"\u0005", "O0A0", "O0A0", "P1", "P1", "\u0004", "F00Q00", "H11M11", "F00Q00", "\u0004", "P1", "P1", "O0A0", "O0A0",}, + {"\u0004", "O0A0", "N00000", "P1", "P4", "P4", "\u0003", "F0S0", "E00S00", "F0144M4410", "E00S00", "F0S0", "\u0003", "P4", "P4", "P1", "N00000", "O0A0",}, + {"\u0003", "O0A0", "O0A0", "P1", "M2224222", "\u0004", "G2Q2", "G2Q2", "D00A2Q2A00", "F14Q41", "D00A2Q2A00", "G2Q2", "G2Q2", "\u0004", "M2224222", "P1", "O0A0", "O0A0",}, + {"\u0002", "O0A0", "N00000", "P1", "P4", "\u0006", "D0W0", "C00W00", "D014S410", "C00W00", "D0W0", "\u0006", "P4", "P1", "N00000", "O0A0",}, + {"\u0001", "O0A0", "O0A0", "P1", "M2224222", "\u0006", "E2U2", "E2U2", "B00A2U2A00", "D14U41", "B00A2U2A00", "E2U2", "E2U2", "\u0006", "M2224222", "P1", "O0A0", "O0A0",}, + {"\u0001", "O0A0", "P1", "P4", "\u0009", "B0[0", "C14W41", "B0[0", "\u0009", "P4", "P1", "O0A0",}, + {E, "O0A0", "O0A0", "P1", "P4", "\u0009", "A00[00", "C14W41", "A00[00", "\u0009", "P4", "P1", "O0A0", "O0A0",}, + {E, "O0A0", "P1", "\u000B", "A0]0", "B1[1", "A0]0", "\u000B", "P1", "O0A0",}, + {E, "O0A0", "P1", "\u000B", "A0]0", "B1[1", "A0]0", "\u000B", "P1", "O0A0",}, + {"O0A0", "O0A0", "M1111111", "\u0009", "B1[1", "B1[1", "001[100", "B1[1", "001[100", "B1[1", "B1[1", "\u0009", "M1111111", "O0A0", "O0A0",}, + {"O0A0", "N11111", "L11E11", "\u0001", "G2Q2", E, "E2U2", "\u0003", "B1[1", "B1[1", "A1]1", "01]10", "A1]1", "01]10", "A1]1", "B1[1", "B1[1", "\u0003", "E2U2", E, "G2Q2", "\u0001", "L11E11", "N11111", "O0A0",}, + {"O0A0", "M1101011", "L1B222B1", E, "F0S0", "G2Q2", "D0W0", "E2U2", "\u0003", "B1[1", "A1]1", "A1]1", "002[200", "A12[21", "002[200", "A1]1", "A1]1", "B1[1", "\u0003", "E2U2", "D0W0", "G2Q2", "F0S0", E, "L1B222B1", "M1101011", "O0A0",}, + {"L000000000", "I000010010010000", "G000B1A23332A1B000", "F00Q00", "E00S00", "D00A2Q2A00", "C00W00", "B00A2U2A00", "B0[0", "A00[00", "A0]0", "A0]0", "001[100", "01]10", "002[200", "003[300", "013[310", "003[300", "002[200", "01]10", "001[100", "A0]0", "A0]0", "A00[00", "B0[0", "B00A2U2A00", "C00W00", "D00A2Q2A00", "E00S00", "F00Q00", "G000B1A23332A1B000", "I000010010010000", "L000000000",}, + {"O0A0", "M1111111", "J111A23332A111", "H11M11", "F0144M4410", "F14Q41", "D014S410", "D14U41", "C14W41", "C14W41", "B1[1", "B1[1", "B1[1", "A1]1", "A12[21", "013[310", "A13[31", "013[310", "A12[21", "A1]1", "B1[1", "B1[1", "B1[1", "C14W41", "C14W41", "D14U41", "D014S410", "F14Q41", "F0144M4410", "H11M11", "J111A23332A111", "M1111111", "O0A0",}, + {"L000000000", "I000010010010000", "G000B1A23332A1B000", "F00Q00", "E00S00", "D00A2Q2A00", "C00W00", "B00A2U2A00", "B0[0", "A00[00", "A0]0", "A0]0", "001[100", "01]10", "002[200", "003[300", "013[310", "003[300", "002[200", "01]10", "001[100", "A0]0", "A0]0", "A00[00", "B0[0", "B00A2U2A00", "C00W00", "D00A2Q2A00", "E00S00", "F00Q00", "G000B1A23332A1B000", "I000010010010000", "L000000000",}, + {"O0A0", "M1101011", "L1B222B1", E, "F0S0", "G2Q2", "D0W0", "E2U2", "\u0003", "B1[1", "A1]1", "A1]1", "002[200", "A12[21", "002[200", "A1]1", "A1]1", "B1[1", "\u0003", "E2U2", "D0W0", "G2Q2", "F0S0", E, "L1B222B1", "M1101011", "O0A0",}, + {"O0A0", "N11111", "L11E11", "\u0001", "G2Q2", E, "E2U2", "\u0003", "B1[1", "B1[1", "A1]1", "01]10", "A1]1", "01]10", "A1]1", "B1[1", "B1[1", "\u0003", "E2U2", E, "G2Q2", "\u0001", "L11E11", "N11111", "O0A0",}, + {"O0A0", "O0A0", "M1111111", "\u0009", "B1[1", "B1[1", "001[100", "B1[1", "001[100", "B1[1", "B1[1", "\u0009", "M1111111", "O0A0", "O0A0",}, + {E, "O0A0", "P1", "\u000B", "A0]0", "B1[1", "A0]0", "\u000B", "P1", "O0A0",}, + {E, "O0A0", "P1", "\u000B", "A0]0", "B1[1", "A0]0", "\u000B", "P1", "O0A0",}, + {E, "O0A0", "O0A0", "P1", "P4", "\u0009", "A00[00", "C14W41", "A00[00", "\u0009", "P4", "P1", "O0A0", "O0A0",}, + {"\u0001", "O0A0", "P1", "P4", "\u0009", "B0[0", "C14W41", "B0[0", "\u0009", "P4", "P1", "O0A0",}, + {"\u0001", "O0A0", "O0A0", "P1", "M2224222", "\u0006", "E2U2", "E2U2", "B00A2U2A00", "D14U41", "B00A2U2A00", "E2U2", "E2U2", "\u0006", "M2224222", "P1", "O0A0", "O0A0",}, + {"\u0002", "O0A0", "N00000", "P1", "P4", "\u0006", "D0W0", "C00W00", "D014S410", "C00W00", "D0W0", "\u0006", "P4", "P1", "N00000", "O0A0",}, + {"\u0003", "O0A0", "O0A0", "P1", "M2224222", "\u0004", "G2Q2", "G2Q2", "D00A2Q2A00", "F14Q41", "D00A2Q2A00", "G2Q2", "G2Q2", "\u0004", "M2224222", "P1", "O0A0", "O0A0",}, + {"\u0004", "O0A0", "N00000", "P1", "P4", "P4", "\u0003", "F0S0", "E00S00", "F0144M4410", "E00S00", "F0S0", "\u0003", "P4", "P4", "P1", "N00000", "O0A0",}, + {"\u0005", "O0A0", "O0A0", "P1", "P1", "\u0004", "F00Q00", "H11M11", "F00Q00", "\u0004", "P1", "P1", "O0A0", "O0A0",}, + {"\u0006", "O0A0", "O0A0", "O0A0", "P1", "P1", "M1111111", "L11E11", "L1B222B1", "G000B1A23332A1B000", "J111A23332A111", "G000B1A23332A1B000", "L1B222B1", "L11E11", "M1111111", "P1", "P1", "O0A0", "O0A0", "O0A0",}, + {"\u0008", "O0A0", "O0A0", "O0A0", "O0A0", "N11111", "M1101011", "I000010010010000", "M1111111", "I000010010010000", "M1101011", "N11111", "O0A0", "O0A0", "O0A0", "O0A0",}, + {"\u000B", "O0A0", "O0A0", "O0A0", "L000000000", "O0A0", "L000000000", "O0A0", "O0A0", "O0A0",}, + }) + .addShapeOldApi("t2",new String[][]{ + {"\u000B", "M0000000", "L00 00", "L0 0", "L0 !!! 0", "L0 !.! 0", "L0 !!! 0", "L0 0", "L00 00", "M0000000",}, + {"\u0008", "O0A0", "M550A055", "L5550A0555", "K55550A05555", "J5555111115555", "J5551101011555", "I000010010010000", "M1111111", "I000010010010000", "J5551101011555", "J5555111115555", "K55550A05555", "L5550A0555", "M550A055", "O0A0",}, + {"\u0006", "O0A0", "M550A055", "K55550A05555", "J555C1C555", "I555D1D555", "I55B1111111B55", "H55B11E11B55", "H55B1B222B1B55", "G000B1A23332A1B000", "J111A23332A111", "G000B1A23332A1B000", "H55B1B222B1B55", "H55B11E11B55", "I55B1111111B55", "I555D1D555", "J555C1C555", "K55550A05555", "M550A055", "O0A0",}, + {"\u0005", "O0A0", "L5550A0555", "J555C1C555", "I55E1E55", "H55M55", "H5O5", "G55O55", "G5Q5", "G5Q5", "F00Q00", "H11M11", "F00Q00", "G5Q5", "G5Q5", "G55O55", "H5O5", "H55M55", "I55E1E55", "J555C1C555", "L5550A0555", "O0A0",}, + {"\u0004", "O0A0", "K55500000555", "I555D1D555", "H55F4F55", "G55G4G55", "G5Q5", "F55Q55", "F5S5", "F5S5", "F0S0", "E00S00", "F0144M4410", "E00S00", "F0S0", "F5S5", "F5S5", "F55Q55", "G5Q5", "G55G4G55", "H55F4F55", "I555D1D555", "K55500000555", "O0A0",}, + {"\u0003", "O0A0", "J555550A055555", "H555E1E555", "G55D2224222D55", "F55Q55", "F5S5", "E55S55", "E5U5", "E5U5", "E5A2Q2A5", "E5A2Q2A5", "D00A2Q2A00", "F14Q41", "D00A2Q2A00", "E5A2Q2A5", "E5A2Q2A5", "E5U5", "E5U5", "E55S55", "F5S5", "F55Q55", "G55D2224222D55", "H555E1E555", "J555550A055555", "O0A0",}, + {"\u0002", "O0A0", "K55500000555", "H555E1E555", "G55G4G55", "F5S5", "E55S55", "E5U5", "E5U5", "D5W5", "D5W5", "D5W5", "D0W0", "C00W00", "D014S410", "C00W00", "D0W0", "D5W5", "D5W5", "D5W5", "E5U5", "E5U5", "E55S55", "F5S5", "G55G4G55", "H555E1E555", "K55500000555", "O0A0",}, + {"\u0001", "O0A0", "L5550A0555", "I555D1D555", "G55D2224222D55", "F5S5", "E5U5", "E5U5", "D5W5", "D5W5", "D5W5", "C5Y5", "C5A2U2A5", "C5A2U2A5", "B00A2U2A00", "D14U41", "B00A2U2A00", "C5A2U2A5", "C5A2U2A5", "C5Y5", "D5W5", "D5W5", "D5W5", "E5U5", "E5U5", "F5S5", "G55D2224222D55", "I555D1D555", "L5550A0555", "O0A0",}, + {"\u0001", "M550A055", "J555C1C555", "H55F4F55", "F55Q55", "E55S55", "E5U5", "D5W5", "D5W5", "C5Y5", "C5Y5", "C5Y5", "B5[5", "B5[5", "B0[0", "C14W41", "B0[0", "B5[5", "B5[5", "C5Y5", "C5Y5", "C5Y5", "D5W5", "D5W5", "E5U5", "E55S55", "F55Q55", "H55F4F55", "J555C1C555", "M550A055",}, + {E, "O0A0", "K55550A05555", "I55E1E55", "G55G4G55", "F5S5", "E5U5", "D5W5", "D5W5", "C5Y5", "C5Y5", "B5[5", "B5[5", "B5[5", "B5[5", "A00[00", "C14W41", "A00[00", "B5[5", "B5[5", "B5[5", "B5[5", "C5Y5", "C5Y5", "D5W5", "D5W5", "E5U5", "F5S5", "G55G4G55", "I55E1E55", "K55550A05555", "O0A0",}, + {E, "M550A055", "J555C1C555", "H55M55", "G5Q5", "E55S55", "E5U5", "D5W5", "C5Y5", "C5Y5", "B5[5", "B5[5", "B5[5", "A5]5", "A5]5", "A0]0", "B1[1", "A0]0", "A5]5", "A5]5", "B5[5", "B5[5", "B5[5", "C5Y5", "C5Y5", "D5W5", "E5U5", "E55S55", "G5Q5", "H55M55", "J555C1C555", "M550A055",}, + {E, "L5550A0555", "I555D1D555", "H5O5", "F55Q55", "E5U5", "D5W5", "D5W5", "C5Y5", "B5[5", "B5[5", "B5[5", "A5]5", "A5]5", "A5]5", "A0]0", "B1[1", "A0]0", "A5]5", "A5]5", "A5]5", "B5[5", "B5[5", "B5[5", "C5Y5", "D5W5", "D5W5", "E5U5", "F55Q55", "H5O5", "I555D1D555", "L5550A0555",}, + {"O0A0", "K55550A05555", "I55B1111111B55", "G55O55", "F5S5", "E5U5", "D5W5", "C5Y5", "C5Y5", "B5[5", "B5[5", "A5]5", "A5]5", "A51[15", "A51[15", "001[100", "B1[1", "001[100", "A51[15", "A51[15", "A5]5", "A5]5", "B5[5", "B5[5", "C5Y5", "C5Y5", "D5W5", "E5U5", "F5S5", "G55O55", "I55B1111111B55", "K55550A05555", "O0A0",}, + {"O0A0", "J5555111115555", "H55B11E11B55", "G5Q5", "F5S5", "E5A2Q2A5", "D5W5", "C5A2U2A5", "B5[5", "B5[5", "A5]5", "A5]5", "A51[15", "A51[15", "A1]1", "01]10", "A1]1", "01]10", "A1]1", "A51[15", "A51[15", "A5]5", "A5]5", "B5[5", "B5[5", "C5A2U2A5", "D5W5", "E5A2Q2A5", "F5S5", "G5Q5", "H55B11E11B55", "J5555111115555", "O0A0",}, + {"O0A0", "J5551101011555", "H55B1B222B1B55", "G5Q5", "F0S0", "E5A2Q2A5", "D0W0", "C5A2U2A5", "B5[5", "B5[5", "A5]5", "A5]5", "A51[15", "A1]1", "A1]1", "002[200", "A12[21", "002[200", "A1]1", "A1]1", "A51[15", "A5]5", "A5]5", "B5[5", "B5[5", "C5A2U2A5", "D0W0", "E5A2Q2A5", "F0S0", "G5Q5", "H55B1B222B1B55", "J5551101011555", "O0A0",}, + {"L000000000", "I000010010010000", "G000B1A23332A1B000", "F00Q00", "E00S00", "D00A2Q2A00", "C00W00", "B00A2U2A00", "B0[0", "A00[00", "A0]0", "A0]0", "001[100", "01]10", "002[200", "003[300", "013[310", "003[300", "002[200", "01]10", "001[100", "A0]0", "A0]0", "A00[00", "B0[0", "B00A2U2A00", "C00W00", "D00A2Q2A00", "E00S00", "F00Q00", "G000B1A23332A1B000", "I000010010010000", "L000000000",}, + {"O0A0", "M1111111", "J111A23332A111", "H11M11", "F0144M4410", "F14Q41", "D014S410", "D14U41", "C14W41", "C14W41", "B1[1", "B1[1", "B1[1", "A1]1", "A12[21", "013[310", "A13[31", "013[310", "A12[21", "A1]1", "B1[1", "B1[1", "B1[1", "C14W41", "C14W41", "D14U41", "D014S410", "F14Q41", "F0144M4410", "H11M11", "J111A23332A111", "M1111111", "O0A0",}, + {"L000000000", "I000010010010000", "G000B1A23332A1B000", "F00Q00", "E00S00", "D00A2Q2A00", "C00W00", "B00A2U2A00", "B0[0", "A00[00", "A0]0", "A0]0", "001[100", "01]10", "002[200", "003[300", "013[310", "003[300", "002[200", "01]10", "001[100", "A0]0", "A0]0", "A00[00", "B0[0", "B00A2U2A00", "C00W00", "D00A2Q2A00", "E00S00", "F00Q00", "G000B1A23332A1B000", "I000010010010000", "L000000000",}, + {"O0A0", "J5551101011555", "H55B1B222B1B55", "G5Q5", "F0S0", "E5A2Q2A5", "D0W0", "C5A2U2A5", "B5[5", "B5[5", "A5]5", "A5]5", "A51[15", "A1]1", "A1]1", "002[200", "A12[21", "002[200", "A1]1", "A1]1", "A51[15", "A5]5", "A5]5", "B5[5", "B5[5", "C5A2U2A5", "D0W0", "E5A2Q2A5", "F0S0", "G5Q5", "H55B1B222B1B55", "J5551101011555", "O0A0",}, + {"O0A0", "J5555111115555", "H55B11E11B55", "G5Q5", "F5S5", "E5A2Q2A5", "D5W5", "C5A2U2A5", "B5[5", "B5[5", "A5]5", "A5]5", "A51[15", "A51[15", "A1]1", "01]10", "A1]1", "01]10", "A1]1", "A51[15", "A51[15", "A5]5", "A5]5", "B5[5", "B5[5", "C5A2U2A5", "D5W5", "E5A2Q2A5", "F5S5", "G5Q5", "H55B11E11B55", "J5555111115555", "O0A0",}, + {"O0A0", "K55550A05555", "I55B1111111B55", "G55O55", "F5S5", "E5U5", "D5W5", "C5Y5", "C5Y5", "B5[5", "B5[5", "A5]5", "A5]5", "A51[15", "A51[15", "001[100", "B1[1", "001[100", "A51[15", "A51[15", "A5]5", "A5]5", "B5[5", "B5[5", "C5Y5", "C5Y5", "D5W5", "E5U5", "F5S5", "G55O55", "I55B1111111B55", "K55550A05555", "O0A0",}, + {E, "L5550A0555", "I555D1D555", "H5O5", "F55Q55", "E5U5", "D5W5", "D5W5", "C5Y5", "B5[5", "B5[5", "B5[5", "A5]5", "A5]5", "A5]5", "A0]0", "B1[1", "A0]0", "A5]5", "A5]5", "A5]5", "B5[5", "B5[5", "B5[5", "C5Y5", "D5W5", "D5W5", "E5U5", "F55Q55", "H5O5", "I555D1D555", "L5550A0555",}, + {E, "M550A055", "J555C1C555", "H55M55", "G5Q5", "E55S55", "E5U5", "D5W5", "C5Y5", "C5Y5", "B5[5", "B5[5", "B5[5", "A5]5", "A5]5", "A0]0", "B1[1", "A0]0", "A5]5", "A5]5", "B5[5", "B5[5", "B5[5", "C5Y5", "C5Y5", "D5W5", "E5U5", "E55S55", "G5Q5", "H55M55", "J555C1C555", "M550A055",}, + {E, "O0A0", "K55550A05555", "I55E1E55", "G55G4G55", "F5S5", "E5U5", "D5W5", "D5W5", "C5Y5", "C5Y5", "B5[5", "B5[5", "B5[5", "B5[5", "A00[00", "C14W41", "A00[00", "B5[5", "B5[5", "B5[5", "B5[5", "C5Y5", "C5Y5", "D5W5", "D5W5", "E5U5", "F5S5", "G55G4G55", "I55E1E55", "K55550A05555", "O0A0",}, + {"\u0001", "M550A055", "J555C1C555", "H55F4F55", "F55Q55", "E55S55", "E5U5", "D5W5", "D5W5", "C5Y5", "C5Y5", "C5Y5", "B5[5", "B5[5", "B0[0", "C14W41", "B0[0", "B5[5", "B5[5", "C5Y5", "C5Y5", "C5Y5", "D5W5", "D5W5", "E5U5", "E55S55", "F55Q55", "H55F4F55", "J555C1C555", "M550A055",}, + {"\u0001", "O0A0", "L5550A0555", "I555D1D555", "G55D2224222D55", "F5S5", "E5U5", "E5U5", "D5W5", "D5W5", "D5W5", "C5Y5", "C5A2U2A5", "C5A2U2A5", "B00A2U2A00", "D14U41", "B00A2U2A00", "C5A2U2A5", "C5A2U2A5", "C5Y5", "D5W5", "D5W5", "D5W5", "E5U5", "E5U5", "F5S5", "G55D2224222D55", "I555D1D555", "L5550A0555", "O0A0",}, + {"\u0002", "O0A0", "K55500000555", "H555E1E555", "G55G4G55", "F5S5", "E55S55", "E5U5", "E5U5", "D5W5", "D5W5", "D5W5", "D0W0", "C00W00", "D014S410", "C00W00", "D0W0", "D5W5", "D5W5", "D5W5", "E5U5", "E5U5", "E55S55", "F5S5", "G55G4G55", "H555E1E555", "K55500000555", "O0A0",}, + {"\u0003", "O0A0", "J555550A055555", "H555E1E555", "G55D2224222D55", "F55Q55", "F5S5", "E55S55", "E5U5", "E5U5", "E5A2Q2A5", "E5A2Q2A5", "D00A2Q2A00", "F14Q41", "D00A2Q2A00", "E5A2Q2A5", "E5A2Q2A5", "E5U5", "E5U5", "E55S55", "F5S5", "F55Q55", "G55D2224222D55", "H555E1E555", "J555550A055555", "O0A0",}, + {"\u0004", "O0A0", "K55500000555", "I555D1D555", "H55F4F55", "G55G4G55", "G5Q5", "F55Q55", "F5S5", "F5S5", "F0S0", "E00S00", "F0144M4410", "E00S00", "F0S0", "F5S5", "F5S5", "F55Q55", "G5Q5", "G55G4G55", "H55F4F55", "I555D1D555", "K55500000555", "O0A0",}, + {"\u0005", "O0A0", "L5550A0555", "J555C1C555", "I55E1E55", "H55M55", "H5O5", "G55O55", "G5Q5", "G5Q5", "F00Q00", "H11M11", "F00Q00", "G5Q5", "G5Q5", "G55O55", "H5O5", "H55M55", "I55E1E55", "J555C1C555", "L5550A0555", "O0A0",}, + {"\u0006", "O0A0", "M550A055", "K55550A05555", "J555C1C555", "I555D1D555", "I55B1111111B55", "H55B11E11B55", "H55B1B222B1B55", "G000B1A23332A1B000", "J111A23332A111", "G000B1A23332A1B000", "H55B1B222B1B55", "H55B11E11B55", "I55B1111111B55", "I555D1D555", "J555C1C555", "K55550A05555", "M550A055", "O0A0",}, + {"\u0008", "O0A0", "M550A055", "L5550A0555", "K55550A05555", "J5555111115555", "J5551101011555", "I000010010010000", "M1111111", "I000010010010000", "J5551101011555", "J5555111115555", "K55550A05555", "L5550A0555", "M550A055", "O0A0",}, + {"\u000B", "O0A0", "O0A0", "O0A0", "L000000000", "O0A0", "L000000000", "O0A0", "O0A0", "O0A0",}, + }) + .addElement('0', ofBlock(sBlockCasingsTT,12)) + .addElement('1', ofBlock(sBlockCasingsTT,13)) + .addElement('2', ofBlock(sBlockCasingsTT,14)) + .addElement('3', ofBlock(sBlockCasingsTT,10)) + .addElement('4', ofBlock(sBlockCasingsTT,11)) + .addElement('5', ofBlock(QuantumGlassBlock.INSTANCE,0)) + .addElement(' ', ofHatchAdderOptional(GT_MetaTileEntity_EM_bhg::addClassicToMachineList, + textureOffset,1,sBlockCasingsTT,0)) + .addElement('!', ofHatchAdderOptional(GT_MetaTileEntity_EM_bhg::addElementalToMachineList, + textureOffset + 4,2,sBlockCasingsTT,4)) + .build(); + + @Override + public IStructureDefinition getStructure_EM() { + return STRUCTURE_DEFINITION; + } + private static final String[] description = new String[]{ EnumChatFormatting.AQUA + translateToLocal("tt.keyphrase.Hint_Details") + ":", translateToLocal("gt.blockmachines.multimachine.em.blackholegenerator.hint.0"),//1 - Classic Hatches or High Power Casing @@ -98,46 +144,6 @@ public class GT_MetaTileEntity_EM_bhg extends GT_MetaTileEntity_MultiblockBase_E }; //endregion - //region structure dank - glass sphere for the looks - private static final String[][] shape2 = new String[][]{ - {"\u000B", "M0000000", "L00 00", "L0 0", "L0 !!! 0", "L0 !.! 0", "L0 !!! 0", "L0 0", "L00 00", "M0000000",}, - {"\u0008", "O0A0", "M110A011", "L1110A0111", "K11110A01111", "J1111222221111", "J1112202022111", "I000020020020000", "M2222222", "I000020020020000", "J1112202022111", "J1111222221111", "K11110A01111", "L1110A0111", "M110A011", "O0A0",}, - {"\u0006", "O0A0", "M110A011", "K11110A01111", "J111C2C111", "I111D2D111", "I11B2222222B11", "H11B22E22B11", "H11B2B333B2B11", "G000B2A34443A2B000", "J222A34443A222", "G000B2A34443A2B000", "H11B2B333B2B11", "H11B22E22B11", "I11B2222222B11", "I111D2D111", "J111C2C111", "K11110A01111", "M110A011", "O0A0",}, - {"\u0005", "O0A0", "L1110A0111", "J111C2C111", "I11E2E11", "H11M11", "H1O1", "G11O11", "G1Q1", "G1Q1", "F00Q00", "H22M22", "F00Q00", "G1Q1", "G1Q1", "G11O11", "H1O1", "H11M11", "I11E2E11", "J111C2C111", "L1110A0111", "O0A0",}, - {"\u0004", "O0A0", "K11100000111", "I111D2D111", "H11F5F11", "G11G5G11", "G1Q1", "F11Q11", "F1S1", "F1S1", "F0S0", "E00S00", "F0255M5520", "E00S00", "F0S0", "F1S1", "F1S1", "F11Q11", "G1Q1", "G11G5G11", "H11F5F11", "I111D2D111", "K11100000111", "O0A0",}, - {"\u0003", "O0A0", "J111110A011111", "H111E2E111", "G11D3335333D11", "F11Q11", "F1S1", "E11S11", "E1U1", "E1U1", "E1A3Q3A1", "E1A3Q3A1", "D00A3Q3A00", "F25Q52", "D00A3Q3A00", "E1A3Q3A1", "E1A3Q3A1", "E1U1", "E1U1", "E11S11", "F1S1", "F11Q11", "G11D3335333D11", "H111E2E111", "J111110A011111", "O0A0",}, - {"\u0002", "O0A0", "K11100000111", "H111E2E111", "G11G5G11", "F1S1", "E11S11", "E1U1", "E1U1", "D1W1", "D1W1", "D1W1", "D0W0", "C00W00", "D025S520", "C00W00", "D0W0", "D1W1", "D1W1", "D1W1", "E1U1", "E1U1", "E11S11", "F1S1", "G11G5G11", "H111E2E111", "K11100000111", "O0A0",}, - {"\u0001", "O0A0", "L1110A0111", "I111D2D111", "G11D3335333D11", "F1S1", "E1U1", "E1U1", "D1W1", "D1W1", "D1W1", "C1Y1", "C1A3U3A1", "C1A3U3A1", "B00A3U3A00", "D25U52", "B00A3U3A00", "C1A3U3A1", "C1A3U3A1", "C1Y1", "D1W1", "D1W1", "D1W1", "E1U1", "E1U1", "F1S1", "G11D3335333D11", "I111D2D111", "L1110A0111", "O0A0",}, - {"\u0001", "M110A011", "J111C2C111", "H11F5F11", "F11Q11", "E11S11", "E1U1", "D1W1", "D1W1", "C1Y1", "C1Y1", "C1Y1", "B1[1", "B1[1", "B0[0", "C25W52", "B0[0", "B1[1", "B1[1", "C1Y1", "C1Y1", "C1Y1", "D1W1", "D1W1", "E1U1", "E11S11", "F11Q11", "H11F5F11", "J111C2C111", "M110A011",}, - {E, "O0A0", "K11110A01111", "I11E2E11", "G11G5G11", "F1S1", "E1U1", "D1W1", "D1W1", "C1Y1", "C1Y1", "B1[1", "B1[1", "B1[1", "B1[1", "A00[00", "C25W52", "A00[00", "B1[1", "B1[1", "B1[1", "B1[1", "C1Y1", "C1Y1", "D1W1", "D1W1", "E1U1", "F1S1", "G11G5G11", "I11E2E11", "K11110A01111", "O0A0",}, - {E, "M110A011", "J111C2C111", "H11M11", "G1Q1", "E11S11", "E1U1", "D1W1", "C1Y1", "C1Y1", "B1[1", "B1[1", "B1[1", "A1]1", "A1]1", "A0]0", "B2[2", "A0]0", "A1]1", "A1]1", "B1[1", "B1[1", "B1[1", "C1Y1", "C1Y1", "D1W1", "E1U1", "E11S11", "G1Q1", "H11M11", "J111C2C111", "M110A011",}, - {E, "L1110A0111", "I111D2D111", "H1O1", "F11Q11", "E1U1", "D1W1", "D1W1", "C1Y1", "B1[1", "B1[1", "B1[1", "A1]1", "A1]1", "A1]1", "A0]0", "B2[2", "A0]0", "A1]1", "A1]1", "A1]1", "B1[1", "B1[1", "B1[1", "C1Y1", "D1W1", "D1W1", "E1U1", "F11Q11", "H1O1", "I111D2D111", "L1110A0111",}, - {"O0A0", "K11110A01111", "I11B2222222B11", "G11O11", "F1S1", "E1U1", "D1W1", "C1Y1", "C1Y1", "B1[1", "B1[1", "A1]1", "A1]1", "A12[21", "A12[21", "002[200", "B2[2", "002[200", "A12[21", "A12[21", "A1]1", "A1]1", "B1[1", "B1[1", "C1Y1", "C1Y1", "D1W1", "E1U1", "F1S1", "G11O11", "I11B2222222B11", "K11110A01111", "O0A0",}, - {"O0A0", "J1111222221111", "H11B22E22B11", "G1Q1", "F1S1", "E1A3Q3A1", "D1W1", "C1A3U3A1", "B1[1", "B1[1", "A1]1", "A1]1", "A12[21", "A12[21", "A2]2", "02]20", "A2]2", "02]20", "A2]2", "A12[21", "A12[21", "A1]1", "A1]1", "B1[1", "B1[1", "C1A3U3A1", "D1W1", "E1A3Q3A1", "F1S1", "G1Q1", "H11B22E22B11", "J1111222221111", "O0A0",}, - {"O0A0", "J1112202022111", "H11B2B333B2B11", "G1Q1", "F0S0", "E1A3Q3A1", "D0W0", "C1A3U3A1", "B1[1", "B1[1", "A1]1", "A1]1", "A12[21", "A2]2", "A2]2", "003[300", "A23[32", "003[300", "A2]2", "A2]2", "A12[21", "A1]1", "A1]1", "B1[1", "B1[1", "C1A3U3A1", "D0W0", "E1A3Q3A1", "F0S0", "G1Q1", "H11B2B333B2B11", "J1112202022111", "O0A0",}, - {"L000000000", "I000020020020000", "G000B2A34443A2B000", "F00Q00", "E00S00", "D00A3Q3A00", "C00W00", "B00A3U3A00", "B0[0", "A00[00", "A0]0", "A0]0", "002[200", "02]20", "003[300", "004[400", "024[420", "004[400", "003[300", "02]20", "002[200", "A0]0", "A0]0", "A00[00", "B0[0", "B00A3U3A00", "C00W00", "D00A3Q3A00", "E00S00", "F00Q00", "G000B2A34443A2B000", "I000020020020000", "L000000000",}, - {"O0A0", "M2222222", "J222A34443A222", "H22M22", "F0255M5520", "F25Q52", "D025S520", "D25U52", "C25W52", "C25W52", "B2[2", "B2[2", "B2[2", "A2]2", "A23[32", "024[420", "A24[42", "024[420", "A23[32", "A2]2", "B2[2", "B2[2", "B2[2", "C25W52", "C25W52", "D25U52", "D025S520", "F25Q52", "F0255M5520", "H22M22", "J222A34443A222", "M2222222", "O0A0",}, - {"L000000000", "I000020020020000", "G000B2A34443A2B000", "F00Q00", "E00S00", "D00A3Q3A00", "C00W00", "B00A3U3A00", "B0[0", "A00[00", "A0]0", "A0]0", "002[200", "02]20", "003[300", "004[400", "024[420", "004[400", "003[300", "02]20", "002[200", "A0]0", "A0]0", "A00[00", "B0[0", "B00A3U3A00", "C00W00", "D00A3Q3A00", "E00S00", "F00Q00", "G000B2A34443A2B000", "I000020020020000", "L000000000",}, - {"O0A0", "J1112202022111", "H11B2B333B2B11", "G1Q1", "F0S0", "E1A3Q3A1", "D0W0", "C1A3U3A1", "B1[1", "B1[1", "A1]1", "A1]1", "A12[21", "A2]2", "A2]2", "003[300", "A23[32", "003[300", "A2]2", "A2]2", "A12[21", "A1]1", "A1]1", "B1[1", "B1[1", "C1A3U3A1", "D0W0", "E1A3Q3A1", "F0S0", "G1Q1", "H11B2B333B2B11", "J1112202022111", "O0A0",}, - {"O0A0", "J1111222221111", "H11B22E22B11", "G1Q1", "F1S1", "E1A3Q3A1", "D1W1", "C1A3U3A1", "B1[1", "B1[1", "A1]1", "A1]1", "A12[21", "A12[21", "A2]2", "02]20", "A2]2", "02]20", "A2]2", "A12[21", "A12[21", "A1]1", "A1]1", "B1[1", "B1[1", "C1A3U3A1", "D1W1", "E1A3Q3A1", "F1S1", "G1Q1", "H11B22E22B11", "J1111222221111", "O0A0",}, - {"O0A0", "K11110A01111", "I11B2222222B11", "G11O11", "F1S1", "E1U1", "D1W1", "C1Y1", "C1Y1", "B1[1", "B1[1", "A1]1", "A1]1", "A12[21", "A12[21", "002[200", "B2[2", "002[200", "A12[21", "A12[21", "A1]1", "A1]1", "B1[1", "B1[1", "C1Y1", "C1Y1", "D1W1", "E1U1", "F1S1", "G11O11", "I11B2222222B11", "K11110A01111", "O0A0",}, - {E, "L1110A0111", "I111D2D111", "H1O1", "F11Q11", "E1U1", "D1W1", "D1W1", "C1Y1", "B1[1", "B1[1", "B1[1", "A1]1", "A1]1", "A1]1", "A0]0", "B2[2", "A0]0", "A1]1", "A1]1", "A1]1", "B1[1", "B1[1", "B1[1", "C1Y1", "D1W1", "D1W1", "E1U1", "F11Q11", "H1O1", "I111D2D111", "L1110A0111",}, - {E, "M110A011", "J111C2C111", "H11M11", "G1Q1", "E11S11", "E1U1", "D1W1", "C1Y1", "C1Y1", "B1[1", "B1[1", "B1[1", "A1]1", "A1]1", "A0]0", "B2[2", "A0]0", "A1]1", "A1]1", "B1[1", "B1[1", "B1[1", "C1Y1", "C1Y1", "D1W1", "E1U1", "E11S11", "G1Q1", "H11M11", "J111C2C111", "M110A011",}, - {E, "O0A0", "K11110A01111", "I11E2E11", "G11G5G11", "F1S1", "E1U1", "D1W1", "D1W1", "C1Y1", "C1Y1", "B1[1", "B1[1", "B1[1", "B1[1", "A00[00", "C25W52", "A00[00", "B1[1", "B1[1", "B1[1", "B1[1", "C1Y1", "C1Y1", "D1W1", "D1W1", "E1U1", "F1S1", "G11G5G11", "I11E2E11", "K11110A01111", "O0A0",}, - {"\u0001", "M110A011", "J111C2C111", "H11F5F11", "F11Q11", "E11S11", "E1U1", "D1W1", "D1W1", "C1Y1", "C1Y1", "C1Y1", "B1[1", "B1[1", "B0[0", "C25W52", "B0[0", "B1[1", "B1[1", "C1Y1", "C1Y1", "C1Y1", "D1W1", "D1W1", "E1U1", "E11S11", "F11Q11", "H11F5F11", "J111C2C111", "M110A011",}, - {"\u0001", "O0A0", "L1110A0111", "I111D2D111", "G11D3335333D11", "F1S1", "E1U1", "E1U1", "D1W1", "D1W1", "D1W1", "C1Y1", "C1A3U3A1", "C1A3U3A1", "B00A3U3A00", "D25U52", "B00A3U3A00", "C1A3U3A1", "C1A3U3A1", "C1Y1", "D1W1", "D1W1", "D1W1", "E1U1", "E1U1", "F1S1", "G11D3335333D11", "I111D2D111", "L1110A0111", "O0A0",}, - {"\u0002", "O0A0", "K11100000111", "H111E2E111", "G11G5G11", "F1S1", "E11S11", "E1U1", "E1U1", "D1W1", "D1W1", "D1W1", "D0W0", "C00W00", "D025S520", "C00W00", "D0W0", "D1W1", "D1W1", "D1W1", "E1U1", "E1U1", "E11S11", "F1S1", "G11G5G11", "H111E2E111", "K11100000111", "O0A0",}, - {"\u0003", "O0A0", "J111110A011111", "H111E2E111", "G11D3335333D11", "F11Q11", "F1S1", "E11S11", "E1U1", "E1U1", "E1A3Q3A1", "E1A3Q3A1", "D00A3Q3A00", "F25Q52", "D00A3Q3A00", "E1A3Q3A1", "E1A3Q3A1", "E1U1", "E1U1", "E11S11", "F1S1", "F11Q11", "G11D3335333D11", "H111E2E111", "J111110A011111", "O0A0",}, - {"\u0004", "O0A0", "K11100000111", "I111D2D111", "H11F5F11", "G11G5G11", "G1Q1", "F11Q11", "F1S1", "F1S1", "F0S0", "E00S00", "F0255M5520", "E00S00", "F0S0", "F1S1", "F1S1", "F11Q11", "G1Q1", "G11G5G11", "H11F5F11", "I111D2D111", "K11100000111", "O0A0",}, - {"\u0005", "O0A0", "L1110A0111", "J111C2C111", "I11E2E11", "H11M11", "H1O1", "G11O11", "G1Q1", "G1Q1", "F00Q00", "H22M22", "F00Q00", "G1Q1", "G1Q1", "G11O11", "H1O1", "H11M11", "I11E2E11", "J111C2C111", "L1110A0111", "O0A0",}, - {"\u0006", "O0A0", "M110A011", "K11110A01111", "J111C2C111", "I111D2D111", "I11B2222222B11", "H11B22E22B11", "H11B2B333B2B11", "G000B2A34443A2B000", "J222A34443A222", "G000B2A34443A2B000", "H11B2B333B2B11", "H11B22E22B11", "I11B2222222B11", "I111D2D111", "J111C2C111", "K11110A01111", "M110A011", "O0A0",}, - {"\u0008", "O0A0", "M110A011", "L1110A0111", "K11110A01111", "J1111222221111", "J1112202022111", "I000020020020000", "M2222222", "I000020020020000", "J1112202022111", "J1111222221111", "K11110A01111", "L1110A0111", "M110A011", "O0A0",}, - {"\u000B", "O0A0", "O0A0", "O0A0", "L000000000", "O0A0", "L000000000", "O0A0", "O0A0", "O0A0",}, - }; - private static final Block[] blockType2 = new Block[]{sBlockCasingsTT, QuantumGlassBlock.INSTANCE, sBlockCasingsTT, sBlockCasingsTT, sBlockCasingsTT, sBlockCasingsTT}; - private static final byte[] blockMeta2 = new byte[]{12, 0, 13, 14, 10, 11}; - //endregion - public GT_MetaTileEntity_EM_bhg(int aID, String aName, String aNameRegional) { super(aID, aName, aNameRegional); } @@ -262,11 +268,11 @@ public class GT_MetaTileEntity_EM_bhg extends GT_MetaTileEntity_MultiblockBase_E @Override public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { - if (structureCheck_EM(shape2, blockType2, blockMeta2, addingMethods, casingTextures, blockTypeFallback, blockMetaFallback, 16, 16, 0)) { + if (structureCheck_EM("t2", 16, 16, 0)) { glassDome = true; return true; } - if (structureCheck_EM(shape, blockType, blockMeta, addingMethods, casingTextures, blockTypeFallback, blockMetaFallback, 16, 16, 0)) { + if (structureCheck_EM("t1", 16, 16, 0)) { glassDome = false; return true; } @@ -301,11 +307,7 @@ public class GT_MetaTileEntity_EM_bhg extends GT_MetaTileEntity_MultiblockBase_E @Override public void construct(ItemStack stackSize, boolean hintsOnly) { - if ((stackSize.stackSize & 1) == 1) { - Structure.builder(shape, blockType, blockMeta, 16, 16, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); - } else { - Structure.builder(shape2, blockType2, blockMeta2, 16, 16, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); - } + structureBuild_EM((stackSize.stackSize&1)==1?"t1":"t2", 16, 16, 0, hintsOnly,stackSize); } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java index 2782e7924f..8f4e7969ee 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java @@ -325,12 +325,12 @@ public class GT_MetaTileEntity_EM_collider extends GT_MetaTileEntity_MultiblockB }) .addElement('0', ofBlock(sBlockCasingsTT,4)) .addElement('1', ofBlock(sBlockCasingsTT,7)) - .addElement('2', defer(t->(int)t.eTier,(t,item)->(item.stackSize&1)+1, + .addElement('2', defer(t->(int)t.eTier,(t,item)->2-(item.stackSize&1), error(),ofBlock(sBlockCasingsTT,4),ofBlock(sBlockCasingsTT,5))) .addElement('3', ofBlock(QuantumGlassBlock.INSTANCE,0)) - .addElement('4', defer(t->(int)t.eTier,(t,item)->(item.stackSize&1)+1, + .addElement('4', defer(t->(int)t.eTier,(t,item)->2-(item.stackSize&1), error(),ofBlock(sBlockCasingsTT,4),ofBlock(sBlockCasingsTT,6))) - .addElement('5', defer(t->(int)t.eTier,(t,item)->(item.stackSize&1)+1, + .addElement('5', defer(t->(int)t.eTier,(t,item)->2-(item.stackSize&1), error(),ofBlock(sBlockCasingsTT,8),ofBlock(sBlockCasingsTT,9))) .addElement('&', ofHatchAdderOptional(GT_MetaTileEntity_EM_collider::addClassicToMachineList, textureOffset,1,sBlockCasingsTT,0)) diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java index bfd74ab448..cdac772541 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java @@ -40,7 +40,7 @@ public class GT_MetaTileEntity_EM_transformer extends GT_MetaTileEntity_Multiblo private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition.builder() .addShape("main",new String[][]{ - {"111", "1.1", "111",}, + {"111", "1~1", "111",}, {"111", "101", "111",}, {"111", "111", "111",}, }) -- cgit From 145e443d70af83109b3b9c4cb92097b4964d4402 Mon Sep 17 00:00:00 2001 From: Tec Date: Sat, 2 May 2020 16:04:17 +0200 Subject: Add IIcon hint particle --- .../technus/tectech/entity/fx/BlockHint.java | 19 ++++++++++++++++++ .../mechanics/structure/StructureUtility.java | 23 ++++++++++++++++++++++ .../github/technus/tectech/proxy/ClientProxy.java | 10 ++++++++++ .../github/technus/tectech/proxy/CommonProxy.java | 2 ++ 4 files changed, 54 insertions(+) diff --git a/src/main/java/com/github/technus/tectech/entity/fx/BlockHint.java b/src/main/java/com/github/technus/tectech/entity/fx/BlockHint.java index ab075f7ffd..24459a89b8 100644 --- a/src/main/java/com/github/technus/tectech/entity/fx/BlockHint.java +++ b/src/main/java/com/github/technus/tectech/entity/fx/BlockHint.java @@ -19,6 +19,25 @@ public class BlockHint extends EntityFX { this(world,0,0,0, Blocks.stone,0); } + /** + * + * @param world + * @param x + * @param y + * @param z + * @param icons DOWN, UP, NORTH, SOUTH, WEST, EAST + */ + public BlockHint(World world, int x, int y, int z, IIcon[] icons) { + super(world, x + .25, y + .5, z + .25); + particleGravity = 0; + prevPosX = posX; + prevPosY = posY; + prevPosZ = posZ; + noClip = true; + particleMaxAge = 2000 + TecTech.RANDOM.nextInt(200); + this.icons=icons; + } + public BlockHint(World world, int x, int y, int z, Block block, int meta) { super(world, x+.25, y+.5, z+.25); particleGravity = 0; diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java index 8e2cedd6e2..d544efc48e 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java @@ -13,6 +13,7 @@ import net.minecraft.block.material.Material; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; import net.minecraft.world.World; import java.util.*; @@ -134,6 +135,28 @@ public class StructureUtility { }; } + /** + * Check always returns: true. + * + * @param icons + * @param + * @return + */ + public static IStructureElementNoPlacement ofHint(IIcon[] icons) { + return new IStructureElementNoPlacement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + return true; + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + TecTech.proxy.hint_particle(world, x, y, z, icons); + return false; + } + }; + } + /** * Does not allow Block duplicates (with different meta) */ diff --git a/src/main/java/com/github/technus/tectech/proxy/ClientProxy.java b/src/main/java/com/github/technus/tectech/proxy/ClientProxy.java index 720460d56b..43f4989638 100644 --- a/src/main/java/com/github/technus/tectech/proxy/ClientProxy.java +++ b/src/main/java/com/github/technus/tectech/proxy/ClientProxy.java @@ -24,6 +24,7 @@ import net.minecraft.client.particle.EntityFX; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.ChatComponentText; +import net.minecraft.util.IIcon; import net.minecraft.world.World; import net.minecraftforge.client.MinecraftForgeClient; import net.minecraftforge.common.util.ForgeDirection; @@ -45,6 +46,15 @@ public class ClientProxy extends CommonProxy { } } + @Override + public void hint_particle(World w,int x, int y, int z, IIcon[] icons) { + Minecraft.getMinecraft().effectRenderer.addEffect(new BlockHint(w,x,y,z,icons)); + + EntityFX particle = new WeightlessParticleFX(w, x + TecTech.RANDOM.nextFloat() * 0.5F, y + TecTech.RANDOM.nextFloat() * 0.5F, z + TecTech.RANDOM.nextFloat() * 0.5F, 0, 0, 0); + particle.setRBGColorF(0, 0.6F * TecTech.RANDOM.nextFloat(), 0.8f); + Minecraft.getMinecraft().effectRenderer.addEffect(particle); + } + @Override public void hint_particle(World w,int x, int y, int z, Block block, int meta) { Minecraft.getMinecraft().effectRenderer.addEffect(new BlockHint(w,x,y,z,block,meta)); diff --git a/src/main/java/com/github/technus/tectech/proxy/CommonProxy.java b/src/main/java/com/github/technus/tectech/proxy/CommonProxy.java index 955b664bd1..5891c21d5d 100644 --- a/src/main/java/com/github/technus/tectech/proxy/CommonProxy.java +++ b/src/main/java/com/github/technus/tectech/proxy/CommonProxy.java @@ -7,12 +7,14 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.server.MinecraftServer; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.ChatComponentText; +import net.minecraft.util.IIcon; import net.minecraft.world.World; import net.minecraft.world.WorldServer; public class CommonProxy implements IGuiHandler { public void registerRenderInfo() {} + public void hint_particle(World w,int x, int y, int z, IIcon[] icons){} public void hint_particle(World w,int x, int y, int z, Block block, int meta){} public void em_particle(IGregTechTileEntity aMuffler, byte facing) {}//CUTE! public void pollutor_particle(IGregTechTileEntity aPollutor, byte facing) {}//CUTE! -- cgit From 132765721d820021e594fe417ee7bbb6180df970 Mon Sep 17 00:00:00 2001 From: Tec Date: Sat, 2 May 2020 17:03:12 +0200 Subject: Expose tinting --- .../technus/tectech/entity/fx/BlockHint.java | 9 ++++++++- .../mechanics/structure/StructureUtility.java | 23 ++++++++++++++++++++++ .../github/technus/tectech/proxy/ClientProxy.java | 18 +++++++++++++++++ .../github/technus/tectech/proxy/CommonProxy.java | 2 ++ 4 files changed, 51 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/github/technus/tectech/entity/fx/BlockHint.java b/src/main/java/com/github/technus/tectech/entity/fx/BlockHint.java index 24459a89b8..dd5cd59ac7 100644 --- a/src/main/java/com/github/technus/tectech/entity/fx/BlockHint.java +++ b/src/main/java/com/github/technus/tectech/entity/fx/BlockHint.java @@ -3,6 +3,7 @@ package com.github.technus.tectech.entity.fx; import com.github.technus.tectech.TecTech; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.Dyes; import net.minecraft.block.Block; import net.minecraft.client.particle.EntityFX; import net.minecraft.client.renderer.Tessellator; @@ -14,6 +15,7 @@ import org.lwjgl.opengl.GL11; @SideOnly(Side.CLIENT) public class BlockHint extends EntityFX { private IIcon[] icons = new IIcon[6]; + private short[] mRGBa = Dyes._NULL.mRGBa; public BlockHint(World world){ this(world,0,0,0, Blocks.stone,0); @@ -51,6 +53,11 @@ public class BlockHint extends EntityFX { } } + public BlockHint withColorTint(short[] coloure){ + this.mRGBa =coloure; + return this; + } + @Override public void renderParticle(Tessellator tes, float subTickTime, float p_70539_3_, float p_70539_4_, float p_70539_5_, float p_70539_6_, float p_70539_7_) { float size = .5f; @@ -59,7 +66,7 @@ public class BlockHint extends EntityFX { float Z = (float) (prevPosZ + (posZ - prevPosZ) * (double) subTickTime - EntityFX.interpPosZ); GL11.glDisable(GL11.GL_CULL_FACE); GL11.glDepthMask(false); - tes.setColorRGBA_F(.9F, .95F, 1F, .75f); + tes.setColorRGBA((int) (mRGBa[0] * .9F), (int) (mRGBa[1] * .95F), (int) (mRGBa[2] * 1F), 192); //var8, var9 - X U //var 10, var 11 - Y V diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java index d544efc48e..2177d1a00e 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java @@ -157,6 +157,29 @@ public class StructureUtility { }; } + /** + * Check always returns: true. + * + * @param icons + * @param RGBa + * @param + * @return + */ + public static IStructureElementNoPlacement ofHint(IIcon[] icons,short[] RGBa) { + return new IStructureElementNoPlacement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + return true; + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + TecTech.proxy.hint_particle_tinted(world, x, y, z, icons,RGBa); + return false; + } + }; + } + /** * Does not allow Block duplicates (with different meta) */ diff --git a/src/main/java/com/github/technus/tectech/proxy/ClientProxy.java b/src/main/java/com/github/technus/tectech/proxy/ClientProxy.java index 43f4989638..9e693b7664 100644 --- a/src/main/java/com/github/technus/tectech/proxy/ClientProxy.java +++ b/src/main/java/com/github/technus/tectech/proxy/ClientProxy.java @@ -46,6 +46,24 @@ public class ClientProxy extends CommonProxy { } } + @Override + public void hint_particle_tinted(World w,int x, int y, int z, IIcon[] icons,short[] RGBa) { + Minecraft.getMinecraft().effectRenderer.addEffect(new BlockHint(w,x,y,z,icons).withColorTint(RGBa)); + + EntityFX particle = new WeightlessParticleFX(w, x + TecTech.RANDOM.nextFloat() * 0.5F, y + TecTech.RANDOM.nextFloat() * 0.5F, z + TecTech.RANDOM.nextFloat() * 0.5F, 0, 0, 0); + particle.setRBGColorF(0, 0.6F * TecTech.RANDOM.nextFloat(), 0.8f); + Minecraft.getMinecraft().effectRenderer.addEffect(particle); + } + + @Override + public void hint_particle_tinted(World w,int x, int y, int z, Block block, int meta,short[] RGBa) { + Minecraft.getMinecraft().effectRenderer.addEffect(new BlockHint(w,x,y,z,block,meta).withColorTint(RGBa)); + + EntityFX particle = new WeightlessParticleFX(w, x + TecTech.RANDOM.nextFloat() * 0.5F, y + TecTech.RANDOM.nextFloat() * 0.5F, z + TecTech.RANDOM.nextFloat() * 0.5F, 0, 0, 0); + particle.setRBGColorF(0, 0.6F * TecTech.RANDOM.nextFloat(), 0.8f); + Minecraft.getMinecraft().effectRenderer.addEffect(particle); + } + @Override public void hint_particle(World w,int x, int y, int z, IIcon[] icons) { Minecraft.getMinecraft().effectRenderer.addEffect(new BlockHint(w,x,y,z,icons)); diff --git a/src/main/java/com/github/technus/tectech/proxy/CommonProxy.java b/src/main/java/com/github/technus/tectech/proxy/CommonProxy.java index 5891c21d5d..490cdf1092 100644 --- a/src/main/java/com/github/technus/tectech/proxy/CommonProxy.java +++ b/src/main/java/com/github/technus/tectech/proxy/CommonProxy.java @@ -14,6 +14,8 @@ import net.minecraft.world.WorldServer; public class CommonProxy implements IGuiHandler { public void registerRenderInfo() {} + public void hint_particle_tinted(World w,int x, int y, int z, IIcon[] icons,short[] RGBa){} + public void hint_particle_tinted(World w,int x, int y, int z, Block block, int meta,short[] RGBa){} public void hint_particle(World w,int x, int y, int z, IIcon[] icons){} public void hint_particle(World w,int x, int y, int z, Block block, int meta){} public void em_particle(IGregTechTileEntity aMuffler, byte facing) {}//CUTE! -- cgit From f072d69ee5dbbef49e46e4c2357b985f86d202a3 Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 3 May 2020 11:02:55 +0200 Subject: Defer get icons --- src/main/java/com/github/technus/tectech/loader/MainLoader.java | 2 +- .../technus/tectech/mechanics/structure/StructureUtility.java | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/loader/MainLoader.java b/src/main/java/com/github/technus/tectech/loader/MainLoader.java index f8fbcda2da..bab6c6d092 100644 --- a/src/main/java/com/github/technus/tectech/loader/MainLoader.java +++ b/src/main/java/com/github/technus/tectech/loader/MainLoader.java @@ -157,7 +157,7 @@ public final class MainLoader { fixBlocks(); TecTech.LOGGER.info("Blocks nerf done"); - progressBarPostLoad.step("Initialize more constructable stuff"); + progressBarPostLoad.step("Constructable stuff"); new ConstructableLoader().run(); TecTech.LOGGER.info("Constructable initialized"); diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java index 2177d1a00e..00bdcdb1ad 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java @@ -142,7 +142,7 @@ public class StructureUtility { * @param * @return */ - public static IStructureElementNoPlacement ofHint(IIcon[] icons) { + public static IStructureElementNoPlacement ofHintDeferred(Supplier icons) { return new IStructureElementNoPlacement() { @Override public boolean check(T t, World world, int x, int y, int z) { @@ -151,7 +151,7 @@ public class StructureUtility { @Override public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle(world, x, y, z, icons); + TecTech.proxy.hint_particle(world, x, y, z, icons.get()); return false; } }; @@ -165,7 +165,7 @@ public class StructureUtility { * @param * @return */ - public static IStructureElementNoPlacement ofHint(IIcon[] icons,short[] RGBa) { + public static IStructureElementNoPlacement ofHintDeferred(Supplier icons,short[] RGBa) { return new IStructureElementNoPlacement() { @Override public boolean check(T t, World world, int x, int y, int z) { @@ -174,7 +174,7 @@ public class StructureUtility { @Override public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle_tinted(world, x, y, z, icons,RGBa); + TecTech.proxy.hint_particle_tinted(world, x, y, z, icons.get(),RGBa); return false; } }; -- cgit From 87d6601b4890b3a69c0d0fdcd3e7cbf0092377b7 Mon Sep 17 00:00:00 2001 From: Tec Date: Mon, 4 May 2020 20:15:05 +0200 Subject: Fix loss, to be max instead of min... --- .../multi/base/GT_MetaTileEntity_MultiblockBase_EM.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java index 3e53f63736..cf37fb0689 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java @@ -1435,7 +1435,7 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt if (GT_MetaTileEntity_MultiBlockBase.isValidMetaTileEntity(tHatch)) { euVar = tHatch.maxEUOutput(); if (tHatch.getBaseMetaTileEntity().getStoredEU() <= tHatch.maxEUStore() - euVar && - aBaseMetaTileEntity.decreaseStoredEnergyUnits(euVar + Math.min(euVar >> 7, 1), false)) { + aBaseMetaTileEntity.decreaseStoredEnergyUnits(euVar + Math.max(euVar >> 7, 1), false)) { tHatch.setEUVar(tHatch.getBaseMetaTileEntity().getStoredEU() + euVar); } } @@ -1444,7 +1444,7 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt if (GT_MetaTileEntity_MultiBlockBase.isValidMetaTileEntity(tHatch)) { euVar = tHatch.maxEUOutput() * tHatch.Amperes; if (tHatch.getBaseMetaTileEntity().getStoredEU() <= tHatch.maxEUStore() - euVar && - aBaseMetaTileEntity.decreaseStoredEnergyUnits(euVar + Math.min(euVar >> 7, tHatch.Amperes), false)) { + aBaseMetaTileEntity.decreaseStoredEnergyUnits(euVar + Math.max(euVar >> 7, tHatch.Amperes), false)) { tHatch.setEUVar(tHatch.getBaseMetaTileEntity().getStoredEU() + euVar); } } -- cgit From f1dff1a236a32284d733464e220995aca79aea6b Mon Sep 17 00:00:00 2001 From: Tec Date: Sat, 9 May 2020 09:16:53 +0200 Subject: Refactor thaum spark --- .../technus/tectech/loader/NetworkDispatcher.java | 2 +- .../tectech/mechanics/data/RendererMessage.java | 82 ---------------------- .../technus/tectech/mechanics/data/ThaumSpark.java | 54 -------------- .../tectech/mechanics/spark/RendererMessage.java | 82 ++++++++++++++++++++++ .../tectech/mechanics/spark/ThaumSpark.java | 54 ++++++++++++++ .../multi/GT_MetaTileEntity_TM_teslaCoil.java | 4 +- .../single/GT_MetaTileEntity_TeslaCoil.java | 4 +- 7 files changed, 141 insertions(+), 141 deletions(-) delete mode 100644 src/main/java/com/github/technus/tectech/mechanics/data/RendererMessage.java delete mode 100644 src/main/java/com/github/technus/tectech/mechanics/data/ThaumSpark.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/spark/RendererMessage.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/spark/ThaumSpark.java diff --git a/src/main/java/com/github/technus/tectech/loader/NetworkDispatcher.java b/src/main/java/com/github/technus/tectech/loader/NetworkDispatcher.java index 7d35a216f0..581c81d15f 100644 --- a/src/main/java/com/github/technus/tectech/loader/NetworkDispatcher.java +++ b/src/main/java/com/github/technus/tectech/loader/NetworkDispatcher.java @@ -2,7 +2,7 @@ package com.github.technus.tectech.loader; import com.github.technus.tectech.mechanics.data.ChunkDataMessage; import com.github.technus.tectech.mechanics.data.PlayerDataMessage; -import com.github.technus.tectech.mechanics.data.RendererMessage; +import com.github.technus.tectech.mechanics.spark.RendererMessage; import com.github.technus.tectech.mechanics.alignment.AlignmentMessage; import com.github.technus.tectech.thing.metaTileEntity.hatch.TextParametersMessage; import com.github.technus.tectech.mechanics.pipe.PipeActivityMessage; diff --git a/src/main/java/com/github/technus/tectech/mechanics/data/RendererMessage.java b/src/main/java/com/github/technus/tectech/mechanics/data/RendererMessage.java deleted file mode 100644 index 514b8b88ad..0000000000 --- a/src/main/java/com/github/technus/tectech/mechanics/data/RendererMessage.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.github.technus.tectech.mechanics.data; - -import cpw.mods.fml.common.Loader; -import cpw.mods.fml.common.network.simpleimpl.IMessage; -import cpw.mods.fml.common.network.simpleimpl.MessageContext; -import eu.usrv.yamcore.network.client.AbstractClientMessageHandler; -import io.netty.buffer.ByteBuf; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.world.World; -import net.minecraftforge.common.DimensionManager; -import thaumcraft.client.fx.bolt.FXLightningBolt; - -import java.io.*; -import java.util.Arrays; -import java.util.HashSet; - -public class RendererMessage implements IMessage { - HashSet sparkList = new HashSet(); - - public RendererMessage() { - } - - @Override - public void fromBytes(ByteBuf pBuffer) { - try { - //I'd love to know why I need to offset by one byte for this to work - byte[] boop = pBuffer.array(); - boop = Arrays.copyOfRange(boop, 1, boop.length); - InputStream is = new ByteArrayInputStream(boop); - ObjectInputStream ois = new ObjectInputStream(is); - Object data = ois.readObject(); - sparkList = (HashSet) data; - } catch (IOException | ClassNotFoundException ex) { - } - } - - @Override - public void toBytes(ByteBuf pBuffer) { - try { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - ObjectOutputStream oos = new ObjectOutputStream(baos); - oos.writeObject(sparkList); - oos.flush(); - InputStream is = new ByteArrayInputStream(baos.toByteArray()); - pBuffer.writeBytes(is, baos.toByteArray().length); - } catch (IOException ex) { - } - } - - public static class RendererData extends RendererMessage { - public RendererData() { - } - - public RendererData(HashSet eSparkList) { - sparkList = eSparkList; - } - } - - - public static class ClientHandler extends AbstractClientMessageHandler { - @Override - public IMessage handleClientMessage(EntityPlayer pPlayer, RendererData pMessage, MessageContext pCtx) { - for (ThaumSpark sp : pMessage.sparkList) { - thaumLightning(sp.x, sp.y, sp.z, sp.xR, sp.yR, sp.zR, sp.wID); - } - pMessage.sparkList.clear(); - return null; - } - } - - private static void thaumLightning(int tX, int tY, int tZ, int tXN, int tYN, int tZN, int wID) { - //This is enough to check for thaum, since it only ever matters for client side effects (Tested not to crash) - if (Loader.isModLoaded("Thaumcraft")) { - World world = DimensionManager.getWorld(wID); - FXLightningBolt bolt = new FXLightningBolt(world, tX + 0.5F, tY + 0.5F, tZ + 0.5F, tX + tXN + 0.5F, tY + tYN + 0.5F, tZ + tZN + 0.5F, world.rand.nextLong(), 6, 0.5F, 8); - bolt.defaultFractal(); - bolt.setType(2); - bolt.setWidth(0.125F); - bolt.finalizeBolt(); - } - } -} \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/mechanics/data/ThaumSpark.java b/src/main/java/com/github/technus/tectech/mechanics/data/ThaumSpark.java deleted file mode 100644 index 99f3696aa9..0000000000 --- a/src/main/java/com/github/technus/tectech/mechanics/data/ThaumSpark.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.github.technus.tectech.mechanics.data; - -import java.io.Serializable; -import java.util.Objects; - -public class ThaumSpark implements Serializable { - //This works regardless of if TC is loaded - private static final long serialVersionUID = -7037856938316679566L; - public int x, y, z, wID; - public byte xR, yR, zR; - - public ThaumSpark(){ - this.x = 0; - this.z = 0; - this.y = 0; - - this.xR = 0; - this.yR = 0; - this.zR = 0; - - this.wID = 0; - } - - public ThaumSpark(int x, int y, int z, byte xR, byte yR, byte zR, int wID) { - this.x = x; - this.z = z; - this.y = y; - - this.xR = xR; - this.yR = yR; - this.zR = zR; - - this.wID = wID; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - ThaumSpark that = (ThaumSpark) o; - return x == that.x && - y == that.y && - z == that.z && - wID == that.wID && - xR == that.xR && - yR == that.yR && - zR == that.zR; - } - - @Override - public int hashCode() { - return Objects.hash(x, y, z, wID, xR, yR, zR); - } -} diff --git a/src/main/java/com/github/technus/tectech/mechanics/spark/RendererMessage.java b/src/main/java/com/github/technus/tectech/mechanics/spark/RendererMessage.java new file mode 100644 index 0000000000..f2fd17817d --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/spark/RendererMessage.java @@ -0,0 +1,82 @@ +package com.github.technus.tectech.mechanics.spark; + +import cpw.mods.fml.common.Loader; +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import eu.usrv.yamcore.network.client.AbstractClientMessageHandler; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; +import net.minecraftforge.common.DimensionManager; +import thaumcraft.client.fx.bolt.FXLightningBolt; + +import java.io.*; +import java.util.Arrays; +import java.util.HashSet; + +public class RendererMessage implements IMessage { + HashSet sparkList = new HashSet(); + + public RendererMessage() { + } + + @Override + public void fromBytes(ByteBuf pBuffer) { + try { + //I'd love to know why I need to offset by one byte for this to work + byte[] boop = pBuffer.array(); + boop = Arrays.copyOfRange(boop, 1, boop.length); + InputStream is = new ByteArrayInputStream(boop); + ObjectInputStream ois = new ObjectInputStream(is); + Object data = ois.readObject(); + sparkList = (HashSet) data; + } catch (IOException | ClassNotFoundException ex) { + } + } + + @Override + public void toBytes(ByteBuf pBuffer) { + try { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ObjectOutputStream oos = new ObjectOutputStream(baos); + oos.writeObject(sparkList); + oos.flush(); + InputStream is = new ByteArrayInputStream(baos.toByteArray()); + pBuffer.writeBytes(is, baos.toByteArray().length); + } catch (IOException ex) { + } + } + + public static class RendererData extends RendererMessage { + public RendererData() { + } + + public RendererData(HashSet eSparkList) { + sparkList = eSparkList; + } + } + + + public static class ClientHandler extends AbstractClientMessageHandler { + @Override + public IMessage handleClientMessage(EntityPlayer pPlayer, RendererData pMessage, MessageContext pCtx) { + for (ThaumSpark sp : pMessage.sparkList) { + thaumLightning(sp.x, sp.y, sp.z, sp.xR, sp.yR, sp.zR, sp.wID); + } + pMessage.sparkList.clear(); + return null; + } + } + + private static void thaumLightning(int tX, int tY, int tZ, int tXN, int tYN, int tZN, int wID) { + //This is enough to check for thaum, since it only ever matters for client side effects (Tested not to crash) + if (Loader.isModLoaded("Thaumcraft")) { + World world = DimensionManager.getWorld(wID); + FXLightningBolt bolt = new FXLightningBolt(world, tX + 0.5F, tY + 0.5F, tZ + 0.5F, tX + tXN + 0.5F, tY + tYN + 0.5F, tZ + tZN + 0.5F, world.rand.nextLong(), 6, 0.5F, 8); + bolt.defaultFractal(); + bolt.setType(2); + bolt.setWidth(0.125F); + bolt.finalizeBolt(); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/mechanics/spark/ThaumSpark.java b/src/main/java/com/github/technus/tectech/mechanics/spark/ThaumSpark.java new file mode 100644 index 0000000000..604624828c --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/spark/ThaumSpark.java @@ -0,0 +1,54 @@ +package com.github.technus.tectech.mechanics.spark; + +import java.io.Serializable; +import java.util.Objects; + +public class ThaumSpark implements Serializable { + //This works regardless of if TC is loaded + private static final long serialVersionUID = -7037856938316679566L; + public int x, y, z, wID; + public byte xR, yR, zR; + + public ThaumSpark(){ + this.x = 0; + this.z = 0; + this.y = 0; + + this.xR = 0; + this.yR = 0; + this.zR = 0; + + this.wID = 0; + } + + public ThaumSpark(int x, int y, int z, byte xR, byte yR, byte zR, int wID) { + this.x = x; + this.z = z; + this.y = y; + + this.xR = xR; + this.yR = yR; + this.zR = zR; + + this.wID = wID; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + ThaumSpark that = (ThaumSpark) o; + return x == that.x && + y == that.y && + z == that.z && + wID == that.wID && + xR == that.xR && + yR == that.yR && + zR == that.zR; + } + + @Override + public int hashCode() { + return Objects.hash(x, y, z, wID, xR, yR, zR); + } +} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java index 15263e2042..89093bdba7 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java @@ -3,8 +3,8 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.loader.NetworkDispatcher; import com.github.technus.tectech.mechanics.constructable.IConstructable; -import com.github.technus.tectech.mechanics.data.RendererMessage; -import com.github.technus.tectech.mechanics.data.ThaumSpark; +import com.github.technus.tectech.mechanics.spark.RendererMessage; +import com.github.technus.tectech.mechanics.spark.ThaumSpark; import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.thing.cover.GT_Cover_TM_TeslaCoil; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java index 0c282ac94f..ed36dec7cb 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java @@ -4,8 +4,8 @@ import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.util.Util; import com.github.technus.tectech.loader.NetworkDispatcher; -import com.github.technus.tectech.mechanics.data.RendererMessage; -import com.github.technus.tectech.mechanics.data.ThaumSpark; +import com.github.technus.tectech.mechanics.spark.RendererMessage; +import com.github.technus.tectech.mechanics.spark.ThaumSpark; import com.github.technus.tectech.thing.cover.GT_Cover_TM_TeslaCoil; import com.github.technus.tectech.thing.cover.GT_Cover_TM_TeslaCoil_Ultimate; import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_TM_teslaCoil; -- cgit From 50ef86f655d1a6f4e44305e3cea962dc52534736 Mon Sep 17 00:00:00 2001 From: DreamMasterXXL Date: Sun, 10 May 2020 09:42:24 +0200 Subject: update gt version for jenkins build --- build.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.properties b/build.properties index aa0710220a..2aaa4ac7ce 100644 --- a/build.properties +++ b/build.properties @@ -6,8 +6,8 @@ ic2.version=2.2.790-experimental codechickenlib.version=1.1.3.140 codechickencore.version=1.0.7.47 nei.version=1.0.5.120 -gregtech.jenkinsbuild=520 -gregtech.version=5.09.33.42-Test +gregtech.jenkinsbuild=545 +gregtech.version=5.09.33.44 cofhcore.version=[1.7.10]3.1.4-329-dev yamcore.version=0.5.79 baubles.version=1.0.1.10 -- cgit From 7d64270920ef2f095ae9923fdb9f0e685f940220 Mon Sep 17 00:00:00 2001 From: Tec Date: Tue, 12 May 2020 20:11:23 +0200 Subject: Update descriptions --- .../tectech/loader/thing/MachineLoader.java | 252 ++++++++++----------- src/main/resources/assets/tectech/lang/en_US.lang | 252 ++++++++++----------- src/main/resources/assets/tectech/lang/zh_CN.lang | 252 ++++++++++----------- 3 files changed, 378 insertions(+), 378 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/loader/thing/MachineLoader.java b/src/main/java/com/github/technus/tectech/loader/thing/MachineLoader.java index 9dd71df9eb..7b1e85591d 100644 --- a/src/main/java/com/github/technus/tectech/loader/thing/MachineLoader.java +++ b/src/main/java/com/github/technus/tectech/loader/thing/MachineLoader.java @@ -198,139 +198,139 @@ public class MachineLoader implements Runnable { // =================================================================================================== eM_energyTunnel1_IV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15130, "hatch.energytunnel1.tier.05", "IV 256/t Laser Target Hatch", 5, 256).getStackForm(1L)); + 15130, "hatch.energytunnel1.tier.05", "IV 256A/s Laser Target Hatch", 5, 256).getStackForm(1L)); eM_energyTunnel2_IV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15140, "hatch.energytunnel2.tier.05", "IV 1024/t Laser Target Hatch", 5, 1024).getStackForm(1L)); + 15140, "hatch.energytunnel2.tier.05", "IV 1024A/s Laser Target Hatch", 5, 1024).getStackForm(1L)); eM_energyTunnel3_IV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15150, "hatch.energytunnel3.tier.05", "IV 4096/t Laser Target Hatch", 5, 4096).getStackForm(1L)); + 15150, "hatch.energytunnel3.tier.05", "IV 4096A/s Laser Target Hatch", 5, 4096).getStackForm(1L)); eM_energyTunnel4_IV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15160, "hatch.energytunnel4.tier.05", "IV 16384/t Laser Target Hatch", 5, 16384).getStackForm(1L)); + 15160, "hatch.energytunnel4.tier.05", "IV 16384A/s Laser Target Hatch", 5, 16384).getStackForm(1L)); eM_energyTunnel5_IV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15170, "hatch.energytunnel5.tier.05", "IV 65536/t Laser Target Hatch", 5, 65536).getStackForm(1L)); + 15170, "hatch.energytunnel5.tier.05", "IV 65536A/s Laser Target Hatch", 5, 65536).getStackForm(1L)); eM_energyTunnel6_IV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15180, "hatch.energytunnel6.tier.05", "IV 262144/t Laser Target Hatch", 5, 262144).getStackForm(1L)); + 15180, "hatch.energytunnel6.tier.05", "IV 262144A/s Laser Target Hatch", 5, 262144).getStackForm(1L)); eM_energyTunnel7_IV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15190, "hatch.energytunnel7.tier.05", "IV 1048576/t Laser Target Hatch", 5, 1048576).getStackForm(1L)); + 15190, "hatch.energytunnel7.tier.05", "IV 1048576A/s Laser Target Hatch", 5, 1048576).getStackForm(1L)); eM_energyTunnel1_LuV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15131, "hatch.energytunnel1.tier.06", "LuV 256/t Laser Target Hatch", 6, 256).getStackForm(1L)); + 15131, "hatch.energytunnel1.tier.06", "LuV 256A/s Laser Target Hatch", 6, 256).getStackForm(1L)); eM_energyTunnel2_LuV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15141, "hatch.energytunnel2.tier.06", "LuV 1024/t Laser Target Hatch", 6, 1024).getStackForm(1L)); + 15141, "hatch.energytunnel2.tier.06", "LuV 1024A/s Laser Target Hatch", 6, 1024).getStackForm(1L)); eM_energyTunnel3_LuV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15151, "hatch.energytunnel3.tier.06", "LuV 4096/t Laser Target Hatch", 6, 4096).getStackForm(1L)); + 15151, "hatch.energytunnel3.tier.06", "LuV 4096A/s Laser Target Hatch", 6, 4096).getStackForm(1L)); eM_energyTunnel4_LuV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15161, "hatch.energytunnel4.tier.06", "LuV 16384/t Laser Target Hatch", 6, 16384).getStackForm(1L)); + 15161, "hatch.energytunnel4.tier.06", "LuV 16384A/s Laser Target Hatch", 6, 16384).getStackForm(1L)); eM_energyTunnel5_LuV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15171, "hatch.energytunnel5.tier.06", "LuV 65536/t Laser Target Hatch", 6, 65536).getStackForm(1L)); + 15171, "hatch.energytunnel5.tier.06", "LuV 65536A/s Laser Target Hatch", 6, 65536).getStackForm(1L)); eM_energyTunnel6_LuV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15181, "hatch.energytunnel6.tier.06", "LuV 262144/t Laser Target Hatch", 6, 262144).getStackForm(1L)); + 15181, "hatch.energytunnel6.tier.06", "LuV 262144A/s Laser Target Hatch", 6, 262144).getStackForm(1L)); eM_energyTunnel7_LuV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15191, "hatch.energytunnel7.tier.06", "LuV 1048576/t Laser Target Hatch", 6, 1048576).getStackForm(1L)); + 15191, "hatch.energytunnel7.tier.06", "LuV 1048576A/s Laser Target Hatch", 6, 1048576).getStackForm(1L)); eM_energyTunnel1_ZPM.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15132, "hatch.energytunnel1.tier.07", "ZPM 256/t Laser Target Hatch", 7, 256).getStackForm(1L)); + 15132, "hatch.energytunnel1.tier.07", "ZPM 256A/s Laser Target Hatch", 7, 256).getStackForm(1L)); eM_energyTunnel2_ZPM.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15142, "hatch.energytunnel2.tier.07", "ZPM 1024/t Laser Target Hatch", 7, 1024).getStackForm(1L)); + 15142, "hatch.energytunnel2.tier.07", "ZPM 1024A/s Laser Target Hatch", 7, 1024).getStackForm(1L)); eM_energyTunnel3_ZPM.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15152, "hatch.energytunnel3.tier.07", "ZPM 4096/t Laser Target Hatch", 7, 4096).getStackForm(1L)); + 15152, "hatch.energytunnel3.tier.07", "ZPM 4096A/s Laser Target Hatch", 7, 4096).getStackForm(1L)); eM_energyTunnel4_ZPM.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15162, "hatch.energytunnel4.tier.07", "ZPM 16384/t Laser Target Hatch", 7, 16384).getStackForm(1L)); + 15162, "hatch.energytunnel4.tier.07", "ZPM 16384A/s Laser Target Hatch", 7, 16384).getStackForm(1L)); eM_energyTunnel5_ZPM.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15172, "hatch.energytunnel5.tier.07", "ZPM 65536/t Laser Target Hatch", 7, 65536).getStackForm(1L)); + 15172, "hatch.energytunnel5.tier.07", "ZPM 65536A/s Laser Target Hatch", 7, 65536).getStackForm(1L)); eM_energyTunnel6_ZPM.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15182, "hatch.energytunnel6.tier.07", "ZPM 262144/t Laser Target Hatch", 7, 262144).getStackForm(1L)); + 15182, "hatch.energytunnel6.tier.07", "ZPM 262144A/s Laser Target Hatch", 7, 262144).getStackForm(1L)); eM_energyTunnel7_ZPM.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15192, "hatch.energytunnel7.tier.07", "ZPM 1048576/t Laser Target Hatch", 7, 1048576).getStackForm(1L)); + 15192, "hatch.energytunnel7.tier.07", "ZPM 1048576A/s Laser Target Hatch", 7, 1048576).getStackForm(1L)); eM_energyTunnel1_UV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15133, "hatch.energytunnel1.tier.08", "UV 256/t Laser Target Hatch", 8, 256).getStackForm(1L)); + 15133, "hatch.energytunnel1.tier.08", "UV 256A/s Laser Target Hatch", 8, 256).getStackForm(1L)); eM_energyTunnel2_UV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15143, "hatch.energytunnel2.tier.08", "UV 1024/t Laser Target Hatch", 8, 1024).getStackForm(1L)); + 15143, "hatch.energytunnel2.tier.08", "UV 1024A/s Laser Target Hatch", 8, 1024).getStackForm(1L)); eM_energyTunnel3_UV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15153, "hatch.energytunnel3.tier.08", "UV 4096/t Laser Target Hatch", 8, 4096).getStackForm(1L)); + 15153, "hatch.energytunnel3.tier.08", "UV 4096A/s Laser Target Hatch", 8, 4096).getStackForm(1L)); eM_energyTunnel4_UV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15163, "hatch.energytunnel4.tier.08", "UV 16384/t Laser Target Hatch", 8, 16384).getStackForm(1L)); + 15163, "hatch.energytunnel4.tier.08", "UV 16384A/s Laser Target Hatch", 8, 16384).getStackForm(1L)); eM_energyTunnel5_UV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15173, "hatch.energytunnel5.tier.08", "UV 65536/t Laser Target Hatch", 8, 65536).getStackForm(1L)); + 15173, "hatch.energytunnel5.tier.08", "UV 65536A/s Laser Target Hatch", 8, 65536).getStackForm(1L)); eM_energyTunnel6_UV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15183, "hatch.energytunnel6.tier.08", "UV 262144/t Laser Target Hatch", 8, 262144).getStackForm(1L)); + 15183, "hatch.energytunnel6.tier.08", "UV 262144A/s Laser Target Hatch", 8, 262144).getStackForm(1L)); eM_energyTunnel7_UV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15193, "hatch.energytunnel7.tier.08", "UV 1048576/t Laser Target Hatch", 8, 1048576).getStackForm(1L)); + 15193, "hatch.energytunnel7.tier.08", "UV 1048576A/s Laser Target Hatch", 8, 1048576).getStackForm(1L)); eM_energyTunnel1_UHV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15134, "hatch.energytunnel1.tier.09", "UHV 256/t Laser Target Hatch", 9, 256).getStackForm(1L)); + 15134, "hatch.energytunnel1.tier.09", "UHV 256A/s Laser Target Hatch", 9, 256).getStackForm(1L)); eM_energyTunnel2_UHV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15144, "hatch.energytunnel2.tier.09", "UHV 1024/t Laser Target Hatch", 9, 1024).getStackForm(1L)); + 15144, "hatch.energytunnel2.tier.09", "UHV 1024A/s Laser Target Hatch", 9, 1024).getStackForm(1L)); eM_energyTunnel3_UHV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15154, "hatch.energytunnel3.tier.09", "UHV 4096/t Laser Target Hatch", 9, 4096).getStackForm(1L)); + 15154, "hatch.energytunnel3.tier.09", "UHV 4096A/s Laser Target Hatch", 9, 4096).getStackForm(1L)); eM_energyTunnel4_UHV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15164, "hatch.energytunnel4.tier.09", "UHV 16384/t Laser Target Hatch", 9, 16384).getStackForm(1L)); + 15164, "hatch.energytunnel4.tier.09", "UHV 16384A/s Laser Target Hatch", 9, 16384).getStackForm(1L)); eM_energyTunnel5_UHV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15174, "hatch.energytunnel5.tier.09", "UHV 65536/t Laser Target Hatch", 9, 65536).getStackForm(1L)); + 15174, "hatch.energytunnel5.tier.09", "UHV 65536A/s Laser Target Hatch", 9, 65536).getStackForm(1L)); eM_energyTunnel6_UHV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15184, "hatch.energytunnel6.tier.09", "UHV 262144/t Laser Target Hatch", 9, 262144).getStackForm(1L)); + 15184, "hatch.energytunnel6.tier.09", "UHV 262144A/s Laser Target Hatch", 9, 262144).getStackForm(1L)); eM_energyTunnel7_UHV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15194, "hatch.energytunnel7.tier.09", "UHV 1048576/t Laser Target Hatch", 9, 1048576).getStackForm(1L)); + 15194, "hatch.energytunnel7.tier.09", "UHV 1048576A/s Laser Target Hatch", 9, 1048576).getStackForm(1L)); eM_energyTunnel1_UEV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15135, "hatch.energytunnel1.tier.10", "UEV 256/t Laser Target Hatch", 10, 256).getStackForm(1L)); + 15135, "hatch.energytunnel1.tier.10", "UEV 256A/s Laser Target Hatch", 10, 256).getStackForm(1L)); eM_energyTunnel2_UEV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15145, "hatch.energytunnel2.tier.10", "UEV 1024/t Laser Target Hatch", 10, 1024).getStackForm(1L)); + 15145, "hatch.energytunnel2.tier.10", "UEV 1024A/s Laser Target Hatch", 10, 1024).getStackForm(1L)); eM_energyTunnel3_UEV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15155, "hatch.energytunnel3.tier.10", "UEV 4096/t Laser Target Hatch", 10, 4096).getStackForm(1L)); + 15155, "hatch.energytunnel3.tier.10", "UEV 4096A/s Laser Target Hatch", 10, 4096).getStackForm(1L)); eM_energyTunnel4_UEV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15165, "hatch.energytunnel4.tier.10", "UEV 16384/t Laser Target Hatch", 10, 16384).getStackForm(1L)); + 15165, "hatch.energytunnel4.tier.10", "UEV 16384A/s Laser Target Hatch", 10, 16384).getStackForm(1L)); eM_energyTunnel5_UEV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15175, "hatch.energytunnel5.tier.10", "UEV 65536/t Laser Target Hatch", 10, 65536).getStackForm(1L)); + 15175, "hatch.energytunnel5.tier.10", "UEV 65536A/s Laser Target Hatch", 10, 65536).getStackForm(1L)); eM_energyTunnel6_UEV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15185, "hatch.energytunnel6.tier.10", "UEV 262144/t Laser Target Hatch", 10, 262144).getStackForm(1L)); + 15185, "hatch.energytunnel6.tier.10", "UEV 262144A/s Laser Target Hatch", 10, 262144).getStackForm(1L)); eM_energyTunnel7_UEV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15195, "hatch.energytunnel7.tier.10", "UEV 1048576/t Laser Target Hatch", 10, 1048576).getStackForm(1L)); + 15195, "hatch.energytunnel7.tier.10", "UEV 1048576A/s Laser Target Hatch", 10, 1048576).getStackForm(1L)); eM_energyTunnel1_UIV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15136, "hatch.energytunnel1.tier.11", "UIV 256/t Laser Target Hatch", 11, 256).getStackForm(1L)); + 15136, "hatch.energytunnel1.tier.11", "UIV 256A/s Laser Target Hatch", 11, 256).getStackForm(1L)); eM_energyTunnel2_UIV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15146, "hatch.energytunnel2.tier.11", "UIV 1024/t Laser Target Hatch", 11, 1024).getStackForm(1L)); + 15146, "hatch.energytunnel2.tier.11", "UIV 1024A/s Laser Target Hatch", 11, 1024).getStackForm(1L)); eM_energyTunnel3_UIV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15156, "hatch.energytunnel3.tier.11", "UIV 4096/t Laser Target Hatch", 11, 4096).getStackForm(1L)); + 15156, "hatch.energytunnel3.tier.11", "UIV 4096A/s Laser Target Hatch", 11, 4096).getStackForm(1L)); eM_energyTunnel4_UIV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15166, "hatch.energytunnel4.tier.11", "UIV 16384/t Laser Target Hatch", 11, 16384).getStackForm(1L)); + 15166, "hatch.energytunnel4.tier.11", "UIV 16384A/s Laser Target Hatch", 11, 16384).getStackForm(1L)); eM_energyTunnel5_UIV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15176, "hatch.energytunnel5.tier.11", "UIV 65536/t Laser Target Hatch", 11, 65536).getStackForm(1L)); + 15176, "hatch.energytunnel5.tier.11", "UIV 65536A/s Laser Target Hatch", 11, 65536).getStackForm(1L)); eM_energyTunnel6_UIV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15186, "hatch.energytunnel6.tier.11", "UIV 262144/t Laser Target Hatch", 11, 262144).getStackForm(1L)); + 15186, "hatch.energytunnel6.tier.11", "UIV 262144A/s Laser Target Hatch", 11, 262144).getStackForm(1L)); eM_energyTunnel7_UIV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15196, "hatch.energytunnel7.tier.11", "UIV 1048576/t Laser Target Hatch", 11, 1048576).getStackForm(1L)); + 15196, "hatch.energytunnel7.tier.11", "UIV 1048576A/s Laser Target Hatch", 11, 1048576).getStackForm(1L)); eM_energyTunnel1_UMV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15137, "hatch.energytunnel1.tier.12", "UMV 256/t Laser Target Hatch", 12, 256).getStackForm(1L)); + 15137, "hatch.energytunnel1.tier.12", "UMV 256A/s Laser Target Hatch", 12, 256).getStackForm(1L)); eM_energyTunnel2_UMV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15147, "hatch.energytunnel2.tier.12", "UMV 1024/t Laser Target Hatch", 12, 1024).getStackForm(1L)); + 15147, "hatch.energytunnel2.tier.12", "UMV 1024A/s Laser Target Hatch", 12, 1024).getStackForm(1L)); eM_energyTunnel3_UMV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15157, "hatch.energytunnel3.tier.12", "UMV 4096/t Laser Target Hatch", 12, 4096).getStackForm(1L)); + 15157, "hatch.energytunnel3.tier.12", "UMV 4096A/s Laser Target Hatch", 12, 4096).getStackForm(1L)); eM_energyTunnel4_UMV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15167, "hatch.energytunnel4.tier.12", "UMV 16384/t Laser Target Hatch", 12, 16384).getStackForm(1L)); + 15167, "hatch.energytunnel4.tier.12", "UMV 16384A/s Laser Target Hatch", 12, 16384).getStackForm(1L)); eM_energyTunnel5_UMV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15177, "hatch.energytunnel5.tier.12", "UMV 65536/t Laser Target Hatch", 12, 65536).getStackForm(1L)); + 15177, "hatch.energytunnel5.tier.12", "UMV 65536A/s Laser Target Hatch", 12, 65536).getStackForm(1L)); eM_energyTunnel6_UMV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15187, "hatch.energytunnel6.tier.12", "UMV 262144/t Laser Target Hatch", 12, 262144).getStackForm(1L)); + 15187, "hatch.energytunnel6.tier.12", "UMV 262144A/s Laser Target Hatch", 12, 262144).getStackForm(1L)); eM_energyTunnel7_UMV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15197, "hatch.energytunnel7.tier.12", "UMV 1048576/t Laser Target Hatch", 12, 1048576).getStackForm(1L)); + 15197, "hatch.energytunnel7.tier.12", "UMV 1048576A/s Laser Target Hatch", 12, 1048576).getStackForm(1L)); eM_energyTunnel1_UXV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15138, "hatch.energytunnel1.tier.13", "UXV 256/t Laser Target Hatch", 13, 256).getStackForm(1L)); + 15138, "hatch.energytunnel1.tier.13", "UXV 256A/s Laser Target Hatch", 13, 256).getStackForm(1L)); eM_energyTunnel2_UXV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15148, "hatch.energytunnel2.tier.13", "UXV 1024/t Laser Target Hatch", 13, 1024).getStackForm(1L)); + 15148, "hatch.energytunnel2.tier.13", "UXV 1024A/s Laser Target Hatch", 13, 1024).getStackForm(1L)); eM_energyTunnel3_UXV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15158, "hatch.energytunnel3.tier.13", "UXV 4096/t Laser Target Hatch", 13, 4096).getStackForm(1L)); + 15158, "hatch.energytunnel3.tier.13", "UXV 4096A/s Laser Target Hatch", 13, 4096).getStackForm(1L)); eM_energyTunnel4_UXV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15168, "hatch.energytunnel4.tier.13", "UXV 16384/t Laser Target Hatch", 13, 16384).getStackForm(1L)); + 15168, "hatch.energytunnel4.tier.13", "UXV 16384A/s Laser Target Hatch", 13, 16384).getStackForm(1L)); eM_energyTunnel5_UXV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15178, "hatch.energytunnel5.tier.13", "UXV 65536/t Laser Target Hatch", 13, 65536).getStackForm(1L)); + 15178, "hatch.energytunnel5.tier.13", "UXV 65536A/s Laser Target Hatch", 13, 65536).getStackForm(1L)); eM_energyTunnel6_UXV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15188, "hatch.energytunnel6.tier.13", "UXV 262144/t Laser Target Hatch", 13, 262144).getStackForm(1L)); + 15188, "hatch.energytunnel6.tier.13", "UXV 262144A/s Laser Target Hatch", 13, 262144).getStackForm(1L)); eM_energyTunnel7_UXV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15198, "hatch.energytunnel7.tier.13", "UXV 1048576/t Laser Target Hatch", 13, 1048576).getStackForm(1L)); + 15198, "hatch.energytunnel7.tier.13", "UXV 1048576A/s Laser Target Hatch", 13, 1048576).getStackForm(1L)); eM_energyTunnel9001.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( 15199, "hatch.energytunnel.tier.14", "Legendary Laser Target Hatch", 14, (int) V[14]).getStackForm(1L)); @@ -406,139 +406,139 @@ public class MachineLoader implements Runnable { // =================================================================================================== eM_dynamoTunnel1_IV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15230, "hatch.dynamotunnel1.tier.05", "IV 256/t Laser Source Hatch", 5, 256).getStackForm(1L)); + 15230, "hatch.dynamotunnel1.tier.05", "IV 256A/s Laser Source Hatch", 5, 256).getStackForm(1L)); eM_dynamoTunnel2_IV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15240, "hatch.dynamotunnel2.tier.05", "IV 1024/t Laser Source Hatch", 5, 1024).getStackForm(1L)); + 15240, "hatch.dynamotunnel2.tier.05", "IV 1024A/s Laser Source Hatch", 5, 1024).getStackForm(1L)); eM_dynamoTunnel3_IV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15250, "hatch.dynamotunnel3.tier.05", "IV 4096/t Laser Source Hatch", 5, 4096).getStackForm(1L)); + 15250, "hatch.dynamotunnel3.tier.05", "IV 4096A/s Laser Source Hatch", 5, 4096).getStackForm(1L)); eM_dynamoTunnel4_IV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15260, "hatch.dynamotunnel4.tier.05", "IV 16384/t Laser Source Hatch", 5, 16384).getStackForm(1L)); + 15260, "hatch.dynamotunnel4.tier.05", "IV 16384A/s Laser Source Hatch", 5, 16384).getStackForm(1L)); eM_dynamoTunnel5_IV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15270, "hatch.dynamotunnel5.tier.05", "IV 65536/t Laser Source Hatch", 5, 65536).getStackForm(1L)); + 15270, "hatch.dynamotunnel5.tier.05", "IV 65536A/s Laser Source Hatch", 5, 65536).getStackForm(1L)); eM_dynamoTunnel6_IV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15280, "hatch.dynamotunnel6.tier.05", "IV 262144/t Laser Source Hatch", 5, 262144).getStackForm(1L)); + 15280, "hatch.dynamotunnel6.tier.05", "IV 262144A/s Laser Source Hatch", 5, 262144).getStackForm(1L)); eM_dynamoTunnel7_IV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15290, "hatch.dynamotunnel7.tier.05", "IV 1048576/t Laser Source Hatch", 5, 1048576).getStackForm(1L)); + 15290, "hatch.dynamotunnel7.tier.05", "IV 1048576A/s Laser Source Hatch", 5, 1048576).getStackForm(1L)); eM_dynamoTunnel1_LuV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15231, "hatch.dynamotunnel1.tier.06", "LuV 256/t Laser Source Hatch", 6, 256).getStackForm(1L)); + 15231, "hatch.dynamotunnel1.tier.06", "LuV 256A/s Laser Source Hatch", 6, 256).getStackForm(1L)); eM_dynamoTunnel2_LuV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15241, "hatch.dynamotunnel2.tier.06", "LuV 1024/t Laser Source Hatch", 6, 1024).getStackForm(1L)); + 15241, "hatch.dynamotunnel2.tier.06", "LuV 1024A/s Laser Source Hatch", 6, 1024).getStackForm(1L)); eM_dynamoTunnel3_LuV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15251, "hatch.dynamotunnel3.tier.06", "LuV 4096/t Laser Source Hatch", 6, 4096).getStackForm(1L)); + 15251, "hatch.dynamotunnel3.tier.06", "LuV 4096A/s Laser Source Hatch", 6, 4096).getStackForm(1L)); eM_dynamoTunnel4_LuV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15261, "hatch.dynamotunnel4.tier.06", "LuV 16384/t Laser Source Hatch", 6, 16384).getStackForm(1L)); + 15261, "hatch.dynamotunnel4.tier.06", "LuV 16384A/s Laser Source Hatch", 6, 16384).getStackForm(1L)); eM_dynamoTunnel5_LuV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15271, "hatch.dynamotunnel5.tier.06", "LuV 65536/t Laser Source Hatch", 6, 65536).getStackForm(1L)); + 15271, "hatch.dynamotunnel5.tier.06", "LuV 65536A/s Laser Source Hatch", 6, 65536).getStackForm(1L)); eM_dynamoTunnel6_LuV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15281, "hatch.dynamotunnel6.tier.06", "LuV 262144/t Laser Source Hatch", 6, 262144).getStackForm(1L)); + 15281, "hatch.dynamotunnel6.tier.06", "LuV 262144A/s Laser Source Hatch", 6, 262144).getStackForm(1L)); eM_dynamoTunnel7_LuV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15291, "hatch.dynamotunnel7.tier.06", "LuV 1048576/t Laser Source Hatch", 6, 1048576).getStackForm(1L)); + 15291, "hatch.dynamotunnel7.tier.06", "LuV 1048576A/s Laser Source Hatch", 6, 1048576).getStackForm(1L)); eM_dynamoTunnel1_ZPM.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15232, "hatch.dynamotunnel1.tier.07", "ZPM 256/t Laser Source Hatch", 7, 256).getStackForm(1L)); + 15232, "hatch.dynamotunnel1.tier.07", "ZPM 256A/s Laser Source Hatch", 7, 256).getStackForm(1L)); eM_dynamoTunnel2_ZPM.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15242, "hatch.dynamotunnel2.tier.07", "ZPM 1024/t Laser Source Hatch", 7, 1024).getStackForm(1L)); + 15242, "hatch.dynamotunnel2.tier.07", "ZPM 1024A/s Laser Source Hatch", 7, 1024).getStackForm(1L)); eM_dynamoTunnel3_ZPM.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15252, "hatch.dynamotunnel3.tier.07", "ZPM 4096/t Laser Source Hatch", 7, 4096).getStackForm(1L)); + 15252, "hatch.dynamotunnel3.tier.07", "ZPM 4096A/s Laser Source Hatch", 7, 4096).getStackForm(1L)); eM_dynamoTunnel4_ZPM.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15262, "hatch.dynamotunnel4.tier.07", "ZPM 16384/t Laser Source Hatch", 7, 16384).getStackForm(1L)); + 15262, "hatch.dynamotunnel4.tier.07", "ZPM 16384A/s Laser Source Hatch", 7, 16384).getStackForm(1L)); eM_dynamoTunnel5_ZPM.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15272, "hatch.dynamotunnel5.tier.07", "ZPM 65536/t Laser Source Hatch", 7, 65536).getStackForm(1L)); + 15272, "hatch.dynamotunnel5.tier.07", "ZPM 65536A/s Laser Source Hatch", 7, 65536).getStackForm(1L)); eM_dynamoTunnel6_ZPM.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15282, "hatch.dynamotunnel6.tier.07", "ZPM 262144/t Laser Source Hatch", 7, 262144).getStackForm(1L)); + 15282, "hatch.dynamotunnel6.tier.07", "ZPM 262144A/s Laser Source Hatch", 7, 262144).getStackForm(1L)); eM_dynamoTunnel7_ZPM.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15292, "hatch.dynamotunnel7.tier.07", "ZPM 1048576/t Laser Source Hatch", 7, 1048576).getStackForm(1L)); + 15292, "hatch.dynamotunnel7.tier.07", "ZPM 1048576A/s Laser Source Hatch", 7, 1048576).getStackForm(1L)); eM_dynamoTunnel1_UV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15233, "hatch.dynamotunnel1.tier.08", "UV 256/t Laser Source Hatch", 8, 256).getStackForm(1L)); + 15233, "hatch.dynamotunnel1.tier.08", "UV 256A/s Laser Source Hatch", 8, 256).getStackForm(1L)); eM_dynamoTunnel2_UV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15243, "hatch.dynamotunnel2.tier.08", "UV 1024/t Laser Source Hatch", 8, 1024).getStackForm(1L)); + 15243, "hatch.dynamotunnel2.tier.08", "UV 1024A/s Laser Source Hatch", 8, 1024).getStackForm(1L)); eM_dynamoTunnel3_UV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15253, "hatch.dynamotunnel3.tier.08", "UV 4096/t Laser Source Hatch", 8, 4096).getStackForm(1L)); + 15253, "hatch.dynamotunnel3.tier.08", "UV 4096A/s Laser Source Hatch", 8, 4096).getStackForm(1L)); eM_dynamoTunnel4_UV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15263, "hatch.dynamotunnel4.tier.08", "UV 16384/t Laser Source Hatch", 8, 16384).getStackForm(1L)); + 15263, "hatch.dynamotunnel4.tier.08", "UV 16384A/s Laser Source Hatch", 8, 16384).getStackForm(1L)); eM_dynamoTunnel5_UV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15273, "hatch.dynamotunnel5.tier.08", "UV 65536/t Laser Source Hatch", 8, 65536).getStackForm(1L)); + 15273, "hatch.dynamotunnel5.tier.08", "UV 65536A/s Laser Source Hatch", 8, 65536).getStackForm(1L)); eM_dynamoTunnel6_UV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15283, "hatch.dynamotunnel6.tier.08", "UV 262144/t Laser Source Hatch", 8, 262144).getStackForm(1L)); + 15283, "hatch.dynamotunnel6.tier.08", "UV 262144A/s Laser Source Hatch", 8, 262144).getStackForm(1L)); eM_dynamoTunnel7_UV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15293, "hatch.dynamotunnel7.tier.08", "UV 1048576/t Laser Source Hatch", 8, 1048576).getStackForm(1L)); + 15293, "hatch.dynamotunnel7.tier.08", "UV 1048576A/s Laser Source Hatch", 8, 1048576).getStackForm(1L)); eM_dynamoTunnel1_UHV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15234, "hatch.dynamotunnel1.tier.09", "UHV 256/t Laser Source Hatch", 9, 256).getStackForm(1L)); + 15234, "hatch.dynamotunnel1.tier.09", "UHV 256A/s Laser Source Hatch", 9, 256).getStackForm(1L)); eM_dynamoTunnel2_UHV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15244, "hatch.dynamotunnel2.tier.09", "UHV 1024/t Laser Source Hatch", 9, 1024).getStackForm(1L)); + 15244, "hatch.dynamotunnel2.tier.09", "UHV 1024A/s Laser Source Hatch", 9, 1024).getStackForm(1L)); eM_dynamoTunnel3_UHV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15254, "hatch.dynamotunnel3.tier.09", "UHV 4096/t Laser Source Hatch", 9, 4096).getStackForm(1L)); + 15254, "hatch.dynamotunnel3.tier.09", "UHV 4096A/s Laser Source Hatch", 9, 4096).getStackForm(1L)); eM_dynamoTunnel4_UHV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15264, "hatch.dynamotunnel4.tier.09", "UHV 16384/t Laser Source Hatch", 9, 16384).getStackForm(1L)); + 15264, "hatch.dynamotunnel4.tier.09", "UHV 16384A/s Laser Source Hatch", 9, 16384).getStackForm(1L)); eM_dynamoTunnel5_UHV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15274, "hatch.dynamotunnel5.tier.09", "UHV 65536/t Laser Source Hatch", 9, 65536).getStackForm(1L)); + 15274, "hatch.dynamotunnel5.tier.09", "UHV 65536A/s Laser Source Hatch", 9, 65536).getStackForm(1L)); eM_dynamoTunnel6_UHV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15284, "hatch.dynamotunnel6.tier.09", "UHV 262144/t Laser Source Hatch", 9, 262144).getStackForm(1L)); + 15284, "hatch.dynamotunnel6.tier.09", "UHV 262144A/s Laser Source Hatch", 9, 262144).getStackForm(1L)); eM_dynamoTunnel7_UHV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15294, "hatch.dynamotunnel7.tier.09", "UHV 1048576/t Laser Source Hatch", 9, 1048576).getStackForm(1L)); + 15294, "hatch.dynamotunnel7.tier.09", "UHV 1048576A/s Laser Source Hatch", 9, 1048576).getStackForm(1L)); eM_dynamoTunnel1_UEV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15235, "hatch.dynamotunnel1.tier.10", "UEV 256/t Laser Source Hatch", 10, 256).getStackForm(1L)); + 15235, "hatch.dynamotunnel1.tier.10", "UEV 256A/s Laser Source Hatch", 10, 256).getStackForm(1L)); eM_dynamoTunnel2_UEV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15245, "hatch.dynamotunnel2.tier.10", "UEV 1024/t Laser Source Hatch", 10, 1024).getStackForm(1L)); + 15245, "hatch.dynamotunnel2.tier.10", "UEV 1024A/s Laser Source Hatch", 10, 1024).getStackForm(1L)); eM_dynamoTunnel3_UEV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15255, "hatch.dynamotunnel3.tier.10", "UEV 4096/t Laser Source Hatch", 10, 4096).getStackForm(1L)); + 15255, "hatch.dynamotunnel3.tier.10", "UEV 4096A/s Laser Source Hatch", 10, 4096).getStackForm(1L)); eM_dynamoTunnel4_UEV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15265, "hatch.dynamotunnel4.tier.10", "UEV 16384/t Laser Source Hatch", 10, 16384).getStackForm(1L)); + 15265, "hatch.dynamotunnel4.tier.10", "UEV 16384A/s Laser Source Hatch", 10, 16384).getStackForm(1L)); eM_dynamoTunnel5_UEV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15275, "hatch.dynamotunnel5.tier.10", "UEV 65536/t Laser Source Hatch", 10, 65536).getStackForm(1L)); + 15275, "hatch.dynamotunnel5.tier.10", "UEV 65536A/s Laser Source Hatch", 10, 65536).getStackForm(1L)); eM_dynamoTunnel6_UEV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15285, "hatch.dynamotunnel6.tier.10", "UEV 262144/t Laser Source Hatch", 10, 262144).getStackForm(1L)); + 15285, "hatch.dynamotunnel6.tier.10", "UEV 262144A/s Laser Source Hatch", 10, 262144).getStackForm(1L)); eM_dynamoTunnel7_UEV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15295, "hatch.dynamotunnel7.tier.10", "UEV 1048576/t Laser Source Hatch", 10, 1048576).getStackForm(1L)); + 15295, "hatch.dynamotunnel7.tier.10", "UEV 1048576A/s Laser Source Hatch", 10, 1048576).getStackForm(1L)); eM_dynamoTunnel1_UIV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15236, "hatch.dynamotunnel1.tier.11", "UIV 256/t Laser Source Hatch", 11, 256).getStackForm(1L)); + 15236, "hatch.dynamotunnel1.tier.11", "UIV 256A/s Laser Source Hatch", 11, 256).getStackForm(1L)); eM_dynamoTunnel2_UIV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15246, "hatch.dynamotunnel2.tier.11", "UIV 1024/t Laser Source Hatch", 11, 1024).getStackForm(1L)); + 15246, "hatch.dynamotunnel2.tier.11", "UIV 1024A/s Laser Source Hatch", 11, 1024).getStackForm(1L)); eM_dynamoTunnel3_UIV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15256, "hatch.dynamotunnel3.tier.11", "UIV 4096/t Laser Source Hatch", 11, 4096).getStackForm(1L)); + 15256, "hatch.dynamotunnel3.tier.11", "UIV 4096A/s Laser Source Hatch", 11, 4096).getStackForm(1L)); eM_dynamoTunnel4_UIV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15266, "hatch.dynamotunnel4.tier.11", "UIV 16384/t Laser Source Hatch", 11, 16384).getStackForm(1L)); + 15266, "hatch.dynamotunnel4.tier.11", "UIV 16384A/s Laser Source Hatch", 11, 16384).getStackForm(1L)); eM_dynamoTunnel5_UIV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15276, "hatch.dynamotunnel5.tier.11", "UIV 65536/t Laser Source Hatch", 11, 65536).getStackForm(1L)); + 15276, "hatch.dynamotunnel5.tier.11", "UIV 65536A/s Laser Source Hatch", 11, 65536).getStackForm(1L)); eM_dynamoTunnel6_UIV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15286, "hatch.dynamotunnel6.tier.11", "UIV 262144/t Laser Source Hatch", 11, 262144).getStackForm(1L)); + 15286, "hatch.dynamotunnel6.tier.11", "UIV 262144A/s Laser Source Hatch", 11, 262144).getStackForm(1L)); eM_dynamoTunnel7_UIV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15296, "hatch.dynamotunnel7.tier.11", "UIV 1048576/t Laser Source Hatch", 11, 1048576).getStackForm(1L)); + 15296, "hatch.dynamotunnel7.tier.11", "UIV 1048576A/s Laser Source Hatch", 11, 1048576).getStackForm(1L)); eM_dynamoTunnel1_UMV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15237, "hatch.dynamotunnel1.tier.12", "UMV 256/t Laser Source Hatch", 12, 256).getStackForm(1L)); + 15237, "hatch.dynamotunnel1.tier.12", "UMV 256A/s Laser Source Hatch", 12, 256).getStackForm(1L)); eM_dynamoTunnel2_UMV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15247, "hatch.dynamotunnel2.tier.12", "UMV 1024/t Laser Source Hatch", 12, 1024).getStackForm(1L)); + 15247, "hatch.dynamotunnel2.tier.12", "UMV 1024A/s Laser Source Hatch", 12, 1024).getStackForm(1L)); eM_dynamoTunnel3_UMV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15257, "hatch.dynamotunnel3.tier.12", "UMV 4096/t Laser Source Hatch", 12, 4096).getStackForm(1L)); + 15257, "hatch.dynamotunnel3.tier.12", "UMV 4096A/s Laser Source Hatch", 12, 4096).getStackForm(1L)); eM_dynamoTunnel4_UMV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15267, "hatch.dynamotunnel4.tier.12", "UMV 16384/t Laser Source Hatch", 12, 16384).getStackForm(1L)); + 15267, "hatch.dynamotunnel4.tier.12", "UMV 16384A/s Laser Source Hatch", 12, 16384).getStackForm(1L)); eM_dynamoTunnel5_UMV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15277, "hatch.dynamotunnel5.tier.12", "UMV 65536/t Laser Source Hatch", 12, 65536).getStackForm(1L)); + 15277, "hatch.dynamotunnel5.tier.12", "UMV 65536A/s Laser Source Hatch", 12, 65536).getStackForm(1L)); eM_dynamoTunnel6_UMV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15287, "hatch.dynamotunnel6.tier.12", "UMV 262144/t Laser Source Hatch", 12, 262144).getStackForm(1L)); + 15287, "hatch.dynamotunnel6.tier.12", "UMV 262144A/s Laser Source Hatch", 12, 262144).getStackForm(1L)); eM_dynamoTunnel7_UMV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15297, "hatch.dynamotunnel7.tier.12", "UMV 1048576/t Laser Source Hatch", 12, 1048576).getStackForm(1L)); + 15297, "hatch.dynamotunnel7.tier.12", "UMV 1048576A/s Laser Source Hatch", 12, 1048576).getStackForm(1L)); eM_dynamoTunnel1_UXV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15238, "hatch.dynamotunnel1.tier.13", "UXV 256/t Laser Source Hatch", 13, 256).getStackForm(1L)); + 15238, "hatch.dynamotunnel1.tier.13", "UXV 256A/s Laser Source Hatch", 13, 256).getStackForm(1L)); eM_dynamoTunnel2_UXV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15248, "hatch.dynamotunnel2.tier.13", "UXV 1024/t Laser Source Hatch", 13, 1024).getStackForm(1L)); + 15248, "hatch.dynamotunnel2.tier.13", "UXV 1024A/s Laser Source Hatch", 13, 1024).getStackForm(1L)); eM_dynamoTunnel3_UXV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15258, "hatch.dynamotunnel3.tier.13", "UXV 4096/t Laser Source Hatch", 13, 4096).getStackForm(1L)); + 15258, "hatch.dynamotunnel3.tier.13", "UXV 4096A/s Laser Source Hatch", 13, 4096).getStackForm(1L)); eM_dynamoTunnel4_UXV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15268, "hatch.dynamotunnel4.tier.13", "UXV 16384/t Laser Source Hatch", 13, 16384).getStackForm(1L)); + 15268, "hatch.dynamotunnel4.tier.13", "UXV 16384A/s Laser Source Hatch", 13, 16384).getStackForm(1L)); eM_dynamoTunnel5_UXV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15278, "hatch.dynamotunnel5.tier.13", "UXV 65536/t Laser Source Hatch", 13, 65536).getStackForm(1L)); + 15278, "hatch.dynamotunnel5.tier.13", "UXV 65536A/s Laser Source Hatch", 13, 65536).getStackForm(1L)); eM_dynamoTunnel6_UXV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15288, "hatch.dynamotunnel6.tier.13", "UXV 262144/t Laser Source Hatch", 13, 262144).getStackForm(1L)); + 15288, "hatch.dynamotunnel6.tier.13", "UXV 262144A/s Laser Source Hatch", 13, 262144).getStackForm(1L)); eM_dynamoTunnel7_UXV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15298, "hatch.dynamotunnel7.tier.13", "UXV 1048576/t Laser Source Hatch", 13, 1048576).getStackForm(1L)); + 15298, "hatch.dynamotunnel7.tier.13", "UXV 1048576A/s Laser Source Hatch", 13, 1048576).getStackForm(1L)); eM_dynamoTunnel9001.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( 15299, "hatch.dynamotunnel.tier.14", "Legendary Laser Source Hatch", 14, (int) V[14]).getStackForm(1L)); diff --git a/src/main/resources/assets/tectech/lang/en_US.lang b/src/main/resources/assets/tectech/lang/en_US.lang index 5005a90c60..70f7d5ab8f 100644 --- a/src/main/resources/assets/tectech/lang/en_US.lang +++ b/src/main/resources/assets/tectech/lang/en_US.lang @@ -210,69 +210,69 @@ gt.blockmachines.hatch.energymulti64.tier.13.name=UXV 64A Energy Hatch gt.blockmachines.hatch.energymulti.desc.0=Multiple Ampere Energy Injector for Multiblocks gt.blockmachines.hatch.energymulti.desc.1=Amperes In -gt.blockmachines.hatch.energytunnel1.tier.05.name=IV 256/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel2.tier.05.name=IV 1024/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel3.tier.05.name=IV 4096/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel4.tier.05.name=IV 16384/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel5.tier.05.name=IV 65536/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel6.tier.05.name=IV 262144/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel7.tier.05.name=IV 1048576/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel1.tier.06.name=LuV 256/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel2.tier.06.name=LuV 1024/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel3.tier.06.name=LuV 4096/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel4.tier.06.name=LuV 16384/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel5.tier.06.name=LuV 65536/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel6.tier.06.name=LuV 262144/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel7.tier.06.name=LuV 1048576/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel1.tier.07.name=ZPM 256/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel2.tier.07.name=ZPM 1024/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel3.tier.07.name=ZPM 4096/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel4.tier.07.name=ZPM 16384/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel5.tier.07.name=ZPM 65536/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel6.tier.07.name=ZPM 262144/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel7.tier.07.name=ZPM 1048576/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel1.tier.08.name=UV 256/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel2.tier.08.name=UV 1024/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel3.tier.08.name=UV 4096/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel4.tier.08.name=UV 16384/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel5.tier.08.name=UV 65536/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel6.tier.08.name=UV 262144/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel7.tier.08.name=UV 1048576/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel1.tier.09.name=UHV 256/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel2.tier.09.name=UHV 1024/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel3.tier.09.name=UHV 4096/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel4.tier.09.name=UHV 16384/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel5.tier.09.name=UHV 65536/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel6.tier.09.name=UHV 262144/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel7.tier.09.name=UHV 1048576/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel1.tier.10.name=UEV 256/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel2.tier.10.name=UEV 1024/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel3.tier.10.name=UEV 4096/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel4.tier.10.name=UEV 16384/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel5.tier.10.name=UEV 65536/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel6.tier.10.name=UEV 262144/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel7.tier.10.name=UEV 1048576/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel1.tier.11.name=UIV 256/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel2.tier.11.name=UIV 1024/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel3.tier.11.name=UIV 4096/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel4.tier.11.name=UIV 16384/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel5.tier.11.name=UIV 65536/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel6.tier.11.name=UIV 262144/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel7.tier.11.name=UIV 1048576/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel1.tier.12.name=UMV 256/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel2.tier.12.name=UMV 1024/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel3.tier.12.name=UMV 4096/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel4.tier.12.name=UMV 16384/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel5.tier.12.name=UMV 65536/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel6.tier.12.name=UMV 262144/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel7.tier.12.name=UMV 1048576/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel1.tier.13.name=UXV 256/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel2.tier.13.name=UXV 1024/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel3.tier.13.name=UXV 4096/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel4.tier.13.name=UXV 16384/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel5.tier.13.name=UXV 65536/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel6.tier.13.name=UXV 262144/t Laser Target Hatch -gt.blockmachines.hatch.energytunnel7.tier.13.name=UXV 1048576/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel1.tier.05.name=IV 256A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel2.tier.05.name=IV 1024A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel3.tier.05.name=IV 4096A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel4.tier.05.name=IV 16384A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel5.tier.05.name=IV 65536A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel6.tier.05.name=IV 262144A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel7.tier.05.name=IV 1048576A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel1.tier.06.name=LuV 256A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel2.tier.06.name=LuV 1024A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel3.tier.06.name=LuV 4096A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel4.tier.06.name=LuV 16384A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel5.tier.06.name=LuV 65536A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel6.tier.06.name=LuV 262144A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel7.tier.06.name=LuV 1048576A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel1.tier.07.name=ZPM 256A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel2.tier.07.name=ZPM 1024A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel3.tier.07.name=ZPM 4096A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel4.tier.07.name=ZPM 16384A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel5.tier.07.name=ZPM 65536A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel6.tier.07.name=ZPM 262144A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel7.tier.07.name=ZPM 1048576A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel1.tier.08.name=UV 256A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel2.tier.08.name=UV 1024A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel3.tier.08.name=UV 4096A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel4.tier.08.name=UV 16384A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel5.tier.08.name=UV 65536A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel6.tier.08.name=UV 262144A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel7.tier.08.name=UV 1048576A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel1.tier.09.name=UHV 256A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel2.tier.09.name=UHV 1024A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel3.tier.09.name=UHV 4096A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel4.tier.09.name=UHV 16384A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel5.tier.09.name=UHV 65536A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel6.tier.09.name=UHV 262144A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel7.tier.09.name=UHV 1048576A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel1.tier.10.name=UEV 256A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel2.tier.10.name=UEV 1024A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel3.tier.10.name=UEV 4096A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel4.tier.10.name=UEV 16384A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel5.tier.10.name=UEV 65536A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel6.tier.10.name=UEV 262144A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel7.tier.10.name=UEV 1048576A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel1.tier.11.name=UIV 256A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel2.tier.11.name=UIV 1024A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel3.tier.11.name=UIV 4096A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel4.tier.11.name=UIV 16384A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel5.tier.11.name=UIV 65536A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel6.tier.11.name=UIV 262144A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel7.tier.11.name=UIV 1048576A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel1.tier.12.name=UMV 256A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel2.tier.12.name=UMV 1024A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel3.tier.12.name=UMV 4096A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel4.tier.12.name=UMV 16384A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel5.tier.12.name=UMV 65536A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel6.tier.12.name=UMV 262144A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel7.tier.12.name=UMV 1048576A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel1.tier.13.name=UXV 256A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel2.tier.13.name=UXV 1024A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel3.tier.13.name=UXV 4096A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel4.tier.13.name=UXV 16384A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel5.tier.13.name=UXV 65536A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel6.tier.13.name=UXV 262144A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel7.tier.13.name=UXV 1048576A/s Laser Target Hatch gt.blockmachines.hatch.energytunnel.tier.14.name=Legendary Laser Target Hatch gt.blockmachines.hatch.energytunnel.desc.0=Energy injecting terminal for Multiblocks gt.blockmachines.hatch.energytunnel.desc.1=Throughput @@ -307,69 +307,69 @@ gt.blockmachines.hatch.dynamomulti64.tier.13.name=IV 64A Dynamo Hatch gt.blockmachines.hatch.dynamomulti.desc.0=Multiple Ampere Energy Extractor for Multiblocks gt.blockmachines.hatch.dynamomulti.desc.1=Amperes Out -gt.blockmachines.hatch.dynamotunnel1.tier.05.name=IV 256/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel2.tier.05.name=IV 1024/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel3.tier.05.name=IV 4096/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel4.tier.05.name=IV 16384/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel5.tier.05.name=IV 65536/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel6.tier.05.name=IV 262144/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel7.tier.05.name=IV 1048576/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel1.tier.06.name=LuV 256/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel2.tier.06.name=LuV 1024/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel3.tier.06.name=LuV 4096/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel4.tier.06.name=LuV 16384/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel5.tier.06.name=LuV 65536/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel6.tier.06.name=LuV 262144/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel7.tier.06.name=LuV 1048576/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel1.tier.07.name=ZPM 256/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel2.tier.07.name=ZPM 1024/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel3.tier.07.name=ZPM 4096/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel4.tier.07.name=ZPM 16384/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel5.tier.07.name=ZPM 65536/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel6.tier.07.name=ZPM 262144/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel7.tier.07.name=ZPM 1048576/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel1.tier.08.name=UV 256/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel2.tier.08.name=UV 1024/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel3.tier.08.name=UV 4096/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel4.tier.08.name=UV 16384/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel5.tier.08.name=UV 65536/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel6.tier.08.name=UV 262144/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel7.tier.08.name=UV 1048576/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel1.tier.09.name=UHV 256/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel2.tier.09.name=UHV 1024/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel3.tier.09.name=UHV 4096/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel4.tier.09.name=UHV 16384/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel5.tier.09.name=UHV 65536/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel6.tier.09.name=UHV 262144/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel7.tier.09.name=UHV 1048576/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel1.tier.10.name=UEV 256/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel2.tier.10.name=UEV 1024/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel3.tier.10.name=UEV 4096/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel4.tier.10.name=UEV 16384/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel5.tier.10.name=UEV 65536/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel6.tier.10.name=UEV 262144/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel7.tier.10.name=UEV 1048576/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel1.tier.11.name=UIV 256/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel2.tier.11.name=UIV 1024/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel3.tier.11.name=UIV 4096/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel4.tier.11.name=UIV 16384/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel5.tier.11.name=UIV 65536/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel6.tier.11.name=UIV 262144/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel7.tier.11.name=UIV 1048576/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel1.tier.12.name=UMV 256/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel2.tier.12.name=UMV 1024/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel3.tier.12.name=UMV 4096/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel4.tier.12.name=UMV 16384/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel5.tier.12.name=UMV 65536/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel6.tier.12.name=UMV 262144/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel7.tier.12.name=UMV 1048576/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel1.tier.13.name=UXV 256/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel2.tier.13.name=UXV 1024/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel3.tier.13.name=UXV 4096/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel4.tier.13.name=UXV 16384/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel5.tier.13.name=UXV 65536/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel6.tier.13.name=UXV 262144/t Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel7.tier.13.name=UXV 1048576/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel1.tier.05.name=IV 256A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel2.tier.05.name=IV 1024A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel3.tier.05.name=IV 4096A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel4.tier.05.name=IV 16384A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel5.tier.05.name=IV 65536A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel6.tier.05.name=IV 262144A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel7.tier.05.name=IV 1048576A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel1.tier.06.name=LuV 256A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel2.tier.06.name=LuV 1024A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel3.tier.06.name=LuV 4096A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel4.tier.06.name=LuV 16384A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel5.tier.06.name=LuV 65536A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel6.tier.06.name=LuV 262144A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel7.tier.06.name=LuV 1048576A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel1.tier.07.name=ZPM 256A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel2.tier.07.name=ZPM 1024A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel3.tier.07.name=ZPM 4096A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel4.tier.07.name=ZPM 16384A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel5.tier.07.name=ZPM 65536A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel6.tier.07.name=ZPM 262144A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel7.tier.07.name=ZPM 1048576A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel1.tier.08.name=UV 256A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel2.tier.08.name=UV 1024A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel3.tier.08.name=UV 4096A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel4.tier.08.name=UV 16384A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel5.tier.08.name=UV 65536A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel6.tier.08.name=UV 262144A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel7.tier.08.name=UV 1048576A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel1.tier.09.name=UHV 256A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel2.tier.09.name=UHV 1024A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel3.tier.09.name=UHV 4096A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel4.tier.09.name=UHV 16384A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel5.tier.09.name=UHV 65536A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel6.tier.09.name=UHV 262144A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel7.tier.09.name=UHV 1048576A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel1.tier.10.name=UEV 256A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel2.tier.10.name=UEV 1024A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel3.tier.10.name=UEV 4096A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel4.tier.10.name=UEV 16384A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel5.tier.10.name=UEV 65536A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel6.tier.10.name=UEV 262144A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel7.tier.10.name=UEV 1048576A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel1.tier.11.name=UIV 256A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel2.tier.11.name=UIV 1024A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel3.tier.11.name=UIV 4096A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel4.tier.11.name=UIV 16384A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel5.tier.11.name=UIV 65536A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel6.tier.11.name=UIV 262144A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel7.tier.11.name=UIV 1048576A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel1.tier.12.name=UMV 256A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel2.tier.12.name=UMV 1024A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel3.tier.12.name=UMV 4096A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel4.tier.12.name=UMV 16384A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel5.tier.12.name=UMV 65536A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel6.tier.12.name=UMV 262144A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel7.tier.12.name=UMV 1048576A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel1.tier.13.name=UXV 256A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel2.tier.13.name=UXV 1024A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel3.tier.13.name=UXV 4096A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel4.tier.13.name=UXV 16384A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel5.tier.13.name=UXV 65536A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel6.tier.13.name=UXV 262144A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel7.tier.13.name=UXV 1048576A/s Laser Source Hatch gt.blockmachines.hatch.dynamotunnel.tier.14.name=Legendary Laser Source Hatch gt.blockmachines.hatch.dynamotunnel.desc.0=Energy extracting terminal for Multiblocks gt.blockmachines.hatch.dynamotunnel.desc.1=Throughput diff --git a/src/main/resources/assets/tectech/lang/zh_CN.lang b/src/main/resources/assets/tectech/lang/zh_CN.lang index a96b13a58f..3484eb3579 100644 --- a/src/main/resources/assets/tectech/lang/zh_CN.lang +++ b/src/main/resources/assets/tectech/lang/zh_CN.lang @@ -210,69 +210,69 @@ gt.blockmachines.hatch.energymulti64.tier.13.name=64安UXV能源仓 gt.blockmachines.hatch.energymulti.desc.0=为多方块机器以高电流输入能源 gt.blockmachines.hatch.energymulti.desc.1=输入电流 -gt.blockmachines.hatch.energytunnel1.tier.05.name=IV 256/t 激光靶仓 -gt.blockmachines.hatch.energytunnel2.tier.05.name=IV 1024/t 激光靶仓 -gt.blockmachines.hatch.energytunnel3.tier.05.name=IV 4096/t 激光靶仓 -gt.blockmachines.hatch.energytunnel4.tier.05.name=IV 16384/t 激光靶仓 -gt.blockmachines.hatch.energytunnel5.tier.05.name=IV 65536/t 激光靶仓 -gt.blockmachines.hatch.energytunnel6.tier.05.name=IV 262144/t 激光靶仓 -gt.blockmachines.hatch.energytunnel7.tier.05.name=IV 1048576/t 激光靶仓 -gt.blockmachines.hatch.energytunnel1.tier.06.name=LuV 256/t 激光靶仓 -gt.blockmachines.hatch.energytunnel2.tier.06.name=LuV 1024/t 激光靶仓 -gt.blockmachines.hatch.energytunnel3.tier.06.name=LuV 4096/t 激光靶仓 -gt.blockmachines.hatch.energytunnel4.tier.06.name=LuV 16384/t 激光靶仓 -gt.blockmachines.hatch.energytunnel5.tier.06.name=LuV 65536/t 激光靶仓 -gt.blockmachines.hatch.energytunnel6.tier.06.name=LuV 262144/t 激光靶仓 -gt.blockmachines.hatch.energytunnel7.tier.06.name=LuV 1048576/t 激光靶仓 -gt.blockmachines.hatch.energytunnel1.tier.07.name=ZPM 256/t 激光靶仓 -gt.blockmachines.hatch.energytunnel2.tier.07.name=ZPM 1024/t 激光靶仓 -gt.blockmachines.hatch.energytunnel3.tier.07.name=ZPM 4096/t 激光靶仓 -gt.blockmachines.hatch.energytunnel4.tier.07.name=ZPM 16384/t 激光靶仓 -gt.blockmachines.hatch.energytunnel5.tier.07.name=ZPM 65536/t 激光靶仓 -gt.blockmachines.hatch.energytunnel6.tier.07.name=ZPM 262144/t 激光靶仓 -gt.blockmachines.hatch.energytunnel7.tier.07.name=ZPM 1048576/t 激光靶仓 -gt.blockmachines.hatch.energytunnel1.tier.08.name=UV 256/t 激光靶仓 -gt.blockmachines.hatch.energytunnel2.tier.08.name=UV 1024/t 激光靶仓 -gt.blockmachines.hatch.energytunnel3.tier.08.name=UV 4096/t 激光靶仓 -gt.blockmachines.hatch.energytunnel4.tier.08.name=UV 16384/t 激光靶仓 -gt.blockmachines.hatch.energytunnel5.tier.08.name=UV 65536/t 激光靶仓 -gt.blockmachines.hatch.energytunnel6.tier.08.name=UV 262144/t 激光靶仓 -gt.blockmachines.hatch.energytunnel7.tier.08.name=UV 1048576/t 激光靶仓 -gt.blockmachines.hatch.energytunnel1.tier.09.name=UHV 256/t 激光靶仓 -gt.blockmachines.hatch.energytunnel2.tier.09.name=UHV 1024/t 激光靶仓 -gt.blockmachines.hatch.energytunnel3.tier.09.name=UHV 4096/t 激光靶仓 -gt.blockmachines.hatch.energytunnel4.tier.09.name=UHV 16384/t 激光靶仓 -gt.blockmachines.hatch.energytunnel5.tier.09.name=UHV 65536/t 激光靶仓 -gt.blockmachines.hatch.energytunnel6.tier.09.name=UHV 262144/t 激光靶仓 -gt.blockmachines.hatch.energytunnel7.tier.09.name=UHV 1048576/t 激光靶仓 -gt.blockmachines.hatch.energytunnel1.tier.10.name=UEV 256/t 激光靶仓 -gt.blockmachines.hatch.energytunnel2.tier.10.name=UEV 1024/t 激光靶仓 -gt.blockmachines.hatch.energytunnel3.tier.10.name=UEV 4096/t 激光靶仓 -gt.blockmachines.hatch.energytunnel4.tier.10.name=UEV 16384/t 激光靶仓 -gt.blockmachines.hatch.energytunnel5.tier.10.name=UEV 65536/t 激光靶仓 -gt.blockmachines.hatch.energytunnel6.tier.10.name=UEV 262144/t 激光靶仓 -gt.blockmachines.hatch.energytunnel7.tier.10.name=UEV 1048576/t 激光靶仓 -gt.blockmachines.hatch.energytunnel1.tier.11.name=UIV 256/t 激光靶仓 -gt.blockmachines.hatch.energytunnel2.tier.11.name=UIV 1024/t 激光靶仓 -gt.blockmachines.hatch.energytunnel3.tier.11.name=UIV 4096/t 激光靶仓 -gt.blockmachines.hatch.energytunnel4.tier.11.name=UIV 16384/t 激光靶仓 -gt.blockmachines.hatch.energytunnel5.tier.11.name=UIV 65536/t 激光靶仓 -gt.blockmachines.hatch.energytunnel6.tier.11.name=UIV 262144/t 激光靶仓 -gt.blockmachines.hatch.energytunnel7.tier.11.name=UIV 1048576/t 激光靶仓 -gt.blockmachines.hatch.energytunnel1.tier.12.name=UMV 256/t 激光靶仓 -gt.blockmachines.hatch.energytunnel2.tier.12.name=UMV 1024/t 激光靶仓 -gt.blockmachines.hatch.energytunnel3.tier.12.name=UMV 4096/t 激光靶仓 -gt.blockmachines.hatch.energytunnel4.tier.12.name=UMV 16384/t 激光靶仓 -gt.blockmachines.hatch.energytunnel5.tier.12.name=UMV 65536/t 激光靶仓 -gt.blockmachines.hatch.energytunnel6.tier.12.name=UMV 262144/t 激光靶仓 -gt.blockmachines.hatch.energytunnel7.tier.12.name=UMV 1048576/t 激光靶仓 -gt.blockmachines.hatch.energytunnel1.tier.13.name=UXV 256/t 激光靶仓 -gt.blockmachines.hatch.energytunnel2.tier.13.name=UXV 1024/t 激光靶仓 -gt.blockmachines.hatch.energytunnel3.tier.13.name=UXV 4096/t 激光靶仓 -gt.blockmachines.hatch.energytunnel4.tier.13.name=UXV 16384/t 激光靶仓 -gt.blockmachines.hatch.energytunnel5.tier.13.name=UXV 65536/t 激光靶仓 -gt.blockmachines.hatch.energytunnel6.tier.13.name=UXV 262144/t 激光靶仓 -gt.blockmachines.hatch.energytunnel7.tier.13.name=UXV 1048576/t 激光靶仓 +gt.blockmachines.hatch.energytunnel1.tier.05.name=IV 256A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel2.tier.05.name=IV 1024A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel3.tier.05.name=IV 4096A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel4.tier.05.name=IV 16384A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel5.tier.05.name=IV 65536A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel6.tier.05.name=IV 262144A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel7.tier.05.name=IV 1048576A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel1.tier.06.name=LuV 256A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel2.tier.06.name=LuV 1024A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel3.tier.06.name=LuV 4096A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel4.tier.06.name=LuV 16384A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel5.tier.06.name=LuV 65536A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel6.tier.06.name=LuV 262144A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel7.tier.06.name=LuV 1048576A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel1.tier.07.name=ZPM 256A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel2.tier.07.name=ZPM 1024A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel3.tier.07.name=ZPM 4096A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel4.tier.07.name=ZPM 16384A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel5.tier.07.name=ZPM 65536A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel6.tier.07.name=ZPM 262144A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel7.tier.07.name=ZPM 1048576A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel1.tier.08.name=UV 256A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel2.tier.08.name=UV 1024A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel3.tier.08.name=UV 4096A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel4.tier.08.name=UV 16384A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel5.tier.08.name=UV 65536A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel6.tier.08.name=UV 262144A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel7.tier.08.name=UV 1048576A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel1.tier.09.name=UHV 256A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel2.tier.09.name=UHV 1024A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel3.tier.09.name=UHV 4096A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel4.tier.09.name=UHV 16384A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel5.tier.09.name=UHV 65536A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel6.tier.09.name=UHV 262144A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel7.tier.09.name=UHV 1048576A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel1.tier.10.name=UEV 256A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel2.tier.10.name=UEV 1024A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel3.tier.10.name=UEV 4096A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel4.tier.10.name=UEV 16384A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel5.tier.10.name=UEV 65536A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel6.tier.10.name=UEV 262144A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel7.tier.10.name=UEV 1048576A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel1.tier.11.name=UIV 256A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel2.tier.11.name=UIV 1024A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel3.tier.11.name=UIV 4096A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel4.tier.11.name=UIV 16384A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel5.tier.11.name=UIV 65536A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel6.tier.11.name=UIV 262144A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel7.tier.11.name=UIV 1048576A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel1.tier.12.name=UMV 256A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel2.tier.12.name=UMV 1024A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel3.tier.12.name=UMV 4096A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel4.tier.12.name=UMV 16384A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel5.tier.12.name=UMV 65536A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel6.tier.12.name=UMV 262144A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel7.tier.12.name=UMV 1048576A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel1.tier.13.name=UXV 256A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel2.tier.13.name=UXV 1024A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel3.tier.13.name=UXV 4096A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel4.tier.13.name=UXV 16384A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel5.tier.13.name=UXV 65536A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel6.tier.13.name=UXV 262144A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel7.tier.13.name=UXV 1048576A/s 激光靶仓 gt.blockmachines.hatch.energytunnel.tier.14.name=传奇激光靶仓 gt.blockmachines.hatch.energytunnel.desc.0=多方块机器的能量输入端 gt.blockmachines.hatch.energytunnel.desc.1=通量 @@ -307,69 +307,69 @@ gt.blockmachines.hatch.dynamomulti64.tier.13.name=64安IV动力仓 gt.blockmachines.hatch.dynamomulti.desc.0=从多方块机器以高电流输出能源 gt.blockmachines.hatch.dynamomulti.desc.1=输出电流 -gt.blockmachines.hatch.dynamotunnel1.tier.05.name=IV 256/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel2.tier.05.name=IV 1024/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel3.tier.05.name=IV 4096/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel4.tier.05.name=IV 16384/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel5.tier.05.name=IV 65536/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel6.tier.05.name=IV 262144/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel7.tier.05.name=IV 1048576/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel1.tier.06.name=LuV 256/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel2.tier.06.name=LuV 1024/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel3.tier.06.name=LuV 4096/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel4.tier.06.name=LuV 16384/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel5.tier.06.name=LuV 65536/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel6.tier.06.name=LuV 262144/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel7.tier.06.name=LuV 1048576/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel1.tier.07.name=ZPM 256/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel2.tier.07.name=ZPM 1024/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel3.tier.07.name=ZPM 4096/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel4.tier.07.name=ZPM 16384/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel5.tier.07.name=ZPM 65536/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel6.tier.07.name=ZPM 262144/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel7.tier.07.name=ZPM 1048576/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel1.tier.08.name=UV 256/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel2.tier.08.name=UV 1024/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel3.tier.08.name=UV 4096/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel4.tier.08.name=UV 16384/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel5.tier.08.name=UV 65536/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel6.tier.08.name=UV 262144/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel7.tier.08.name=UV 1048576/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel1.tier.09.name=UHV 256/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel2.tier.09.name=UHV 1024/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel3.tier.09.name=UHV 4096/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel4.tier.09.name=UHV 16384/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel5.tier.09.name=UHV 65536/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel6.tier.09.name=UHV 262144/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel7.tier.09.name=UHV 1048576/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel1.tier.10.name=UEV 256/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel2.tier.10.name=UEV 1024/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel3.tier.10.name=UEV 4096/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel4.tier.10.name=UEV 16384/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel5.tier.10.name=UEV 65536/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel6.tier.10.name=UEV 262144/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel7.tier.10.name=UEV 1048576/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel1.tier.11.name=UIV 256/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel2.tier.11.name=UIV 1024/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel3.tier.11.name=UIV 4096/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel4.tier.11.name=UIV 16384/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel5.tier.11.name=UIV 65536/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel6.tier.11.name=UIV 262144/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel7.tier.11.name=UIV 1048576/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel1.tier.12.name=UMV 256/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel2.tier.12.name=UMV 1024/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel3.tier.12.name=UMV 4096/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel4.tier.12.name=UMV 16384/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel5.tier.12.name=UMV 65536/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel6.tier.12.name=UMV 262144/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel7.tier.12.name=UMV 1048576/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel1.tier.13.name=UXV 256/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel2.tier.13.name=UXV 1024/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel3.tier.13.name=UXV 4096/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel4.tier.13.name=UXV 16384/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel5.tier.13.name=UXV 65536/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel6.tier.13.name=UXV 262144/t 激光源仓 -gt.blockmachines.hatch.dynamotunnel7.tier.13.name=UXV 1048576/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel1.tier.05.name=IV 256A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel2.tier.05.name=IV 1024A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel3.tier.05.name=IV 4096A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel4.tier.05.name=IV 16384A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel5.tier.05.name=IV 65536A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel6.tier.05.name=IV 262144A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel7.tier.05.name=IV 1048576A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel1.tier.06.name=LuV 256A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel2.tier.06.name=LuV 1024A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel3.tier.06.name=LuV 4096A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel4.tier.06.name=LuV 16384A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel5.tier.06.name=LuV 65536A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel6.tier.06.name=LuV 262144A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel7.tier.06.name=LuV 1048576A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel1.tier.07.name=ZPM 256A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel2.tier.07.name=ZPM 1024A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel3.tier.07.name=ZPM 4096A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel4.tier.07.name=ZPM 16384A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel5.tier.07.name=ZPM 65536A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel6.tier.07.name=ZPM 262144A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel7.tier.07.name=ZPM 1048576A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel1.tier.08.name=UV 256A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel2.tier.08.name=UV 1024A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel3.tier.08.name=UV 4096A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel4.tier.08.name=UV 16384A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel5.tier.08.name=UV 65536A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel6.tier.08.name=UV 262144A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel7.tier.08.name=UV 1048576A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel1.tier.09.name=UHV 256A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel2.tier.09.name=UHV 1024A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel3.tier.09.name=UHV 4096A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel4.tier.09.name=UHV 16384A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel5.tier.09.name=UHV 65536A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel6.tier.09.name=UHV 262144A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel7.tier.09.name=UHV 1048576A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel1.tier.10.name=UEV 256A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel2.tier.10.name=UEV 1024A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel3.tier.10.name=UEV 4096A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel4.tier.10.name=UEV 16384A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel5.tier.10.name=UEV 65536A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel6.tier.10.name=UEV 262144A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel7.tier.10.name=UEV 1048576A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel1.tier.11.name=UIV 256A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel2.tier.11.name=UIV 1024A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel3.tier.11.name=UIV 4096A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel4.tier.11.name=UIV 16384A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel5.tier.11.name=UIV 65536A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel6.tier.11.name=UIV 262144A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel7.tier.11.name=UIV 1048576A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel1.tier.12.name=UMV 256A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel2.tier.12.name=UMV 1024A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel3.tier.12.name=UMV 4096A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel4.tier.12.name=UMV 16384A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel5.tier.12.name=UMV 65536A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel6.tier.12.name=UMV 262144A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel7.tier.12.name=UMV 1048576A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel1.tier.13.name=UXV 256A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel2.tier.13.name=UXV 1024A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel3.tier.13.name=UXV 4096A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel4.tier.13.name=UXV 16384A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel5.tier.13.name=UXV 65536A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel6.tier.13.name=UXV 262144A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel7.tier.13.name=UXV 1048576A/s 激光源仓 gt.blockmachines.hatch.dynamotunnel.tier.14.name=传奇激光源仓 gt.blockmachines.hatch.dynamotunnel.desc.0=多方块机器的能量输出端 gt.blockmachines.hatch.dynamotunnel.desc.1=通量 -- cgit From 92b50677c155e8781efc26a5e9ddb660c48ffec5 Mon Sep 17 00:00:00 2001 From: bartimaeusnek <33183715+bartimaeusnek@users.noreply.github.com> Date: Tue, 12 May 2020 21:35:29 +0200 Subject: Added config Option for Block Nerf (#28) --- .../github/technus/tectech/loader/MainLoader.java | 11 ++++++++--- .../github/technus/tectech/loader/TecTechConfig.java | 20 ++++++++++++-------- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/loader/MainLoader.java b/src/main/java/com/github/technus/tectech/loader/MainLoader.java index bab6c6d092..d473da6b07 100644 --- a/src/main/java/com/github/technus/tectech/loader/MainLoader.java +++ b/src/main/java/com/github/technus/tectech/loader/MainLoader.java @@ -153,9 +153,14 @@ public final class MainLoader { registerExtraHazmats(); TecTech.LOGGER.info("Hazmat additions done"); - progressBarPostLoad.step("Nerf blocks blast resistance"); - fixBlocks(); - TecTech.LOGGER.info("Blocks nerf done"); + if (!configTecTech.DISABLE_BLOCK_HARDNESS_NERF) { + progressBarPostLoad.step("Nerf blocks blast resistance"); + fixBlocks(); + TecTech.LOGGER.info("Blocks nerf done"); + } else { + progressBarPostLoad.step("Do not nerf blocks blast resistance"); + TecTech.LOGGER.info("Blocks were not nerfed"); + } progressBarPostLoad.step("Constructable stuff"); new ConstructableLoader().run(); diff --git a/src/main/java/com/github/technus/tectech/loader/TecTechConfig.java b/src/main/java/com/github/technus/tectech/loader/TecTechConfig.java index e16580befe..0c2920e585 100644 --- a/src/main/java/com/github/technus/tectech/loader/TecTechConfig.java +++ b/src/main/java/com/github/technus/tectech/loader/TecTechConfig.java @@ -18,6 +18,7 @@ public class TecTechConfig extends ConfigManager { public boolean NERF_FUSION; public boolean ENABLE_TURRET_EXPLOSIONS; public boolean DISABLE_MATERIAL_LOADING_FFS; + public boolean DISABLE_BLOCK_HARDNESS_NERF; public float TURRET_DAMAGE_FACTOR; public float TURRET_EXPLOSION_FACTOR; public float TESLA_MULTI_MIN_EFFICIENCY; @@ -38,8 +39,9 @@ public class TecTechConfig extends ConfigManager { EASY_SCAN = false; BOOM_ENABLE = true; NERF_FUSION = false; + DISABLE_BLOCK_HARDNESS_NERF = false; ENABLE_TURRET_EXPLOSIONS = true; - DISABLE_MATERIAL_LOADING_FFS=false; + DISABLE_MATERIAL_LOADING_FFS = false; TURRET_DAMAGE_FACTOR = 10; TURRET_EXPLOSION_FACTOR = 1; TESLA_MULTI_MIN_EFFICIENCY = 0.955F; @@ -72,19 +74,21 @@ public class TecTechConfig extends ConfigManager { "Damage is multiplied by this number"); TURRET_EXPLOSION_FACTOR = _mainConfig.getFloat("TurretExplosionFactor", "Features", TURRET_EXPLOSION_FACTOR, 0, Short.MAX_VALUE, "Explosion strength is multiplied by this number"); - DISABLE_MATERIAL_LOADING_FFS = _mainConfig.getBoolean("DisableMaterialLoading", "Debug", DISABLE_MATERIAL_LOADING_FFS, + DISABLE_BLOCK_HARDNESS_NERF = _mainConfig.getBoolean("DisableBlockHardnessNerf", "Features", DISABLE_BLOCK_HARDNESS_NERF, + "Set to true to disable the block hardness nerf"); + DISABLE_MATERIAL_LOADING_FFS = _mainConfig.getBoolean("DisableMaterialLoading", "Debug", DISABLE_MATERIAL_LOADING_FFS, "Set to true to disable gregtech material processing"); - TESLA_MULTI_MIN_EFFICIENCY = _mainConfig.getFloat("teslaMultiMinEfficency", "Features", TESLA_MULTI_MIN_EFFICIENCY, 0, 1, + TESLA_MULTI_MIN_EFFICIENCY = _mainConfig.getFloat("teslaMultiMinEfficency", "Features", TESLA_MULTI_MIN_EFFICIENCY, 0, 1, "Worst possible power loss per block for the multi block tesla"); - TESLA_MULTI_MAX_EFFICIENCY = _mainConfig.getFloat("teslaMultiMaxEfficency", "Features", TESLA_MULTI_MAX_EFFICIENCY, 0, 1, + TESLA_MULTI_MAX_EFFICIENCY = _mainConfig.getFloat("teslaMultiMaxEfficency", "Features", TESLA_MULTI_MAX_EFFICIENCY, 0, 1, "Best possible power loss per block for the multi block tesla"); - TESLA_MULTI_OVERDRIVE_LOSS = _mainConfig.getFloat("teslaMultiOverdriveLoss", "Features", TESLA_MULTI_OVERDRIVE_LOSS, 0, 1, + TESLA_MULTI_OVERDRIVE_LOSS = _mainConfig.getFloat("teslaMultiOverdriveLoss", "Features", TESLA_MULTI_OVERDRIVE_LOSS, 0, 1, "Additional losses for overdrive use on the multi block tesla"); - TESLA_SINGLE_MIN_EFFICIENCY = _mainConfig.getFloat("teslaSingleMinEfficency", "Features", TESLA_SINGLE_MIN_EFFICIENCY, 0, 1, + TESLA_SINGLE_MIN_EFFICIENCY = _mainConfig.getFloat("teslaSingleMinEfficency", "Features", TESLA_SINGLE_MIN_EFFICIENCY, 0, 1, "Worst possible power loss per block for the single block tesla"); - TESLA_SINGLE_MAX_EFFICIENCY = _mainConfig.getFloat("teslaSingleMaxEfficency", "Features", TESLA_SINGLE_MAX_EFFICIENCY, 0, 1, + TESLA_SINGLE_MAX_EFFICIENCY = _mainConfig.getFloat("teslaSingleMaxEfficency", "Features", TESLA_SINGLE_MAX_EFFICIENCY, 0, 1, "Best possible power loss per block for the single block tesla"); - TESLA_SINGLE_OVERDRIVE_LOSS = _mainConfig.getFloat("teslaSingleOverdriveLoss", "Features", TESLA_SINGLE_OVERDRIVE_LOSS, 0, 1, + TESLA_SINGLE_OVERDRIVE_LOSS = _mainConfig.getFloat("teslaSingleOverdriveLoss", "Features", TESLA_SINGLE_OVERDRIVE_LOSS, 0, 1, "Additional losses for overdrive use on the single block tesla"); } -- cgit From 20212d1d6950dadd1fa705f144d8f62abe59fbfc Mon Sep 17 00:00:00 2001 From: Tec Date: Tue, 12 May 2020 22:14:22 +0200 Subject: Fix laser logic --- .../tectech/loader/thing/MachineLoader.java | 252 ++++++++++----------- .../GT_MetaTileEntity_Hatch_DynamoTunnel.java | 7 +- src/main/resources/assets/tectech/lang/en_US.lang | 252 ++++++++++----------- src/main/resources/assets/tectech/lang/zh_CN.lang | 252 ++++++++++----------- 4 files changed, 381 insertions(+), 382 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/loader/thing/MachineLoader.java b/src/main/java/com/github/technus/tectech/loader/thing/MachineLoader.java index 7b1e85591d..3891d28845 100644 --- a/src/main/java/com/github/technus/tectech/loader/thing/MachineLoader.java +++ b/src/main/java/com/github/technus/tectech/loader/thing/MachineLoader.java @@ -198,139 +198,139 @@ public class MachineLoader implements Runnable { // =================================================================================================== eM_energyTunnel1_IV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15130, "hatch.energytunnel1.tier.05", "IV 256A/s Laser Target Hatch", 5, 256).getStackForm(1L)); + 15130, "hatch.energytunnel1.tier.05", "IV 256A/t Laser Target Hatch", 5, 256).getStackForm(1L)); eM_energyTunnel2_IV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15140, "hatch.energytunnel2.tier.05", "IV 1024A/s Laser Target Hatch", 5, 1024).getStackForm(1L)); + 15140, "hatch.energytunnel2.tier.05", "IV 1024A/t Laser Target Hatch", 5, 1024).getStackForm(1L)); eM_energyTunnel3_IV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15150, "hatch.energytunnel3.tier.05", "IV 4096A/s Laser Target Hatch", 5, 4096).getStackForm(1L)); + 15150, "hatch.energytunnel3.tier.05", "IV 4096A/t Laser Target Hatch", 5, 4096).getStackForm(1L)); eM_energyTunnel4_IV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15160, "hatch.energytunnel4.tier.05", "IV 16384A/s Laser Target Hatch", 5, 16384).getStackForm(1L)); + 15160, "hatch.energytunnel4.tier.05", "IV 16384A/t Laser Target Hatch", 5, 16384).getStackForm(1L)); eM_energyTunnel5_IV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15170, "hatch.energytunnel5.tier.05", "IV 65536A/s Laser Target Hatch", 5, 65536).getStackForm(1L)); + 15170, "hatch.energytunnel5.tier.05", "IV 65536A/t Laser Target Hatch", 5, 65536).getStackForm(1L)); eM_energyTunnel6_IV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15180, "hatch.energytunnel6.tier.05", "IV 262144A/s Laser Target Hatch", 5, 262144).getStackForm(1L)); + 15180, "hatch.energytunnel6.tier.05", "IV 262144A/t Laser Target Hatch", 5, 262144).getStackForm(1L)); eM_energyTunnel7_IV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15190, "hatch.energytunnel7.tier.05", "IV 1048576A/s Laser Target Hatch", 5, 1048576).getStackForm(1L)); + 15190, "hatch.energytunnel7.tier.05", "IV 1048576A/t Laser Target Hatch", 5, 1048576).getStackForm(1L)); eM_energyTunnel1_LuV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15131, "hatch.energytunnel1.tier.06", "LuV 256A/s Laser Target Hatch", 6, 256).getStackForm(1L)); + 15131, "hatch.energytunnel1.tier.06", "LuV 256A/t Laser Target Hatch", 6, 256).getStackForm(1L)); eM_energyTunnel2_LuV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15141, "hatch.energytunnel2.tier.06", "LuV 1024A/s Laser Target Hatch", 6, 1024).getStackForm(1L)); + 15141, "hatch.energytunnel2.tier.06", "LuV 1024A/t Laser Target Hatch", 6, 1024).getStackForm(1L)); eM_energyTunnel3_LuV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15151, "hatch.energytunnel3.tier.06", "LuV 4096A/s Laser Target Hatch", 6, 4096).getStackForm(1L)); + 15151, "hatch.energytunnel3.tier.06", "LuV 4096A/t Laser Target Hatch", 6, 4096).getStackForm(1L)); eM_energyTunnel4_LuV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15161, "hatch.energytunnel4.tier.06", "LuV 16384A/s Laser Target Hatch", 6, 16384).getStackForm(1L)); + 15161, "hatch.energytunnel4.tier.06", "LuV 16384A/t Laser Target Hatch", 6, 16384).getStackForm(1L)); eM_energyTunnel5_LuV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15171, "hatch.energytunnel5.tier.06", "LuV 65536A/s Laser Target Hatch", 6, 65536).getStackForm(1L)); + 15171, "hatch.energytunnel5.tier.06", "LuV 65536A/t Laser Target Hatch", 6, 65536).getStackForm(1L)); eM_energyTunnel6_LuV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15181, "hatch.energytunnel6.tier.06", "LuV 262144A/s Laser Target Hatch", 6, 262144).getStackForm(1L)); + 15181, "hatch.energytunnel6.tier.06", "LuV 262144A/t Laser Target Hatch", 6, 262144).getStackForm(1L)); eM_energyTunnel7_LuV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15191, "hatch.energytunnel7.tier.06", "LuV 1048576A/s Laser Target Hatch", 6, 1048576).getStackForm(1L)); + 15191, "hatch.energytunnel7.tier.06", "LuV 1048576A/t Laser Target Hatch", 6, 1048576).getStackForm(1L)); eM_energyTunnel1_ZPM.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15132, "hatch.energytunnel1.tier.07", "ZPM 256A/s Laser Target Hatch", 7, 256).getStackForm(1L)); + 15132, "hatch.energytunnel1.tier.07", "ZPM 256A/t Laser Target Hatch", 7, 256).getStackForm(1L)); eM_energyTunnel2_ZPM.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15142, "hatch.energytunnel2.tier.07", "ZPM 1024A/s Laser Target Hatch", 7, 1024).getStackForm(1L)); + 15142, "hatch.energytunnel2.tier.07", "ZPM 1024A/t Laser Target Hatch", 7, 1024).getStackForm(1L)); eM_energyTunnel3_ZPM.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15152, "hatch.energytunnel3.tier.07", "ZPM 4096A/s Laser Target Hatch", 7, 4096).getStackForm(1L)); + 15152, "hatch.energytunnel3.tier.07", "ZPM 4096A/t Laser Target Hatch", 7, 4096).getStackForm(1L)); eM_energyTunnel4_ZPM.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15162, "hatch.energytunnel4.tier.07", "ZPM 16384A/s Laser Target Hatch", 7, 16384).getStackForm(1L)); + 15162, "hatch.energytunnel4.tier.07", "ZPM 16384A/t Laser Target Hatch", 7, 16384).getStackForm(1L)); eM_energyTunnel5_ZPM.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15172, "hatch.energytunnel5.tier.07", "ZPM 65536A/s Laser Target Hatch", 7, 65536).getStackForm(1L)); + 15172, "hatch.energytunnel5.tier.07", "ZPM 65536A/t Laser Target Hatch", 7, 65536).getStackForm(1L)); eM_energyTunnel6_ZPM.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15182, "hatch.energytunnel6.tier.07", "ZPM 262144A/s Laser Target Hatch", 7, 262144).getStackForm(1L)); + 15182, "hatch.energytunnel6.tier.07", "ZPM 262144A/t Laser Target Hatch", 7, 262144).getStackForm(1L)); eM_energyTunnel7_ZPM.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15192, "hatch.energytunnel7.tier.07", "ZPM 1048576A/s Laser Target Hatch", 7, 1048576).getStackForm(1L)); + 15192, "hatch.energytunnel7.tier.07", "ZPM 1048576A/t Laser Target Hatch", 7, 1048576).getStackForm(1L)); eM_energyTunnel1_UV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15133, "hatch.energytunnel1.tier.08", "UV 256A/s Laser Target Hatch", 8, 256).getStackForm(1L)); + 15133, "hatch.energytunnel1.tier.08", "UV 256A/t Laser Target Hatch", 8, 256).getStackForm(1L)); eM_energyTunnel2_UV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15143, "hatch.energytunnel2.tier.08", "UV 1024A/s Laser Target Hatch", 8, 1024).getStackForm(1L)); + 15143, "hatch.energytunnel2.tier.08", "UV 1024A/t Laser Target Hatch", 8, 1024).getStackForm(1L)); eM_energyTunnel3_UV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15153, "hatch.energytunnel3.tier.08", "UV 4096A/s Laser Target Hatch", 8, 4096).getStackForm(1L)); + 15153, "hatch.energytunnel3.tier.08", "UV 4096A/t Laser Target Hatch", 8, 4096).getStackForm(1L)); eM_energyTunnel4_UV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15163, "hatch.energytunnel4.tier.08", "UV 16384A/s Laser Target Hatch", 8, 16384).getStackForm(1L)); + 15163, "hatch.energytunnel4.tier.08", "UV 16384A/t Laser Target Hatch", 8, 16384).getStackForm(1L)); eM_energyTunnel5_UV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15173, "hatch.energytunnel5.tier.08", "UV 65536A/s Laser Target Hatch", 8, 65536).getStackForm(1L)); + 15173, "hatch.energytunnel5.tier.08", "UV 65536A/t Laser Target Hatch", 8, 65536).getStackForm(1L)); eM_energyTunnel6_UV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15183, "hatch.energytunnel6.tier.08", "UV 262144A/s Laser Target Hatch", 8, 262144).getStackForm(1L)); + 15183, "hatch.energytunnel6.tier.08", "UV 262144A/t Laser Target Hatch", 8, 262144).getStackForm(1L)); eM_energyTunnel7_UV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15193, "hatch.energytunnel7.tier.08", "UV 1048576A/s Laser Target Hatch", 8, 1048576).getStackForm(1L)); + 15193, "hatch.energytunnel7.tier.08", "UV 1048576A/t Laser Target Hatch", 8, 1048576).getStackForm(1L)); eM_energyTunnel1_UHV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15134, "hatch.energytunnel1.tier.09", "UHV 256A/s Laser Target Hatch", 9, 256).getStackForm(1L)); + 15134, "hatch.energytunnel1.tier.09", "UHV 256A/t Laser Target Hatch", 9, 256).getStackForm(1L)); eM_energyTunnel2_UHV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15144, "hatch.energytunnel2.tier.09", "UHV 1024A/s Laser Target Hatch", 9, 1024).getStackForm(1L)); + 15144, "hatch.energytunnel2.tier.09", "UHV 1024A/t Laser Target Hatch", 9, 1024).getStackForm(1L)); eM_energyTunnel3_UHV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15154, "hatch.energytunnel3.tier.09", "UHV 4096A/s Laser Target Hatch", 9, 4096).getStackForm(1L)); + 15154, "hatch.energytunnel3.tier.09", "UHV 4096A/t Laser Target Hatch", 9, 4096).getStackForm(1L)); eM_energyTunnel4_UHV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15164, "hatch.energytunnel4.tier.09", "UHV 16384A/s Laser Target Hatch", 9, 16384).getStackForm(1L)); + 15164, "hatch.energytunnel4.tier.09", "UHV 16384A/t Laser Target Hatch", 9, 16384).getStackForm(1L)); eM_energyTunnel5_UHV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15174, "hatch.energytunnel5.tier.09", "UHV 65536A/s Laser Target Hatch", 9, 65536).getStackForm(1L)); + 15174, "hatch.energytunnel5.tier.09", "UHV 65536A/t Laser Target Hatch", 9, 65536).getStackForm(1L)); eM_energyTunnel6_UHV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15184, "hatch.energytunnel6.tier.09", "UHV 262144A/s Laser Target Hatch", 9, 262144).getStackForm(1L)); + 15184, "hatch.energytunnel6.tier.09", "UHV 262144A/t Laser Target Hatch", 9, 262144).getStackForm(1L)); eM_energyTunnel7_UHV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15194, "hatch.energytunnel7.tier.09", "UHV 1048576A/s Laser Target Hatch", 9, 1048576).getStackForm(1L)); + 15194, "hatch.energytunnel7.tier.09", "UHV 1048576A/t Laser Target Hatch", 9, 1048576).getStackForm(1L)); eM_energyTunnel1_UEV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15135, "hatch.energytunnel1.tier.10", "UEV 256A/s Laser Target Hatch", 10, 256).getStackForm(1L)); + 15135, "hatch.energytunnel1.tier.10", "UEV 256A/t Laser Target Hatch", 10, 256).getStackForm(1L)); eM_energyTunnel2_UEV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15145, "hatch.energytunnel2.tier.10", "UEV 1024A/s Laser Target Hatch", 10, 1024).getStackForm(1L)); + 15145, "hatch.energytunnel2.tier.10", "UEV 1024A/t Laser Target Hatch", 10, 1024).getStackForm(1L)); eM_energyTunnel3_UEV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15155, "hatch.energytunnel3.tier.10", "UEV 4096A/s Laser Target Hatch", 10, 4096).getStackForm(1L)); + 15155, "hatch.energytunnel3.tier.10", "UEV 4096A/t Laser Target Hatch", 10, 4096).getStackForm(1L)); eM_energyTunnel4_UEV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15165, "hatch.energytunnel4.tier.10", "UEV 16384A/s Laser Target Hatch", 10, 16384).getStackForm(1L)); + 15165, "hatch.energytunnel4.tier.10", "UEV 16384A/t Laser Target Hatch", 10, 16384).getStackForm(1L)); eM_energyTunnel5_UEV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15175, "hatch.energytunnel5.tier.10", "UEV 65536A/s Laser Target Hatch", 10, 65536).getStackForm(1L)); + 15175, "hatch.energytunnel5.tier.10", "UEV 65536A/t Laser Target Hatch", 10, 65536).getStackForm(1L)); eM_energyTunnel6_UEV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15185, "hatch.energytunnel6.tier.10", "UEV 262144A/s Laser Target Hatch", 10, 262144).getStackForm(1L)); + 15185, "hatch.energytunnel6.tier.10", "UEV 262144A/t Laser Target Hatch", 10, 262144).getStackForm(1L)); eM_energyTunnel7_UEV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15195, "hatch.energytunnel7.tier.10", "UEV 1048576A/s Laser Target Hatch", 10, 1048576).getStackForm(1L)); + 15195, "hatch.energytunnel7.tier.10", "UEV 1048576A/t Laser Target Hatch", 10, 1048576).getStackForm(1L)); eM_energyTunnel1_UIV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15136, "hatch.energytunnel1.tier.11", "UIV 256A/s Laser Target Hatch", 11, 256).getStackForm(1L)); + 15136, "hatch.energytunnel1.tier.11", "UIV 256A/t Laser Target Hatch", 11, 256).getStackForm(1L)); eM_energyTunnel2_UIV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15146, "hatch.energytunnel2.tier.11", "UIV 1024A/s Laser Target Hatch", 11, 1024).getStackForm(1L)); + 15146, "hatch.energytunnel2.tier.11", "UIV 1024A/t Laser Target Hatch", 11, 1024).getStackForm(1L)); eM_energyTunnel3_UIV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15156, "hatch.energytunnel3.tier.11", "UIV 4096A/s Laser Target Hatch", 11, 4096).getStackForm(1L)); + 15156, "hatch.energytunnel3.tier.11", "UIV 4096A/t Laser Target Hatch", 11, 4096).getStackForm(1L)); eM_energyTunnel4_UIV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15166, "hatch.energytunnel4.tier.11", "UIV 16384A/s Laser Target Hatch", 11, 16384).getStackForm(1L)); + 15166, "hatch.energytunnel4.tier.11", "UIV 16384A/t Laser Target Hatch", 11, 16384).getStackForm(1L)); eM_energyTunnel5_UIV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15176, "hatch.energytunnel5.tier.11", "UIV 65536A/s Laser Target Hatch", 11, 65536).getStackForm(1L)); + 15176, "hatch.energytunnel5.tier.11", "UIV 65536A/t Laser Target Hatch", 11, 65536).getStackForm(1L)); eM_energyTunnel6_UIV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15186, "hatch.energytunnel6.tier.11", "UIV 262144A/s Laser Target Hatch", 11, 262144).getStackForm(1L)); + 15186, "hatch.energytunnel6.tier.11", "UIV 262144A/t Laser Target Hatch", 11, 262144).getStackForm(1L)); eM_energyTunnel7_UIV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15196, "hatch.energytunnel7.tier.11", "UIV 1048576A/s Laser Target Hatch", 11, 1048576).getStackForm(1L)); + 15196, "hatch.energytunnel7.tier.11", "UIV 1048576A/t Laser Target Hatch", 11, 1048576).getStackForm(1L)); eM_energyTunnel1_UMV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15137, "hatch.energytunnel1.tier.12", "UMV 256A/s Laser Target Hatch", 12, 256).getStackForm(1L)); + 15137, "hatch.energytunnel1.tier.12", "UMV 256A/t Laser Target Hatch", 12, 256).getStackForm(1L)); eM_energyTunnel2_UMV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15147, "hatch.energytunnel2.tier.12", "UMV 1024A/s Laser Target Hatch", 12, 1024).getStackForm(1L)); + 15147, "hatch.energytunnel2.tier.12", "UMV 1024A/t Laser Target Hatch", 12, 1024).getStackForm(1L)); eM_energyTunnel3_UMV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15157, "hatch.energytunnel3.tier.12", "UMV 4096A/s Laser Target Hatch", 12, 4096).getStackForm(1L)); + 15157, "hatch.energytunnel3.tier.12", "UMV 4096A/t Laser Target Hatch", 12, 4096).getStackForm(1L)); eM_energyTunnel4_UMV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15167, "hatch.energytunnel4.tier.12", "UMV 16384A/s Laser Target Hatch", 12, 16384).getStackForm(1L)); + 15167, "hatch.energytunnel4.tier.12", "UMV 16384A/t Laser Target Hatch", 12, 16384).getStackForm(1L)); eM_energyTunnel5_UMV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15177, "hatch.energytunnel5.tier.12", "UMV 65536A/s Laser Target Hatch", 12, 65536).getStackForm(1L)); + 15177, "hatch.energytunnel5.tier.12", "UMV 65536A/t Laser Target Hatch", 12, 65536).getStackForm(1L)); eM_energyTunnel6_UMV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15187, "hatch.energytunnel6.tier.12", "UMV 262144A/s Laser Target Hatch", 12, 262144).getStackForm(1L)); + 15187, "hatch.energytunnel6.tier.12", "UMV 262144A/t Laser Target Hatch", 12, 262144).getStackForm(1L)); eM_energyTunnel7_UMV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15197, "hatch.energytunnel7.tier.12", "UMV 1048576A/s Laser Target Hatch", 12, 1048576).getStackForm(1L)); + 15197, "hatch.energytunnel7.tier.12", "UMV 1048576A/t Laser Target Hatch", 12, 1048576).getStackForm(1L)); eM_energyTunnel1_UXV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15138, "hatch.energytunnel1.tier.13", "UXV 256A/s Laser Target Hatch", 13, 256).getStackForm(1L)); + 15138, "hatch.energytunnel1.tier.13", "UXV 256A/t Laser Target Hatch", 13, 256).getStackForm(1L)); eM_energyTunnel2_UXV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15148, "hatch.energytunnel2.tier.13", "UXV 1024A/s Laser Target Hatch", 13, 1024).getStackForm(1L)); + 15148, "hatch.energytunnel2.tier.13", "UXV 1024A/t Laser Target Hatch", 13, 1024).getStackForm(1L)); eM_energyTunnel3_UXV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15158, "hatch.energytunnel3.tier.13", "UXV 4096A/s Laser Target Hatch", 13, 4096).getStackForm(1L)); + 15158, "hatch.energytunnel3.tier.13", "UXV 4096A/t Laser Target Hatch", 13, 4096).getStackForm(1L)); eM_energyTunnel4_UXV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15168, "hatch.energytunnel4.tier.13", "UXV 16384A/s Laser Target Hatch", 13, 16384).getStackForm(1L)); + 15168, "hatch.energytunnel4.tier.13", "UXV 16384A/t Laser Target Hatch", 13, 16384).getStackForm(1L)); eM_energyTunnel5_UXV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15178, "hatch.energytunnel5.tier.13", "UXV 65536A/s Laser Target Hatch", 13, 65536).getStackForm(1L)); + 15178, "hatch.energytunnel5.tier.13", "UXV 65536A/t Laser Target Hatch", 13, 65536).getStackForm(1L)); eM_energyTunnel6_UXV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15188, "hatch.energytunnel6.tier.13", "UXV 262144A/s Laser Target Hatch", 13, 262144).getStackForm(1L)); + 15188, "hatch.energytunnel6.tier.13", "UXV 262144A/t Laser Target Hatch", 13, 262144).getStackForm(1L)); eM_energyTunnel7_UXV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15198, "hatch.energytunnel7.tier.13", "UXV 1048576A/s Laser Target Hatch", 13, 1048576).getStackForm(1L)); + 15198, "hatch.energytunnel7.tier.13", "UXV 1048576A/t Laser Target Hatch", 13, 1048576).getStackForm(1L)); eM_energyTunnel9001.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( 15199, "hatch.energytunnel.tier.14", "Legendary Laser Target Hatch", 14, (int) V[14]).getStackForm(1L)); @@ -406,139 +406,139 @@ public class MachineLoader implements Runnable { // =================================================================================================== eM_dynamoTunnel1_IV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15230, "hatch.dynamotunnel1.tier.05", "IV 256A/s Laser Source Hatch", 5, 256).getStackForm(1L)); + 15230, "hatch.dynamotunnel1.tier.05", "IV 256A/t Laser Source Hatch", 5, 256).getStackForm(1L)); eM_dynamoTunnel2_IV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15240, "hatch.dynamotunnel2.tier.05", "IV 1024A/s Laser Source Hatch", 5, 1024).getStackForm(1L)); + 15240, "hatch.dynamotunnel2.tier.05", "IV 1024A/t Laser Source Hatch", 5, 1024).getStackForm(1L)); eM_dynamoTunnel3_IV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15250, "hatch.dynamotunnel3.tier.05", "IV 4096A/s Laser Source Hatch", 5, 4096).getStackForm(1L)); + 15250, "hatch.dynamotunnel3.tier.05", "IV 4096A/t Laser Source Hatch", 5, 4096).getStackForm(1L)); eM_dynamoTunnel4_IV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15260, "hatch.dynamotunnel4.tier.05", "IV 16384A/s Laser Source Hatch", 5, 16384).getStackForm(1L)); + 15260, "hatch.dynamotunnel4.tier.05", "IV 16384A/t Laser Source Hatch", 5, 16384).getStackForm(1L)); eM_dynamoTunnel5_IV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15270, "hatch.dynamotunnel5.tier.05", "IV 65536A/s Laser Source Hatch", 5, 65536).getStackForm(1L)); + 15270, "hatch.dynamotunnel5.tier.05", "IV 65536A/t Laser Source Hatch", 5, 65536).getStackForm(1L)); eM_dynamoTunnel6_IV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15280, "hatch.dynamotunnel6.tier.05", "IV 262144A/s Laser Source Hatch", 5, 262144).getStackForm(1L)); + 15280, "hatch.dynamotunnel6.tier.05", "IV 262144A/t Laser Source Hatch", 5, 262144).getStackForm(1L)); eM_dynamoTunnel7_IV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15290, "hatch.dynamotunnel7.tier.05", "IV 1048576A/s Laser Source Hatch", 5, 1048576).getStackForm(1L)); + 15290, "hatch.dynamotunnel7.tier.05", "IV 1048576A/t Laser Source Hatch", 5, 1048576).getStackForm(1L)); eM_dynamoTunnel1_LuV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15231, "hatch.dynamotunnel1.tier.06", "LuV 256A/s Laser Source Hatch", 6, 256).getStackForm(1L)); + 15231, "hatch.dynamotunnel1.tier.06", "LuV 256A/t Laser Source Hatch", 6, 256).getStackForm(1L)); eM_dynamoTunnel2_LuV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15241, "hatch.dynamotunnel2.tier.06", "LuV 1024A/s Laser Source Hatch", 6, 1024).getStackForm(1L)); + 15241, "hatch.dynamotunnel2.tier.06", "LuV 1024A/t Laser Source Hatch", 6, 1024).getStackForm(1L)); eM_dynamoTunnel3_LuV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15251, "hatch.dynamotunnel3.tier.06", "LuV 4096A/s Laser Source Hatch", 6, 4096).getStackForm(1L)); + 15251, "hatch.dynamotunnel3.tier.06", "LuV 4096A/t Laser Source Hatch", 6, 4096).getStackForm(1L)); eM_dynamoTunnel4_LuV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15261, "hatch.dynamotunnel4.tier.06", "LuV 16384A/s Laser Source Hatch", 6, 16384).getStackForm(1L)); + 15261, "hatch.dynamotunnel4.tier.06", "LuV 16384A/t Laser Source Hatch", 6, 16384).getStackForm(1L)); eM_dynamoTunnel5_LuV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15271, "hatch.dynamotunnel5.tier.06", "LuV 65536A/s Laser Source Hatch", 6, 65536).getStackForm(1L)); + 15271, "hatch.dynamotunnel5.tier.06", "LuV 65536A/t Laser Source Hatch", 6, 65536).getStackForm(1L)); eM_dynamoTunnel6_LuV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15281, "hatch.dynamotunnel6.tier.06", "LuV 262144A/s Laser Source Hatch", 6, 262144).getStackForm(1L)); + 15281, "hatch.dynamotunnel6.tier.06", "LuV 262144A/t Laser Source Hatch", 6, 262144).getStackForm(1L)); eM_dynamoTunnel7_LuV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15291, "hatch.dynamotunnel7.tier.06", "LuV 1048576A/s Laser Source Hatch", 6, 1048576).getStackForm(1L)); + 15291, "hatch.dynamotunnel7.tier.06", "LuV 1048576A/t Laser Source Hatch", 6, 1048576).getStackForm(1L)); eM_dynamoTunnel1_ZPM.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15232, "hatch.dynamotunnel1.tier.07", "ZPM 256A/s Laser Source Hatch", 7, 256).getStackForm(1L)); + 15232, "hatch.dynamotunnel1.tier.07", "ZPM 256A/t Laser Source Hatch", 7, 256).getStackForm(1L)); eM_dynamoTunnel2_ZPM.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15242, "hatch.dynamotunnel2.tier.07", "ZPM 1024A/s Laser Source Hatch", 7, 1024).getStackForm(1L)); + 15242, "hatch.dynamotunnel2.tier.07", "ZPM 1024A/t Laser Source Hatch", 7, 1024).getStackForm(1L)); eM_dynamoTunnel3_ZPM.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15252, "hatch.dynamotunnel3.tier.07", "ZPM 4096A/s Laser Source Hatch", 7, 4096).getStackForm(1L)); + 15252, "hatch.dynamotunnel3.tier.07", "ZPM 4096A/t Laser Source Hatch", 7, 4096).getStackForm(1L)); eM_dynamoTunnel4_ZPM.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15262, "hatch.dynamotunnel4.tier.07", "ZPM 16384A/s Laser Source Hatch", 7, 16384).getStackForm(1L)); + 15262, "hatch.dynamotunnel4.tier.07", "ZPM 16384A/t Laser Source Hatch", 7, 16384).getStackForm(1L)); eM_dynamoTunnel5_ZPM.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15272, "hatch.dynamotunnel5.tier.07", "ZPM 65536A/s Laser Source Hatch", 7, 65536).getStackForm(1L)); + 15272, "hatch.dynamotunnel5.tier.07", "ZPM 65536A/t Laser Source Hatch", 7, 65536).getStackForm(1L)); eM_dynamoTunnel6_ZPM.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15282, "hatch.dynamotunnel6.tier.07", "ZPM 262144A/s Laser Source Hatch", 7, 262144).getStackForm(1L)); + 15282, "hatch.dynamotunnel6.tier.07", "ZPM 262144A/t Laser Source Hatch", 7, 262144).getStackForm(1L)); eM_dynamoTunnel7_ZPM.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15292, "hatch.dynamotunnel7.tier.07", "ZPM 1048576A/s Laser Source Hatch", 7, 1048576).getStackForm(1L)); + 15292, "hatch.dynamotunnel7.tier.07", "ZPM 1048576A/t Laser Source Hatch", 7, 1048576).getStackForm(1L)); eM_dynamoTunnel1_UV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15233, "hatch.dynamotunnel1.tier.08", "UV 256A/s Laser Source Hatch", 8, 256).getStackForm(1L)); + 15233, "hatch.dynamotunnel1.tier.08", "UV 256A/t Laser Source Hatch", 8, 256).getStackForm(1L)); eM_dynamoTunnel2_UV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15243, "hatch.dynamotunnel2.tier.08", "UV 1024A/s Laser Source Hatch", 8, 1024).getStackForm(1L)); + 15243, "hatch.dynamotunnel2.tier.08", "UV 1024A/t Laser Source Hatch", 8, 1024).getStackForm(1L)); eM_dynamoTunnel3_UV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15253, "hatch.dynamotunnel3.tier.08", "UV 4096A/s Laser Source Hatch", 8, 4096).getStackForm(1L)); + 15253, "hatch.dynamotunnel3.tier.08", "UV 4096A/t Laser Source Hatch", 8, 4096).getStackForm(1L)); eM_dynamoTunnel4_UV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15263, "hatch.dynamotunnel4.tier.08", "UV 16384A/s Laser Source Hatch", 8, 16384).getStackForm(1L)); + 15263, "hatch.dynamotunnel4.tier.08", "UV 16384A/t Laser Source Hatch", 8, 16384).getStackForm(1L)); eM_dynamoTunnel5_UV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15273, "hatch.dynamotunnel5.tier.08", "UV 65536A/s Laser Source Hatch", 8, 65536).getStackForm(1L)); + 15273, "hatch.dynamotunnel5.tier.08", "UV 65536A/t Laser Source Hatch", 8, 65536).getStackForm(1L)); eM_dynamoTunnel6_UV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15283, "hatch.dynamotunnel6.tier.08", "UV 262144A/s Laser Source Hatch", 8, 262144).getStackForm(1L)); + 15283, "hatch.dynamotunnel6.tier.08", "UV 262144A/t Laser Source Hatch", 8, 262144).getStackForm(1L)); eM_dynamoTunnel7_UV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15293, "hatch.dynamotunnel7.tier.08", "UV 1048576A/s Laser Source Hatch", 8, 1048576).getStackForm(1L)); + 15293, "hatch.dynamotunnel7.tier.08", "UV 1048576A/t Laser Source Hatch", 8, 1048576).getStackForm(1L)); eM_dynamoTunnel1_UHV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15234, "hatch.dynamotunnel1.tier.09", "UHV 256A/s Laser Source Hatch", 9, 256).getStackForm(1L)); + 15234, "hatch.dynamotunnel1.tier.09", "UHV 256A/t Laser Source Hatch", 9, 256).getStackForm(1L)); eM_dynamoTunnel2_UHV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15244, "hatch.dynamotunnel2.tier.09", "UHV 1024A/s Laser Source Hatch", 9, 1024).getStackForm(1L)); + 15244, "hatch.dynamotunnel2.tier.09", "UHV 1024A/t Laser Source Hatch", 9, 1024).getStackForm(1L)); eM_dynamoTunnel3_UHV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15254, "hatch.dynamotunnel3.tier.09", "UHV 4096A/s Laser Source Hatch", 9, 4096).getStackForm(1L)); + 15254, "hatch.dynamotunnel3.tier.09", "UHV 4096A/t Laser Source Hatch", 9, 4096).getStackForm(1L)); eM_dynamoTunnel4_UHV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15264, "hatch.dynamotunnel4.tier.09", "UHV 16384A/s Laser Source Hatch", 9, 16384).getStackForm(1L)); + 15264, "hatch.dynamotunnel4.tier.09", "UHV 16384A/t Laser Source Hatch", 9, 16384).getStackForm(1L)); eM_dynamoTunnel5_UHV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15274, "hatch.dynamotunnel5.tier.09", "UHV 65536A/s Laser Source Hatch", 9, 65536).getStackForm(1L)); + 15274, "hatch.dynamotunnel5.tier.09", "UHV 65536A/t Laser Source Hatch", 9, 65536).getStackForm(1L)); eM_dynamoTunnel6_UHV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15284, "hatch.dynamotunnel6.tier.09", "UHV 262144A/s Laser Source Hatch", 9, 262144).getStackForm(1L)); + 15284, "hatch.dynamotunnel6.tier.09", "UHV 262144A/t Laser Source Hatch", 9, 262144).getStackForm(1L)); eM_dynamoTunnel7_UHV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15294, "hatch.dynamotunnel7.tier.09", "UHV 1048576A/s Laser Source Hatch", 9, 1048576).getStackForm(1L)); + 15294, "hatch.dynamotunnel7.tier.09", "UHV 1048576A/t Laser Source Hatch", 9, 1048576).getStackForm(1L)); eM_dynamoTunnel1_UEV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15235, "hatch.dynamotunnel1.tier.10", "UEV 256A/s Laser Source Hatch", 10, 256).getStackForm(1L)); + 15235, "hatch.dynamotunnel1.tier.10", "UEV 256A/t Laser Source Hatch", 10, 256).getStackForm(1L)); eM_dynamoTunnel2_UEV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15245, "hatch.dynamotunnel2.tier.10", "UEV 1024A/s Laser Source Hatch", 10, 1024).getStackForm(1L)); + 15245, "hatch.dynamotunnel2.tier.10", "UEV 1024A/t Laser Source Hatch", 10, 1024).getStackForm(1L)); eM_dynamoTunnel3_UEV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15255, "hatch.dynamotunnel3.tier.10", "UEV 4096A/s Laser Source Hatch", 10, 4096).getStackForm(1L)); + 15255, "hatch.dynamotunnel3.tier.10", "UEV 4096A/t Laser Source Hatch", 10, 4096).getStackForm(1L)); eM_dynamoTunnel4_UEV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15265, "hatch.dynamotunnel4.tier.10", "UEV 16384A/s Laser Source Hatch", 10, 16384).getStackForm(1L)); + 15265, "hatch.dynamotunnel4.tier.10", "UEV 16384A/t Laser Source Hatch", 10, 16384).getStackForm(1L)); eM_dynamoTunnel5_UEV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15275, "hatch.dynamotunnel5.tier.10", "UEV 65536A/s Laser Source Hatch", 10, 65536).getStackForm(1L)); + 15275, "hatch.dynamotunnel5.tier.10", "UEV 65536A/t Laser Source Hatch", 10, 65536).getStackForm(1L)); eM_dynamoTunnel6_UEV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15285, "hatch.dynamotunnel6.tier.10", "UEV 262144A/s Laser Source Hatch", 10, 262144).getStackForm(1L)); + 15285, "hatch.dynamotunnel6.tier.10", "UEV 262144A/t Laser Source Hatch", 10, 262144).getStackForm(1L)); eM_dynamoTunnel7_UEV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15295, "hatch.dynamotunnel7.tier.10", "UEV 1048576A/s Laser Source Hatch", 10, 1048576).getStackForm(1L)); + 15295, "hatch.dynamotunnel7.tier.10", "UEV 1048576A/t Laser Source Hatch", 10, 1048576).getStackForm(1L)); eM_dynamoTunnel1_UIV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15236, "hatch.dynamotunnel1.tier.11", "UIV 256A/s Laser Source Hatch", 11, 256).getStackForm(1L)); + 15236, "hatch.dynamotunnel1.tier.11", "UIV 256A/t Laser Source Hatch", 11, 256).getStackForm(1L)); eM_dynamoTunnel2_UIV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15246, "hatch.dynamotunnel2.tier.11", "UIV 1024A/s Laser Source Hatch", 11, 1024).getStackForm(1L)); + 15246, "hatch.dynamotunnel2.tier.11", "UIV 1024A/t Laser Source Hatch", 11, 1024).getStackForm(1L)); eM_dynamoTunnel3_UIV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15256, "hatch.dynamotunnel3.tier.11", "UIV 4096A/s Laser Source Hatch", 11, 4096).getStackForm(1L)); + 15256, "hatch.dynamotunnel3.tier.11", "UIV 4096A/t Laser Source Hatch", 11, 4096).getStackForm(1L)); eM_dynamoTunnel4_UIV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15266, "hatch.dynamotunnel4.tier.11", "UIV 16384A/s Laser Source Hatch", 11, 16384).getStackForm(1L)); + 15266, "hatch.dynamotunnel4.tier.11", "UIV 16384A/t Laser Source Hatch", 11, 16384).getStackForm(1L)); eM_dynamoTunnel5_UIV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15276, "hatch.dynamotunnel5.tier.11", "UIV 65536A/s Laser Source Hatch", 11, 65536).getStackForm(1L)); + 15276, "hatch.dynamotunnel5.tier.11", "UIV 65536A/t Laser Source Hatch", 11, 65536).getStackForm(1L)); eM_dynamoTunnel6_UIV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15286, "hatch.dynamotunnel6.tier.11", "UIV 262144A/s Laser Source Hatch", 11, 262144).getStackForm(1L)); + 15286, "hatch.dynamotunnel6.tier.11", "UIV 262144A/t Laser Source Hatch", 11, 262144).getStackForm(1L)); eM_dynamoTunnel7_UIV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15296, "hatch.dynamotunnel7.tier.11", "UIV 1048576A/s Laser Source Hatch", 11, 1048576).getStackForm(1L)); + 15296, "hatch.dynamotunnel7.tier.11", "UIV 1048576A/t Laser Source Hatch", 11, 1048576).getStackForm(1L)); eM_dynamoTunnel1_UMV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15237, "hatch.dynamotunnel1.tier.12", "UMV 256A/s Laser Source Hatch", 12, 256).getStackForm(1L)); + 15237, "hatch.dynamotunnel1.tier.12", "UMV 256A/t Laser Source Hatch", 12, 256).getStackForm(1L)); eM_dynamoTunnel2_UMV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15247, "hatch.dynamotunnel2.tier.12", "UMV 1024A/s Laser Source Hatch", 12, 1024).getStackForm(1L)); + 15247, "hatch.dynamotunnel2.tier.12", "UMV 1024A/t Laser Source Hatch", 12, 1024).getStackForm(1L)); eM_dynamoTunnel3_UMV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15257, "hatch.dynamotunnel3.tier.12", "UMV 4096A/s Laser Source Hatch", 12, 4096).getStackForm(1L)); + 15257, "hatch.dynamotunnel3.tier.12", "UMV 4096A/t Laser Source Hatch", 12, 4096).getStackForm(1L)); eM_dynamoTunnel4_UMV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15267, "hatch.dynamotunnel4.tier.12", "UMV 16384A/s Laser Source Hatch", 12, 16384).getStackForm(1L)); + 15267, "hatch.dynamotunnel4.tier.12", "UMV 16384A/t Laser Source Hatch", 12, 16384).getStackForm(1L)); eM_dynamoTunnel5_UMV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15277, "hatch.dynamotunnel5.tier.12", "UMV 65536A/s Laser Source Hatch", 12, 65536).getStackForm(1L)); + 15277, "hatch.dynamotunnel5.tier.12", "UMV 65536A/t Laser Source Hatch", 12, 65536).getStackForm(1L)); eM_dynamoTunnel6_UMV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15287, "hatch.dynamotunnel6.tier.12", "UMV 262144A/s Laser Source Hatch", 12, 262144).getStackForm(1L)); + 15287, "hatch.dynamotunnel6.tier.12", "UMV 262144A/t Laser Source Hatch", 12, 262144).getStackForm(1L)); eM_dynamoTunnel7_UMV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15297, "hatch.dynamotunnel7.tier.12", "UMV 1048576A/s Laser Source Hatch", 12, 1048576).getStackForm(1L)); + 15297, "hatch.dynamotunnel7.tier.12", "UMV 1048576A/t Laser Source Hatch", 12, 1048576).getStackForm(1L)); eM_dynamoTunnel1_UXV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15238, "hatch.dynamotunnel1.tier.13", "UXV 256A/s Laser Source Hatch", 13, 256).getStackForm(1L)); + 15238, "hatch.dynamotunnel1.tier.13", "UXV 256A/t Laser Source Hatch", 13, 256).getStackForm(1L)); eM_dynamoTunnel2_UXV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15248, "hatch.dynamotunnel2.tier.13", "UXV 1024A/s Laser Source Hatch", 13, 1024).getStackForm(1L)); + 15248, "hatch.dynamotunnel2.tier.13", "UXV 1024A/t Laser Source Hatch", 13, 1024).getStackForm(1L)); eM_dynamoTunnel3_UXV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15258, "hatch.dynamotunnel3.tier.13", "UXV 4096A/s Laser Source Hatch", 13, 4096).getStackForm(1L)); + 15258, "hatch.dynamotunnel3.tier.13", "UXV 4096A/t Laser Source Hatch", 13, 4096).getStackForm(1L)); eM_dynamoTunnel4_UXV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15268, "hatch.dynamotunnel4.tier.13", "UXV 16384A/s Laser Source Hatch", 13, 16384).getStackForm(1L)); + 15268, "hatch.dynamotunnel4.tier.13", "UXV 16384A/t Laser Source Hatch", 13, 16384).getStackForm(1L)); eM_dynamoTunnel5_UXV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15278, "hatch.dynamotunnel5.tier.13", "UXV 65536A/s Laser Source Hatch", 13, 65536).getStackForm(1L)); + 15278, "hatch.dynamotunnel5.tier.13", "UXV 65536A/t Laser Source Hatch", 13, 65536).getStackForm(1L)); eM_dynamoTunnel6_UXV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15288, "hatch.dynamotunnel6.tier.13", "UXV 262144A/s Laser Source Hatch", 13, 262144).getStackForm(1L)); + 15288, "hatch.dynamotunnel6.tier.13", "UXV 262144A/t Laser Source Hatch", 13, 262144).getStackForm(1L)); eM_dynamoTunnel7_UXV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15298, "hatch.dynamotunnel7.tier.13", "UXV 1048576A/s Laser Source Hatch", 13, 1048576).getStackForm(1L)); + 15298, "hatch.dynamotunnel7.tier.13", "UXV 1048576A/t Laser Source Hatch", 13, 1048576).getStackForm(1L)); eM_dynamoTunnel9001.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( 15299, "hatch.dynamotunnel.tier.14", "Legendary Laser Source Hatch", 14, (int) V[14]).getStackForm(1L)); diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DynamoTunnel.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DynamoTunnel.java index fb3487bc09..841d2ec1a8 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DynamoTunnel.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DynamoTunnel.java @@ -148,13 +148,12 @@ public class GT_MetaTileEntity_Hatch_DynamoTunnel extends GT_MetaTileEntity_Hatc return; } else if (maxEUOutput() == ((GT_MetaTileEntity_Hatch_EnergyTunnel) aMetaTileEntity).maxEUInput()) { long diff = Math.min( - Amperes * 20, + Amperes * 20L * maxEUOutput(), Math.min( ((GT_MetaTileEntity_Hatch_EnergyTunnel) aMetaTileEntity).maxEUStore() - aMetaTileEntity.getBaseMetaTileEntity().getStoredEU(), - maxEUStore() - aBaseMetaTileEntity.getStoredEU() - ) / maxEUOutput() - ) * maxEUOutput(); + aBaseMetaTileEntity.getStoredEU() + )); setEUVar(aBaseMetaTileEntity.getStoredEU() - diff); diff --git a/src/main/resources/assets/tectech/lang/en_US.lang b/src/main/resources/assets/tectech/lang/en_US.lang index 70f7d5ab8f..3b8bc433ed 100644 --- a/src/main/resources/assets/tectech/lang/en_US.lang +++ b/src/main/resources/assets/tectech/lang/en_US.lang @@ -210,69 +210,69 @@ gt.blockmachines.hatch.energymulti64.tier.13.name=UXV 64A Energy Hatch gt.blockmachines.hatch.energymulti.desc.0=Multiple Ampere Energy Injector for Multiblocks gt.blockmachines.hatch.energymulti.desc.1=Amperes In -gt.blockmachines.hatch.energytunnel1.tier.05.name=IV 256A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel2.tier.05.name=IV 1024A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel3.tier.05.name=IV 4096A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel4.tier.05.name=IV 16384A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel5.tier.05.name=IV 65536A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel6.tier.05.name=IV 262144A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel7.tier.05.name=IV 1048576A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel1.tier.06.name=LuV 256A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel2.tier.06.name=LuV 1024A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel3.tier.06.name=LuV 4096A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel4.tier.06.name=LuV 16384A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel5.tier.06.name=LuV 65536A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel6.tier.06.name=LuV 262144A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel7.tier.06.name=LuV 1048576A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel1.tier.07.name=ZPM 256A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel2.tier.07.name=ZPM 1024A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel3.tier.07.name=ZPM 4096A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel4.tier.07.name=ZPM 16384A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel5.tier.07.name=ZPM 65536A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel6.tier.07.name=ZPM 262144A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel7.tier.07.name=ZPM 1048576A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel1.tier.08.name=UV 256A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel2.tier.08.name=UV 1024A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel3.tier.08.name=UV 4096A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel4.tier.08.name=UV 16384A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel5.tier.08.name=UV 65536A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel6.tier.08.name=UV 262144A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel7.tier.08.name=UV 1048576A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel1.tier.09.name=UHV 256A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel2.tier.09.name=UHV 1024A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel3.tier.09.name=UHV 4096A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel4.tier.09.name=UHV 16384A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel5.tier.09.name=UHV 65536A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel6.tier.09.name=UHV 262144A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel7.tier.09.name=UHV 1048576A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel1.tier.10.name=UEV 256A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel2.tier.10.name=UEV 1024A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel3.tier.10.name=UEV 4096A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel4.tier.10.name=UEV 16384A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel5.tier.10.name=UEV 65536A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel6.tier.10.name=UEV 262144A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel7.tier.10.name=UEV 1048576A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel1.tier.11.name=UIV 256A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel2.tier.11.name=UIV 1024A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel3.tier.11.name=UIV 4096A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel4.tier.11.name=UIV 16384A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel5.tier.11.name=UIV 65536A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel6.tier.11.name=UIV 262144A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel7.tier.11.name=UIV 1048576A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel1.tier.12.name=UMV 256A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel2.tier.12.name=UMV 1024A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel3.tier.12.name=UMV 4096A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel4.tier.12.name=UMV 16384A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel5.tier.12.name=UMV 65536A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel6.tier.12.name=UMV 262144A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel7.tier.12.name=UMV 1048576A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel1.tier.13.name=UXV 256A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel2.tier.13.name=UXV 1024A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel3.tier.13.name=UXV 4096A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel4.tier.13.name=UXV 16384A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel5.tier.13.name=UXV 65536A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel6.tier.13.name=UXV 262144A/s Laser Target Hatch -gt.blockmachines.hatch.energytunnel7.tier.13.name=UXV 1048576A/s Laser Target Hatch +gt.blockmachines.hatch.energytunnel1.tier.05.name=IV 256A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel2.tier.05.name=IV 1024A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel3.tier.05.name=IV 4096A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel4.tier.05.name=IV 16384A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel5.tier.05.name=IV 65536A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel6.tier.05.name=IV 262144A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel7.tier.05.name=IV 1048576A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel1.tier.06.name=LuV 256A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel2.tier.06.name=LuV 1024A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel3.tier.06.name=LuV 4096A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel4.tier.06.name=LuV 16384A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel5.tier.06.name=LuV 65536A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel6.tier.06.name=LuV 262144A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel7.tier.06.name=LuV 1048576A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel1.tier.07.name=ZPM 256A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel2.tier.07.name=ZPM 1024A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel3.tier.07.name=ZPM 4096A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel4.tier.07.name=ZPM 16384A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel5.tier.07.name=ZPM 65536A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel6.tier.07.name=ZPM 262144A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel7.tier.07.name=ZPM 1048576A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel1.tier.08.name=UV 256A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel2.tier.08.name=UV 1024A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel3.tier.08.name=UV 4096A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel4.tier.08.name=UV 16384A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel5.tier.08.name=UV 65536A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel6.tier.08.name=UV 262144A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel7.tier.08.name=UV 1048576A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel1.tier.09.name=UHV 256A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel2.tier.09.name=UHV 1024A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel3.tier.09.name=UHV 4096A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel4.tier.09.name=UHV 16384A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel5.tier.09.name=UHV 65536A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel6.tier.09.name=UHV 262144A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel7.tier.09.name=UHV 1048576A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel1.tier.10.name=UEV 256A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel2.tier.10.name=UEV 1024A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel3.tier.10.name=UEV 4096A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel4.tier.10.name=UEV 16384A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel5.tier.10.name=UEV 65536A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel6.tier.10.name=UEV 262144A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel7.tier.10.name=UEV 1048576A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel1.tier.11.name=UIV 256A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel2.tier.11.name=UIV 1024A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel3.tier.11.name=UIV 4096A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel4.tier.11.name=UIV 16384A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel5.tier.11.name=UIV 65536A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel6.tier.11.name=UIV 262144A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel7.tier.11.name=UIV 1048576A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel1.tier.12.name=UMV 256A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel2.tier.12.name=UMV 1024A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel3.tier.12.name=UMV 4096A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel4.tier.12.name=UMV 16384A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel5.tier.12.name=UMV 65536A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel6.tier.12.name=UMV 262144A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel7.tier.12.name=UMV 1048576A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel1.tier.13.name=UXV 256A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel2.tier.13.name=UXV 1024A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel3.tier.13.name=UXV 4096A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel4.tier.13.name=UXV 16384A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel5.tier.13.name=UXV 65536A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel6.tier.13.name=UXV 262144A/t Laser Target Hatch +gt.blockmachines.hatch.energytunnel7.tier.13.name=UXV 1048576A/t Laser Target Hatch gt.blockmachines.hatch.energytunnel.tier.14.name=Legendary Laser Target Hatch gt.blockmachines.hatch.energytunnel.desc.0=Energy injecting terminal for Multiblocks gt.blockmachines.hatch.energytunnel.desc.1=Throughput @@ -307,69 +307,69 @@ gt.blockmachines.hatch.dynamomulti64.tier.13.name=IV 64A Dynamo Hatch gt.blockmachines.hatch.dynamomulti.desc.0=Multiple Ampere Energy Extractor for Multiblocks gt.blockmachines.hatch.dynamomulti.desc.1=Amperes Out -gt.blockmachines.hatch.dynamotunnel1.tier.05.name=IV 256A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel2.tier.05.name=IV 1024A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel3.tier.05.name=IV 4096A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel4.tier.05.name=IV 16384A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel5.tier.05.name=IV 65536A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel6.tier.05.name=IV 262144A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel7.tier.05.name=IV 1048576A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel1.tier.06.name=LuV 256A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel2.tier.06.name=LuV 1024A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel3.tier.06.name=LuV 4096A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel4.tier.06.name=LuV 16384A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel5.tier.06.name=LuV 65536A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel6.tier.06.name=LuV 262144A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel7.tier.06.name=LuV 1048576A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel1.tier.07.name=ZPM 256A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel2.tier.07.name=ZPM 1024A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel3.tier.07.name=ZPM 4096A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel4.tier.07.name=ZPM 16384A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel5.tier.07.name=ZPM 65536A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel6.tier.07.name=ZPM 262144A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel7.tier.07.name=ZPM 1048576A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel1.tier.08.name=UV 256A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel2.tier.08.name=UV 1024A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel3.tier.08.name=UV 4096A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel4.tier.08.name=UV 16384A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel5.tier.08.name=UV 65536A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel6.tier.08.name=UV 262144A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel7.tier.08.name=UV 1048576A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel1.tier.09.name=UHV 256A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel2.tier.09.name=UHV 1024A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel3.tier.09.name=UHV 4096A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel4.tier.09.name=UHV 16384A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel5.tier.09.name=UHV 65536A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel6.tier.09.name=UHV 262144A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel7.tier.09.name=UHV 1048576A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel1.tier.10.name=UEV 256A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel2.tier.10.name=UEV 1024A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel3.tier.10.name=UEV 4096A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel4.tier.10.name=UEV 16384A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel5.tier.10.name=UEV 65536A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel6.tier.10.name=UEV 262144A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel7.tier.10.name=UEV 1048576A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel1.tier.11.name=UIV 256A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel2.tier.11.name=UIV 1024A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel3.tier.11.name=UIV 4096A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel4.tier.11.name=UIV 16384A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel5.tier.11.name=UIV 65536A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel6.tier.11.name=UIV 262144A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel7.tier.11.name=UIV 1048576A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel1.tier.12.name=UMV 256A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel2.tier.12.name=UMV 1024A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel3.tier.12.name=UMV 4096A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel4.tier.12.name=UMV 16384A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel5.tier.12.name=UMV 65536A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel6.tier.12.name=UMV 262144A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel7.tier.12.name=UMV 1048576A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel1.tier.13.name=UXV 256A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel2.tier.13.name=UXV 1024A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel3.tier.13.name=UXV 4096A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel4.tier.13.name=UXV 16384A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel5.tier.13.name=UXV 65536A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel6.tier.13.name=UXV 262144A/s Laser Source Hatch -gt.blockmachines.hatch.dynamotunnel7.tier.13.name=UXV 1048576A/s Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel1.tier.05.name=IV 256A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel2.tier.05.name=IV 1024A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel3.tier.05.name=IV 4096A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel4.tier.05.name=IV 16384A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel5.tier.05.name=IV 65536A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel6.tier.05.name=IV 262144A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel7.tier.05.name=IV 1048576A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel1.tier.06.name=LuV 256A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel2.tier.06.name=LuV 1024A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel3.tier.06.name=LuV 4096A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel4.tier.06.name=LuV 16384A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel5.tier.06.name=LuV 65536A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel6.tier.06.name=LuV 262144A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel7.tier.06.name=LuV 1048576A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel1.tier.07.name=ZPM 256A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel2.tier.07.name=ZPM 1024A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel3.tier.07.name=ZPM 4096A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel4.tier.07.name=ZPM 16384A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel5.tier.07.name=ZPM 65536A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel6.tier.07.name=ZPM 262144A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel7.tier.07.name=ZPM 1048576A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel1.tier.08.name=UV 256A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel2.tier.08.name=UV 1024A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel3.tier.08.name=UV 4096A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel4.tier.08.name=UV 16384A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel5.tier.08.name=UV 65536A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel6.tier.08.name=UV 262144A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel7.tier.08.name=UV 1048576A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel1.tier.09.name=UHV 256A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel2.tier.09.name=UHV 1024A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel3.tier.09.name=UHV 4096A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel4.tier.09.name=UHV 16384A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel5.tier.09.name=UHV 65536A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel6.tier.09.name=UHV 262144A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel7.tier.09.name=UHV 1048576A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel1.tier.10.name=UEV 256A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel2.tier.10.name=UEV 1024A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel3.tier.10.name=UEV 4096A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel4.tier.10.name=UEV 16384A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel5.tier.10.name=UEV 65536A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel6.tier.10.name=UEV 262144A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel7.tier.10.name=UEV 1048576A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel1.tier.11.name=UIV 256A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel2.tier.11.name=UIV 1024A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel3.tier.11.name=UIV 4096A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel4.tier.11.name=UIV 16384A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel5.tier.11.name=UIV 65536A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel6.tier.11.name=UIV 262144A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel7.tier.11.name=UIV 1048576A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel1.tier.12.name=UMV 256A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel2.tier.12.name=UMV 1024A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel3.tier.12.name=UMV 4096A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel4.tier.12.name=UMV 16384A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel5.tier.12.name=UMV 65536A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel6.tier.12.name=UMV 262144A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel7.tier.12.name=UMV 1048576A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel1.tier.13.name=UXV 256A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel2.tier.13.name=UXV 1024A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel3.tier.13.name=UXV 4096A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel4.tier.13.name=UXV 16384A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel5.tier.13.name=UXV 65536A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel6.tier.13.name=UXV 262144A/t Laser Source Hatch +gt.blockmachines.hatch.dynamotunnel7.tier.13.name=UXV 1048576A/t Laser Source Hatch gt.blockmachines.hatch.dynamotunnel.tier.14.name=Legendary Laser Source Hatch gt.blockmachines.hatch.dynamotunnel.desc.0=Energy extracting terminal for Multiblocks gt.blockmachines.hatch.dynamotunnel.desc.1=Throughput diff --git a/src/main/resources/assets/tectech/lang/zh_CN.lang b/src/main/resources/assets/tectech/lang/zh_CN.lang index 3484eb3579..6aae89bb1b 100644 --- a/src/main/resources/assets/tectech/lang/zh_CN.lang +++ b/src/main/resources/assets/tectech/lang/zh_CN.lang @@ -210,69 +210,69 @@ gt.blockmachines.hatch.energymulti64.tier.13.name=64安UXV能源仓 gt.blockmachines.hatch.energymulti.desc.0=为多方块机器以高电流输入能源 gt.blockmachines.hatch.energymulti.desc.1=输入电流 -gt.blockmachines.hatch.energytunnel1.tier.05.name=IV 256A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel2.tier.05.name=IV 1024A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel3.tier.05.name=IV 4096A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel4.tier.05.name=IV 16384A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel5.tier.05.name=IV 65536A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel6.tier.05.name=IV 262144A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel7.tier.05.name=IV 1048576A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel1.tier.06.name=LuV 256A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel2.tier.06.name=LuV 1024A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel3.tier.06.name=LuV 4096A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel4.tier.06.name=LuV 16384A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel5.tier.06.name=LuV 65536A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel6.tier.06.name=LuV 262144A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel7.tier.06.name=LuV 1048576A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel1.tier.07.name=ZPM 256A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel2.tier.07.name=ZPM 1024A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel3.tier.07.name=ZPM 4096A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel4.tier.07.name=ZPM 16384A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel5.tier.07.name=ZPM 65536A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel6.tier.07.name=ZPM 262144A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel7.tier.07.name=ZPM 1048576A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel1.tier.08.name=UV 256A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel2.tier.08.name=UV 1024A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel3.tier.08.name=UV 4096A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel4.tier.08.name=UV 16384A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel5.tier.08.name=UV 65536A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel6.tier.08.name=UV 262144A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel7.tier.08.name=UV 1048576A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel1.tier.09.name=UHV 256A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel2.tier.09.name=UHV 1024A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel3.tier.09.name=UHV 4096A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel4.tier.09.name=UHV 16384A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel5.tier.09.name=UHV 65536A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel6.tier.09.name=UHV 262144A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel7.tier.09.name=UHV 1048576A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel1.tier.10.name=UEV 256A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel2.tier.10.name=UEV 1024A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel3.tier.10.name=UEV 4096A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel4.tier.10.name=UEV 16384A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel5.tier.10.name=UEV 65536A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel6.tier.10.name=UEV 262144A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel7.tier.10.name=UEV 1048576A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel1.tier.11.name=UIV 256A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel2.tier.11.name=UIV 1024A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel3.tier.11.name=UIV 4096A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel4.tier.11.name=UIV 16384A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel5.tier.11.name=UIV 65536A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel6.tier.11.name=UIV 262144A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel7.tier.11.name=UIV 1048576A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel1.tier.12.name=UMV 256A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel2.tier.12.name=UMV 1024A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel3.tier.12.name=UMV 4096A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel4.tier.12.name=UMV 16384A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel5.tier.12.name=UMV 65536A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel6.tier.12.name=UMV 262144A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel7.tier.12.name=UMV 1048576A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel1.tier.13.name=UXV 256A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel2.tier.13.name=UXV 1024A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel3.tier.13.name=UXV 4096A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel4.tier.13.name=UXV 16384A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel5.tier.13.name=UXV 65536A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel6.tier.13.name=UXV 262144A/s 激光靶仓 -gt.blockmachines.hatch.energytunnel7.tier.13.name=UXV 1048576A/s 激光靶仓 +gt.blockmachines.hatch.energytunnel1.tier.05.name=IV 256A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel2.tier.05.name=IV 1024A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel3.tier.05.name=IV 4096A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel4.tier.05.name=IV 16384A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel5.tier.05.name=IV 65536A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel6.tier.05.name=IV 262144A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel7.tier.05.name=IV 1048576A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel1.tier.06.name=LuV 256A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel2.tier.06.name=LuV 1024A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel3.tier.06.name=LuV 4096A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel4.tier.06.name=LuV 16384A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel5.tier.06.name=LuV 65536A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel6.tier.06.name=LuV 262144A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel7.tier.06.name=LuV 1048576A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel1.tier.07.name=ZPM 256A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel2.tier.07.name=ZPM 1024A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel3.tier.07.name=ZPM 4096A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel4.tier.07.name=ZPM 16384A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel5.tier.07.name=ZPM 65536A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel6.tier.07.name=ZPM 262144A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel7.tier.07.name=ZPM 1048576A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel1.tier.08.name=UV 256A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel2.tier.08.name=UV 1024A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel3.tier.08.name=UV 4096A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel4.tier.08.name=UV 16384A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel5.tier.08.name=UV 65536A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel6.tier.08.name=UV 262144A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel7.tier.08.name=UV 1048576A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel1.tier.09.name=UHV 256A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel2.tier.09.name=UHV 1024A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel3.tier.09.name=UHV 4096A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel4.tier.09.name=UHV 16384A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel5.tier.09.name=UHV 65536A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel6.tier.09.name=UHV 262144A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel7.tier.09.name=UHV 1048576A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel1.tier.10.name=UEV 256A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel2.tier.10.name=UEV 1024A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel3.tier.10.name=UEV 4096A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel4.tier.10.name=UEV 16384A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel5.tier.10.name=UEV 65536A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel6.tier.10.name=UEV 262144A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel7.tier.10.name=UEV 1048576A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel1.tier.11.name=UIV 256A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel2.tier.11.name=UIV 1024A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel3.tier.11.name=UIV 4096A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel4.tier.11.name=UIV 16384A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel5.tier.11.name=UIV 65536A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel6.tier.11.name=UIV 262144A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel7.tier.11.name=UIV 1048576A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel1.tier.12.name=UMV 256A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel2.tier.12.name=UMV 1024A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel3.tier.12.name=UMV 4096A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel4.tier.12.name=UMV 16384A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel5.tier.12.name=UMV 65536A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel6.tier.12.name=UMV 262144A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel7.tier.12.name=UMV 1048576A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel1.tier.13.name=UXV 256A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel2.tier.13.name=UXV 1024A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel3.tier.13.name=UXV 4096A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel4.tier.13.name=UXV 16384A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel5.tier.13.name=UXV 65536A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel6.tier.13.name=UXV 262144A/t 激光靶仓 +gt.blockmachines.hatch.energytunnel7.tier.13.name=UXV 1048576A/t 激光靶仓 gt.blockmachines.hatch.energytunnel.tier.14.name=传奇激光靶仓 gt.blockmachines.hatch.energytunnel.desc.0=多方块机器的能量输入端 gt.blockmachines.hatch.energytunnel.desc.1=通量 @@ -307,69 +307,69 @@ gt.blockmachines.hatch.dynamomulti64.tier.13.name=64安IV动力仓 gt.blockmachines.hatch.dynamomulti.desc.0=从多方块机器以高电流输出能源 gt.blockmachines.hatch.dynamomulti.desc.1=输出电流 -gt.blockmachines.hatch.dynamotunnel1.tier.05.name=IV 256A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel2.tier.05.name=IV 1024A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel3.tier.05.name=IV 4096A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel4.tier.05.name=IV 16384A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel5.tier.05.name=IV 65536A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel6.tier.05.name=IV 262144A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel7.tier.05.name=IV 1048576A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel1.tier.06.name=LuV 256A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel2.tier.06.name=LuV 1024A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel3.tier.06.name=LuV 4096A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel4.tier.06.name=LuV 16384A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel5.tier.06.name=LuV 65536A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel6.tier.06.name=LuV 262144A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel7.tier.06.name=LuV 1048576A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel1.tier.07.name=ZPM 256A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel2.tier.07.name=ZPM 1024A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel3.tier.07.name=ZPM 4096A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel4.tier.07.name=ZPM 16384A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel5.tier.07.name=ZPM 65536A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel6.tier.07.name=ZPM 262144A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel7.tier.07.name=ZPM 1048576A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel1.tier.08.name=UV 256A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel2.tier.08.name=UV 1024A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel3.tier.08.name=UV 4096A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel4.tier.08.name=UV 16384A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel5.tier.08.name=UV 65536A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel6.tier.08.name=UV 262144A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel7.tier.08.name=UV 1048576A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel1.tier.09.name=UHV 256A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel2.tier.09.name=UHV 1024A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel3.tier.09.name=UHV 4096A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel4.tier.09.name=UHV 16384A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel5.tier.09.name=UHV 65536A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel6.tier.09.name=UHV 262144A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel7.tier.09.name=UHV 1048576A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel1.tier.10.name=UEV 256A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel2.tier.10.name=UEV 1024A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel3.tier.10.name=UEV 4096A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel4.tier.10.name=UEV 16384A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel5.tier.10.name=UEV 65536A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel6.tier.10.name=UEV 262144A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel7.tier.10.name=UEV 1048576A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel1.tier.11.name=UIV 256A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel2.tier.11.name=UIV 1024A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel3.tier.11.name=UIV 4096A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel4.tier.11.name=UIV 16384A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel5.tier.11.name=UIV 65536A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel6.tier.11.name=UIV 262144A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel7.tier.11.name=UIV 1048576A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel1.tier.12.name=UMV 256A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel2.tier.12.name=UMV 1024A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel3.tier.12.name=UMV 4096A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel4.tier.12.name=UMV 16384A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel5.tier.12.name=UMV 65536A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel6.tier.12.name=UMV 262144A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel7.tier.12.name=UMV 1048576A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel1.tier.13.name=UXV 256A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel2.tier.13.name=UXV 1024A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel3.tier.13.name=UXV 4096A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel4.tier.13.name=UXV 16384A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel5.tier.13.name=UXV 65536A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel6.tier.13.name=UXV 262144A/s 激光源仓 -gt.blockmachines.hatch.dynamotunnel7.tier.13.name=UXV 1048576A/s 激光源仓 +gt.blockmachines.hatch.dynamotunnel1.tier.05.name=IV 256A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel2.tier.05.name=IV 1024A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel3.tier.05.name=IV 4096A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel4.tier.05.name=IV 16384A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel5.tier.05.name=IV 65536A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel6.tier.05.name=IV 262144A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel7.tier.05.name=IV 1048576A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel1.tier.06.name=LuV 256A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel2.tier.06.name=LuV 1024A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel3.tier.06.name=LuV 4096A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel4.tier.06.name=LuV 16384A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel5.tier.06.name=LuV 65536A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel6.tier.06.name=LuV 262144A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel7.tier.06.name=LuV 1048576A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel1.tier.07.name=ZPM 256A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel2.tier.07.name=ZPM 1024A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel3.tier.07.name=ZPM 4096A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel4.tier.07.name=ZPM 16384A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel5.tier.07.name=ZPM 65536A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel6.tier.07.name=ZPM 262144A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel7.tier.07.name=ZPM 1048576A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel1.tier.08.name=UV 256A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel2.tier.08.name=UV 1024A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel3.tier.08.name=UV 4096A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel4.tier.08.name=UV 16384A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel5.tier.08.name=UV 65536A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel6.tier.08.name=UV 262144A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel7.tier.08.name=UV 1048576A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel1.tier.09.name=UHV 256A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel2.tier.09.name=UHV 1024A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel3.tier.09.name=UHV 4096A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel4.tier.09.name=UHV 16384A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel5.tier.09.name=UHV 65536A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel6.tier.09.name=UHV 262144A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel7.tier.09.name=UHV 1048576A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel1.tier.10.name=UEV 256A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel2.tier.10.name=UEV 1024A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel3.tier.10.name=UEV 4096A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel4.tier.10.name=UEV 16384A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel5.tier.10.name=UEV 65536A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel6.tier.10.name=UEV 262144A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel7.tier.10.name=UEV 1048576A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel1.tier.11.name=UIV 256A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel2.tier.11.name=UIV 1024A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel3.tier.11.name=UIV 4096A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel4.tier.11.name=UIV 16384A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel5.tier.11.name=UIV 65536A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel6.tier.11.name=UIV 262144A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel7.tier.11.name=UIV 1048576A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel1.tier.12.name=UMV 256A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel2.tier.12.name=UMV 1024A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel3.tier.12.name=UMV 4096A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel4.tier.12.name=UMV 16384A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel5.tier.12.name=UMV 65536A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel6.tier.12.name=UMV 262144A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel7.tier.12.name=UMV 1048576A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel1.tier.13.name=UXV 256A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel2.tier.13.name=UXV 1024A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel3.tier.13.name=UXV 4096A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel4.tier.13.name=UXV 16384A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel5.tier.13.name=UXV 65536A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel6.tier.13.name=UXV 262144A/t 激光源仓 +gt.blockmachines.hatch.dynamotunnel7.tier.13.name=UXV 1048576A/t 激光源仓 gt.blockmachines.hatch.dynamotunnel.tier.14.name=传奇激光源仓 gt.blockmachines.hatch.dynamotunnel.desc.0=多方块机器的能量输出端 gt.blockmachines.hatch.dynamotunnel.desc.1=通量 -- cgit From b63dcaf7b782d033742b28bf88f9587f6a7ab611 Mon Sep 17 00:00:00 2001 From: Tec Date: Tue, 12 May 2020 22:22:37 +0200 Subject: Adjust for comfort --- .../java/com/github/technus/tectech/loader/thing/MachineLoader.java | 4 ++-- .../metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DynamoTunnel.java | 2 +- .../metaTileEntity/hatch/GT_MetaTileEntity_Hatch_EnergyTunnel.java | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/loader/thing/MachineLoader.java b/src/main/java/com/github/technus/tectech/loader/thing/MachineLoader.java index 3891d28845..8a46732e66 100644 --- a/src/main/java/com/github/technus/tectech/loader/thing/MachineLoader.java +++ b/src/main/java/com/github/technus/tectech/loader/thing/MachineLoader.java @@ -332,7 +332,7 @@ public class MachineLoader implements Runnable { eM_energyTunnel7_UXV.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( 15198, "hatch.energytunnel7.tier.13", "UXV 1048576A/t Laser Target Hatch", 13, 1048576).getStackForm(1L)); eM_energyTunnel9001.set(new GT_MetaTileEntity_Hatch_EnergyTunnel( - 15199, "hatch.energytunnel.tier.14", "Legendary Laser Target Hatch", 14, (int) V[14]).getStackForm(1L)); + 15199, "hatch.energytunnel.tier.14", "Legendary Laser Target Hatch", 13, (int) V[13]).getStackForm(1L)); // =================================================================================================== // Multi AMP Power OUTPUTS @@ -540,7 +540,7 @@ public class MachineLoader implements Runnable { eM_dynamoTunnel7_UXV.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( 15298, "hatch.dynamotunnel7.tier.13", "UXV 1048576A/t Laser Source Hatch", 13, 1048576).getStackForm(1L)); eM_dynamoTunnel9001.set(new GT_MetaTileEntity_Hatch_DynamoTunnel( - 15299, "hatch.dynamotunnel.tier.14", "Legendary Laser Source Hatch", 14, (int) V[14]).getStackForm(1L)); + 15299, "hatch.dynamotunnel.tier.14", "Legendary Laser Source Hatch", 13, (int) V[13]).getStackForm(1L)); // =================================================================================================== // MULTIBLOCKS diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DynamoTunnel.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DynamoTunnel.java index 841d2ec1a8..beacf26122 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DynamoTunnel.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DynamoTunnel.java @@ -78,7 +78,7 @@ public class GT_MetaTileEntity_Hatch_DynamoTunnel extends GT_MetaTileEntity_Hatc @Override public long maxEUStore() { - return 512L + V[mTier] * 4L * Amperes; + return V[mTier] * 24L * Amperes; } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_EnergyTunnel.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_EnergyTunnel.java index 2407f2ab0a..2393f4f702 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_EnergyTunnel.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_EnergyTunnel.java @@ -75,7 +75,7 @@ public class GT_MetaTileEntity_Hatch_EnergyTunnel extends GT_MetaTileEntity_Hatc @Override public long maxEUStore() { - return 512L + V[mTier] * 4L * Amperes; + return V[mTier] * 24L * Amperes; } @Override -- cgit From 80f297676089d2b4507d9f996f52ba35edff2ef5 Mon Sep 17 00:00:00 2001 From: DreamMasterXXL Date: Wed, 13 May 2020 10:16:49 +0200 Subject: bump version --- build.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.properties b/build.properties index 2aaa4ac7ce..5eafc26e8e 100644 --- a/build.properties +++ b/build.properties @@ -1,6 +1,6 @@ minecraft.version=1.7.10 forge.version=10.13.4.1614 -tectech.version=3.8.1 +tectech.version=3.8.2 ic2.version=2.2.790-experimental codechickenlib.version=1.1.3.140 -- cgit From 3ccc193c26828c3e4ad2016a1b8a08e6793164ff Mon Sep 17 00:00:00 2001 From: Tec Date: Thu, 14 May 2020 09:27:22 +0200 Subject: Cleanup, add debug print, fix hatch adder optional --- .../mechanics/structure/IStructureDefinition.java | 24 ++++++++++++- .../mechanics/structure/StructureUtility.java | 39 ++++++++++++++++++++-- 2 files changed, 59 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java index 542d13a7cd..c8488d5cea 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java @@ -1,9 +1,14 @@ package com.github.technus.tectech.mechanics.structure; +import com.github.technus.tectech.TecTech; import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; import net.minecraft.item.ItemStack; import net.minecraft.world.World; +import java.util.Arrays; + +import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; + public interface IStructureDefinition { /** * Used internally @@ -73,9 +78,17 @@ public interface IStructureDefinition { if (world.blockExists(xyz[0], xyz[1], xyz[2])) { if(!element.check(object, world, xyz[0], xyz[1], xyz[2])){ + if(DEBUG_MODE){ + TecTech.LOGGER.info("Multi ["+basePositionX+", "+basePositionY+", "+basePositionZ+"] failed @ "+ + Arrays.toString(xyz)+" "+Arrays.toString(abc)); + } return false; } - }else { + } else { + if(DEBUG_MODE){ + TecTech.LOGGER.info("Multi ["+basePositionX+", "+basePositionY+", "+basePositionZ+"] !blockExists @ "+ + Arrays.toString(xyz)+" "+Arrays.toString(abc)); + } return false; } abc[0]+=1; @@ -95,8 +108,17 @@ public interface IStructureDefinition { if (world.blockExists(xyz[0], xyz[1], xyz[2])) { if(!element.check(object, world, xyz[0], xyz[1], xyz[2])){ + if(DEBUG_MODE){ + TecTech.LOGGER.info("Multi ["+basePositionX+", "+basePositionY+", "+basePositionZ+"] failed @ "+ + Arrays.toString(xyz)+" "+Arrays.toString(abc)); + } return false; } + } else { + if(DEBUG_MODE){ + TecTech.LOGGER.info("Multi ["+basePositionX+", "+basePositionY+", "+basePositionZ+"] !blockExists @ "+ + Arrays.toString(xyz)+" "+Arrays.toString(abc)); + } } abc[0]+=1; } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java index 00bdcdb1ad..1c2fd18326 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java @@ -112,6 +112,8 @@ public class StructureUtility { return ERROR; } + //region hint only + /** * Check always returns: true. * @@ -180,6 +182,10 @@ public class StructureUtility { }; } + //endregion + + //region block + /** * Does not allow Block duplicates (with different meta) */ @@ -354,6 +360,10 @@ public class StructureUtility { return ofBlock(block, meta, block, meta); } + //endregion + + //region adders + public static IStructureElement ofBlockAdder(IBlockAdder iBlockAdder, Block defaultBlock, int defaultMeta) { if (iBlockAdder == null || defaultBlock == null) { throw new IllegalArgumentException(); @@ -436,9 +446,9 @@ public class StructureUtility { @Override public boolean check(T t, World world, int x, int y, int z) { TileEntity tileEntity = world.getTileEntity(x, y, z); - return tileEntity instanceof IGregTechTileEntity && - (iHatchAdder.apply(t, (IGregTechTileEntity) tileEntity, (short) textureIndex) || - (world.getBlock(x, y, z) == placeCasing && world.getBlockMetadata(x, y, z) == placeCasingMeta)); + return (tileEntity instanceof IGregTechTileEntity && + iHatchAdder.apply(t, (IGregTechTileEntity) tileEntity, (short) textureIndex)) || + (world.getBlock(x, y, z) == placeCasing && world.getBlockMetadata(x, y, z) == placeCasingMeta); } @Override @@ -455,6 +465,10 @@ public class StructureUtility { }; } + //endregion + + //region side effects + public static , T> IStructureElement onElementPass(Consumer onCheckPass, B element) { return new IStructureElement() { @Override @@ -501,6 +515,7 @@ public class StructureUtility { }; } + //endregion /** * Take care while chaining, as it will try to call every structure element until it returns true. @@ -536,6 +551,8 @@ public class StructureUtility { return ofChain(elementChain.toArray(new IStructureElement[0])); } + //region defer + public static IStructureElementDeferred defer(Supplier> to) { if (to == null) { throw new IllegalArgumentException(); @@ -840,10 +857,26 @@ public class StructureUtility { return defer(keyExtractorCheck, keyExtractor, array.toArray(new IStructureElement[0])); } + //endregion + + /** + * Used internally, to generate skips for structure definitions + * @param a + * @param b + * @param c + * @param + * @return + */ public static IStructureNavigate step(int a, int b, int c) { return step(new Vec3Impl(a, b, c)); } + /** + * Used internally, to generate skips for structure definitions + * @param step + * @param + * @return + */ @SuppressWarnings("unchecked") public static IStructureNavigate step(Vec3Impl step) { if (step == null || step.get0() < 0 || step.get1() < 0 || step.get2() < 0) { -- cgit From f840c335e5a15ff244f2e8cd5583e8c5d3a26de6 Mon Sep 17 00:00:00 2001 From: DreamMasterXXL Date: Mon, 1 Jun 2020 17:00:55 +0200 Subject: Buck Converter from TecTech #6179 https://github.com/GTNewHorizons/GT-New-Horizons-Modpack/issues/6179 --- .../dreamcraft/DreamCraftRecipeLoader.java | 24 +++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java index b863e35901..6fff07cbc5 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java +++ b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java @@ -253,9 +253,9 @@ public class DreamCraftRecipeLoader implements Runnable { GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("Transformer_UIV_UEV").get(1), CustomItemList.eM_dynamoMulti4_UEV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Draconium, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Bedrockium", Materials.Neutronium), 4)}, Materials.Electrum.getMolten(4608), CustomItemList.eM_dynamoMulti16_UEV.get(1), 200, 2000000); GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("WetTransformer_UIV_UEV").get(1), CustomItemList.eM_dynamoMulti16_UEV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.Draconium, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Bedrockium", Materials.Neutronium), 6)}, Materials.Tungsten.getMolten(4608), CustomItemList.eM_dynamoMulti64_UEV.get(1), 400, 2000000); - //GT_Values.RA.ADD_ASSEMBLER_RECIPE(new ItemStack[]{com.dreammaster.gthandler.CustomItemList.Hatch_Dynamo_UIV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.NetherStar, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BlackPlutonium, 2)}, Materials.Silver.getMolten(8000), CustomItemList.eM_dynamoMulti4_UIV.get(1), 100, 8000000); - //GT_Values.RA.ADD_ASSEMBLER_RECIPE(new ItemStack[]{com.dreammaster.gthandler.CustomItemList.Transformer_UMV_UIV.get(1), CustomItemList.eM_dynamoMulti4_UIV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.NetherStar, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BlackPlutonium, 4)}, Materials.Electrum.getMolten(8000), CustomItemList.eM_dynamoMulti16_UIV.get(1), 200, 8000000); - //GT_Values.RA.ADD_ASSEMBLER_RECIPE(new ItemStack[]{com.dreammaster.gthandler.CustomItemList.WetTransformer_UMV_UIV.get(1), CustomItemList.eM_dynamoMulti16_UIV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.NetherStar, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BlackPlutonium, 6)}, Materials.Tungsten.getMolten(8000), CustomItemList.eM_dynamoMulti64_UIV.get(1), 400, 8000000); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("Hatch_Dynamo_UIV").get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.NetherStar, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("BlackPlutonium", Materials.Neutronium), 2)}, Materials.Silver.getMolten(8000), CustomItemList.eM_dynamoMulti4_UIV.get(1), 100, 8000000); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("Transformer_UMV_UIV").get(1), CustomItemList.eM_dynamoMulti4_UIV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.NetherStar, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("BlackPlutonium", Materials.Neutronium), 4)}, Materials.Electrum.getMolten(8000), CustomItemList.eM_dynamoMulti16_UIV.get(1), 200, 8000000); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("WetTransformer_UMV_UIV").get(1), CustomItemList.eM_dynamoMulti16_UIV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.NetherStar, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("BlackPlutonium", Materials.Neutronium), 6)}, Materials.Tungsten.getMolten(8000), CustomItemList.eM_dynamoMulti64_UIV.get(1), 400, 8000000); //Energy Hatches IV-UIV GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Hatch_Energy_IV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Tungsten, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 2)}, Materials.Silver.getMolten(144), CustomItemList.eM_energyMulti4_IV.get(1), 100, 1920); @@ -282,10 +282,20 @@ public class DreamCraftRecipeLoader implements Runnable { GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("Transformer_UIV_UEV").get(1), CustomItemList.eM_energyMulti4_UEV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Draconium, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Bedrockium", Materials.Neutronium), 4)}, Materials.Electrum.getMolten(4608), CustomItemList.eM_energyMulti16_UEV.get(1), 200, 2000000); GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("WetTransformer_UIV_UEV").get(1), CustomItemList.eM_energyMulti16_UEV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.Draconium, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Bedrockium", Materials.Neutronium), 6)}, Materials.Tungsten.getMolten(4608), CustomItemList.eM_energyMulti64_UEV.get(1), 400, 2000000); - //GT_Values.RA.ADD_ASSEMBLER_RECIPE(new ItemStack[]{com.dreammaster.gthandler.CustomItemList.Hatch_Energy_UIV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.NetherStar, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BlackPlutonium, 2)}, Materials.Silver.getMolten(8000), CustomItemList.eM_energyMulti4_UIV.get(1), 100, 8000000); - //GT_Values.RA.ADD_ASSEMBLER_RECIPE(new ItemStack[]{com.dreammaster.gthandler.CustomItemList.Transformer_UMV_UIV.get(1), CustomItemList.eM_energyMulti4_UIV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.NetherStar, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BlackPlutonium, 4)}, Materials.Electrum.getMolten(8000), CustomItemList.eM_energyMulti16_UIV.get(1), 200, 8000000); - //GT_Values.RA.ADD_ASSEMBLER_RECIPE(new ItemStack[]{com.dreammaster.gthandler.CustomItemList.WetTransformer_UMV_UIV.get(1), CustomItemList.eM_energyMulti16_UIV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.NetherStar, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BlackPlutonium, 6)}, Materials.Tungsten.getMolten(8000), CustomItemList.eM_energyMulti64_UIV.get(1), 400, 8000000); - + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("Hatch_Energy_UIV").get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.NetherStar, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("BlackPlutonium", Materials.Neutronium), 2)}, Materials.Silver.getMolten(8000), CustomItemList.eM_energyMulti4_UIV.get(1), 100, 8000000); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("Transformer_UMV_UIV").get(1), CustomItemList.eM_energyMulti4_UIV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.NetherStar, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("BlackPlutonium", Materials.Neutronium), 4)}, Materials.Electrum.getMolten(8000), CustomItemList.eM_energyMulti16_UIV.get(1), 200, 8000000); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("WetTransformer_UMV_UIV").get(1), CustomItemList.eM_energyMulti16_UIV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.NetherStar, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("BlackPlutonium", Materials.Neutronium), 6)}, Materials.Tungsten.getMolten(8000), CustomItemList.eM_energyMulti64_UIV.get(1), 400, 8000000); + + //Buck Converter IV-UIV + if(Loader.isModLoaded("bartworks")) { + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.eM_energyMulti64_IV.get(1), getItemContainer("display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Elite, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 2), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 2)}, Materials.TungstenSteel.getMolten(144), CustomItemList.Machine_BuckConverter_IV.get(1), 100, 7680); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.eM_energyMulti64_LuV.get(1), getItemContainer("display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Master, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), 2), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 3)}, new FluidStack(FluidRegistry.getFluid("molten.rhodium-plated palladium"), 288), CustomItemList.Machine_BuckConverter_LuV.get(1), 100, 30720); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.eM_energyMulti64_ZPM.get(1), getItemContainer("display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Ultimate, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 2), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 4)}, Materials.Iridium.getMolten(144), CustomItemList.Machine_BuckConverter_ZPM.get(1), 100, 122880); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.eM_energyMulti64_UV.get(1), getItemContainer("display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Superconductor, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 2), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 5)}, Materials.Osmium.getMolten(144), CustomItemList.Machine_BuckConverter_UV.get(1), 100, 500000); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.eM_energyMulti64_UHV.get(1), getItemContainer("display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Infinite, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 2), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 4L, 5)}, Materials.Neutronium.getMolten(144), CustomItemList.Machine_BuckConverter_UHV.get(1), 100, 2000000); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.eM_energyMulti64_UEV.get(1), getItemContainer("display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Bio, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Bedrockium", Materials.Neutronium), 2), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 8L, 5)}, Materials.Bedrockium.getMolten(144), CustomItemList.Machine_BuckConverter_UEV.get(1), 100, 8000000); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.eM_energyMulti64_UIV.get(1), getItemContainer("display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Nano, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("BlackPlutonium", Materials.Neutronium), 2), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 16L, 5)}, Materials.BlackPlutonium.getMolten(144), CustomItemList.Machine_BuckConverter_UIV.get(1), 200, 8000000); + } //Laser Dynamo IV-UEV 256/t GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Hull_IV.get(1), GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), ItemList.Emitter_IV.get(1), ItemList.Electric_Pump_IV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.TungstenSteel, 2), GT_Utility.getIntegratedCircuit(1)}, null, CustomItemList.eM_dynamoTunnel1_IV.get(1), 1000, 7680); GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Hull_LuV.get(1), GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), ItemList.Emitter_LuV.get(1), ItemList.Electric_Pump_LuV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.VanadiumGallium, 2), GT_Utility.getIntegratedCircuit(1)}, null, CustomItemList.eM_dynamoTunnel1_LuV.get(1), 1000, 30720); -- cgit From a98c065b4f266979be1ac23fbd1e163964a868cf Mon Sep 17 00:00:00 2001 From: DreamMasterXXL Date: Mon, 1 Jun 2020 17:09:05 +0200 Subject: Buck Converter from TecTech #6179 https://github.com/GTNewHorizons/GT-New-Horizons-Modpack/issues/6179 add neutronium fluid if Bedrockium and Black Plutonium not available --- .../tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java index 6fff07cbc5..8621c83216 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java +++ b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java @@ -293,8 +293,8 @@ public class DreamCraftRecipeLoader implements Runnable { GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.eM_energyMulti64_ZPM.get(1), getItemContainer("display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Ultimate, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 2), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 4)}, Materials.Iridium.getMolten(144), CustomItemList.Machine_BuckConverter_ZPM.get(1), 100, 122880); GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.eM_energyMulti64_UV.get(1), getItemContainer("display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Superconductor, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 2), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 5)}, Materials.Osmium.getMolten(144), CustomItemList.Machine_BuckConverter_UV.get(1), 100, 500000); GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.eM_energyMulti64_UHV.get(1), getItemContainer("display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Infinite, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 2), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 4L, 5)}, Materials.Neutronium.getMolten(144), CustomItemList.Machine_BuckConverter_UHV.get(1), 100, 2000000); - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.eM_energyMulti64_UEV.get(1), getItemContainer("display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Bio, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Bedrockium", Materials.Neutronium), 2), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 8L, 5)}, Materials.Bedrockium.getMolten(144), CustomItemList.Machine_BuckConverter_UEV.get(1), 100, 8000000); - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.eM_energyMulti64_UIV.get(1), getItemContainer("display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Nano, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("BlackPlutonium", Materials.Neutronium), 2), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 16L, 5)}, Materials.BlackPlutonium.getMolten(144), CustomItemList.Machine_BuckConverter_UIV.get(1), 200, 8000000); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.eM_energyMulti64_UEV.get(1), getItemContainer("display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Bio, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Bedrockium", Materials.Neutronium), 2), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 8L, 5)}, getOrDefault("Bedrockium", Materials.Neutronium).getMolten(144), CustomItemList.Machine_BuckConverter_UEV.get(1), 100, 8000000); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.eM_energyMulti64_UIV.get(1), getItemContainer("display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Nano, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("BlackPlutonium", Materials.Neutronium), 2), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 16L, 5)}, getOrDefault("BlackPlutonium", Materials.Neutronium).getMolten(144), CustomItemList.Machine_BuckConverter_UIV.get(1), 200, 8000000); } //Laser Dynamo IV-UEV 256/t GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Hull_IV.get(1), GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), ItemList.Emitter_IV.get(1), ItemList.Electric_Pump_IV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.TungstenSteel, 2), GT_Utility.getIntegratedCircuit(1)}, null, CustomItemList.eM_dynamoTunnel1_IV.get(1), 1000, 7680); -- cgit From 8c2c74b4b4f808d37a6b47450c5474ab63fbd361 Mon Sep 17 00:00:00 2001 From: DreamMasterXXL Date: Mon, 1 Jun 2020 17:18:32 +0200 Subject: bump version and gt dependencie for Jenkins --- build.properties | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build.properties b/build.properties index 5eafc26e8e..3b282b43c2 100644 --- a/build.properties +++ b/build.properties @@ -1,13 +1,13 @@ minecraft.version=1.7.10 forge.version=10.13.4.1614 -tectech.version=3.8.2 +tectech.version=3.8.3 ic2.version=2.2.790-experimental codechickenlib.version=1.1.3.140 codechickencore.version=1.0.7.47 nei.version=1.0.5.120 -gregtech.jenkinsbuild=545 -gregtech.version=5.09.33.44 +gregtech.jenkinsbuild=620 +gregtech.version=5.09.33.50 cofhcore.version=[1.7.10]3.1.4-329-dev yamcore.version=0.5.79 baubles.version=1.0.1.10 -- cgit From 11bf30cbff2e200f9bb6400aad1c81a209365d14 Mon Sep 17 00:00:00 2001 From: DreamMasterXXL Date: Mon, 1 Jun 2020 17:40:54 +0200 Subject: Buck Converter from TecTech #6179 https://github.com/GTNewHorizons/GT-New-Horizons-Modpack/issues/6179 fix Display naming --- .../compatibility/dreamcraft/DreamCraftRecipeLoader.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java index 8621c83216..3fa004f7d4 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java +++ b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java @@ -288,13 +288,13 @@ public class DreamCraftRecipeLoader implements Runnable { //Buck Converter IV-UIV if(Loader.isModLoaded("bartworks")) { - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.eM_energyMulti64_IV.get(1), getItemContainer("display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Elite, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 2), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 2)}, Materials.TungstenSteel.getMolten(144), CustomItemList.Machine_BuckConverter_IV.get(1), 100, 7680); - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.eM_energyMulti64_LuV.get(1), getItemContainer("display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Master, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), 2), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 3)}, new FluidStack(FluidRegistry.getFluid("molten.rhodium-plated palladium"), 288), CustomItemList.Machine_BuckConverter_LuV.get(1), 100, 30720); - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.eM_energyMulti64_ZPM.get(1), getItemContainer("display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Ultimate, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 2), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 4)}, Materials.Iridium.getMolten(144), CustomItemList.Machine_BuckConverter_ZPM.get(1), 100, 122880); - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.eM_energyMulti64_UV.get(1), getItemContainer("display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Superconductor, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 2), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 5)}, Materials.Osmium.getMolten(144), CustomItemList.Machine_BuckConverter_UV.get(1), 100, 500000); - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.eM_energyMulti64_UHV.get(1), getItemContainer("display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Infinite, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 2), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 4L, 5)}, Materials.Neutronium.getMolten(144), CustomItemList.Machine_BuckConverter_UHV.get(1), 100, 2000000); - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.eM_energyMulti64_UEV.get(1), getItemContainer("display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Bio, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Bedrockium", Materials.Neutronium), 2), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 8L, 5)}, getOrDefault("Bedrockium", Materials.Neutronium).getMolten(144), CustomItemList.Machine_BuckConverter_UEV.get(1), 100, 8000000); - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.eM_energyMulti64_UIV.get(1), getItemContainer("display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Nano, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("BlackPlutonium", Materials.Neutronium), 2), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 16L, 5)}, getOrDefault("BlackPlutonium", Materials.Neutronium).getMolten(144), CustomItemList.Machine_BuckConverter_UIV.get(1), 200, 8000000); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.eM_energyMulti64_IV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Elite, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 2), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 2)}, Materials.TungstenSteel.getMolten(144), CustomItemList.Machine_BuckConverter_IV.get(1), 100, 7680); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.eM_energyMulti64_LuV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Master, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), 2), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 3)}, new FluidStack(FluidRegistry.getFluid("molten.rhodium-plated palladium"), 288), CustomItemList.Machine_BuckConverter_LuV.get(1), 100, 30720); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.eM_energyMulti64_ZPM.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Ultimate, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 2), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 4)}, Materials.Iridium.getMolten(144), CustomItemList.Machine_BuckConverter_ZPM.get(1), 100, 122880); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.eM_energyMulti64_UV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Superconductor, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 2), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 5)}, Materials.Osmium.getMolten(144), CustomItemList.Machine_BuckConverter_UV.get(1), 100, 500000); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.eM_energyMulti64_UHV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Infinite, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 2), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 4L, 5)}, Materials.Neutronium.getMolten(144), CustomItemList.Machine_BuckConverter_UHV.get(1), 100, 2000000); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.eM_energyMulti64_UEV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Bio, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Bedrockium", Materials.Neutronium), 2), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 8L, 5)}, getOrDefault("Bedrockium", Materials.Neutronium).getMolten(144), CustomItemList.Machine_BuckConverter_UEV.get(1), 100, 8000000); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.eM_energyMulti64_UIV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Nano, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("BlackPlutonium", Materials.Neutronium), 2), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 16L, 5)}, getOrDefault("BlackPlutonium", Materials.Neutronium).getMolten(144), CustomItemList.Machine_BuckConverter_UIV.get(1), 200, 8000000); } //Laser Dynamo IV-UEV 256/t GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Hull_IV.get(1), GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), ItemList.Emitter_IV.get(1), ItemList.Electric_Pump_IV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.TungstenSteel, 2), GT_Utility.getIntegratedCircuit(1)}, null, CustomItemList.eM_dynamoTunnel1_IV.get(1), 1000, 7680); -- cgit From 66546d6b566772394523e0bca7848707da609bd9 Mon Sep 17 00:00:00 2001 From: DreamMasterXXL Date: Mon, 1 Jun 2020 18:28:20 +0200 Subject: Buck Converter from TecTech #6179 https://github.com/GTNewHorizons/GT-New-Horizons-Modpack/issues/6179 change BAse block be a GT Transformator add Wires --- .../compatibility/dreamcraft/DreamCraftRecipeLoader.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java index 3fa004f7d4..de1c69f118 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java +++ b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java @@ -288,13 +288,13 @@ public class DreamCraftRecipeLoader implements Runnable { //Buck Converter IV-UIV if(Loader.isModLoaded("bartworks")) { - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.eM_energyMulti64_IV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Elite, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 2), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 2)}, Materials.TungstenSteel.getMolten(144), CustomItemList.Machine_BuckConverter_IV.get(1), 100, 7680); - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.eM_energyMulti64_LuV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Master, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), 2), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 3)}, new FluidStack(FluidRegistry.getFluid("molten.rhodium-plated palladium"), 288), CustomItemList.Machine_BuckConverter_LuV.get(1), 100, 30720); - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.eM_energyMulti64_ZPM.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Ultimate, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 2), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 4)}, Materials.Iridium.getMolten(144), CustomItemList.Machine_BuckConverter_ZPM.get(1), 100, 122880); - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.eM_energyMulti64_UV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Superconductor, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 2), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 5)}, Materials.Osmium.getMolten(144), CustomItemList.Machine_BuckConverter_UV.get(1), 100, 500000); - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.eM_energyMulti64_UHV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Infinite, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 2), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 4L, 5)}, Materials.Neutronium.getMolten(144), CustomItemList.Machine_BuckConverter_UHV.get(1), 100, 2000000); - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.eM_energyMulti64_UEV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Bio, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Bedrockium", Materials.Neutronium), 2), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 8L, 5)}, getOrDefault("Bedrockium", Materials.Neutronium).getMolten(144), CustomItemList.Machine_BuckConverter_UEV.get(1), 100, 8000000); - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.eM_energyMulti64_UIV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Nano, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("BlackPlutonium", Materials.Neutronium), 2), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 16L, 5)}, getOrDefault("BlackPlutonium", Materials.Neutronium).getMolten(144), CustomItemList.Machine_BuckConverter_UIV.get(1), 200, 8000000); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_LuV_IV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Master, 2), GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.TungstenSteel, 4), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.TungstenSteel, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 2)}, Materials.TungstenSteel.getMolten(288), CustomItemList.Machine_BuckConverter_IV.get(1), 100, 7680); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_ZPM_LuV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Ultimate, 2), GT_OreDictUnificator.get(OrePrefixes.plateDouble, getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), 2), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.NiobiumTitanium, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 3)}, new FluidStack(FluidRegistry.getFluid("molten.rhodium-plated palladium"), 288), CustomItemList.Machine_BuckConverter_LuV.get(1), 100, 30720); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_UV_ZPM.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Superconductor, 2), GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Iridium, 4), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.TungstenSteel, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 4)}, Materials.Iridium.getMolten(288), CustomItemList.Machine_BuckConverter_ZPM.get(1), 100, 122880); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_MAX_UV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Infinite, 2), GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Osmium, 4), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.Naquadah, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 5)}, Materials.Osmium.getMolten(288), CustomItemList.Machine_BuckConverter_UV.get(1), 100, 500000); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.Transformer_UEV_UHV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Bio, 2), GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Neutronium, 4), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.ElectrumFlux, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 4L, 5)}, Materials.Neutronium.getMolten(288), CustomItemList.Machine_BuckConverter_UHV.get(1), 100, 2000000); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.Transformer_UIV_UEV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Nano, 2), GT_OreDictUnificator.get(OrePrefixes.plateDouble, getOrDefault("Bedrockium", Materials.Neutronium), 4), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.Bedrockium, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 8L, 5)}, getOrDefault("Bedrockium", Materials.Neutronium).getMolten(288), CustomItemList.Machine_BuckConverter_UEV.get(1), 100, 8000000); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.Transformer_UMV_UIV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Piko, 2), GT_OreDictUnificator.get(OrePrefixes.plateDouble, getOrDefault("BlackPlutonium", Materials.Neutronium), 4), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.Draconium, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 16L, 5)}, getOrDefault("BlackPlutonium", Materials.Neutronium).getMolten(288), CustomItemList.Machine_BuckConverter_UIV.get(1), 200, 8000000); } //Laser Dynamo IV-UEV 256/t GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Hull_IV.get(1), GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), ItemList.Emitter_IV.get(1), ItemList.Electric_Pump_IV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.TungstenSteel, 2), GT_Utility.getIntegratedCircuit(1)}, null, CustomItemList.eM_dynamoTunnel1_IV.get(1), 1000, 7680); -- cgit From 4de2332482ba078b1b987f098c3b92d7e4884c3c Mon Sep 17 00:00:00 2001 From: DreamMasterXXL Date: Mon, 1 Jun 2020 18:33:03 +0200 Subject: Buck Converter from TecTech #6179 https://github.com/GTNewHorizons/GT-New-Horizons-Modpack/issues/6179 make recipes a bit cheaper use lower circuits and normal plates 2x --- .../compatibility/dreamcraft/DreamCraftRecipeLoader.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java index de1c69f118..b45d1b7d10 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java +++ b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java @@ -288,13 +288,13 @@ public class DreamCraftRecipeLoader implements Runnable { //Buck Converter IV-UIV if(Loader.isModLoaded("bartworks")) { - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_LuV_IV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Master, 2), GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.TungstenSteel, 4), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.TungstenSteel, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 2)}, Materials.TungstenSteel.getMolten(288), CustomItemList.Machine_BuckConverter_IV.get(1), 100, 7680); - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_ZPM_LuV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Ultimate, 2), GT_OreDictUnificator.get(OrePrefixes.plateDouble, getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), 2), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.NiobiumTitanium, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 3)}, new FluidStack(FluidRegistry.getFluid("molten.rhodium-plated palladium"), 288), CustomItemList.Machine_BuckConverter_LuV.get(1), 100, 30720); - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_UV_ZPM.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Superconductor, 2), GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Iridium, 4), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.TungstenSteel, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 4)}, Materials.Iridium.getMolten(288), CustomItemList.Machine_BuckConverter_ZPM.get(1), 100, 122880); - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_MAX_UV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Infinite, 2), GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Osmium, 4), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.Naquadah, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 5)}, Materials.Osmium.getMolten(288), CustomItemList.Machine_BuckConverter_UV.get(1), 100, 500000); - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.Transformer_UEV_UHV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Bio, 2), GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Neutronium, 4), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.ElectrumFlux, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 4L, 5)}, Materials.Neutronium.getMolten(288), CustomItemList.Machine_BuckConverter_UHV.get(1), 100, 2000000); - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.Transformer_UIV_UEV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Nano, 2), GT_OreDictUnificator.get(OrePrefixes.plateDouble, getOrDefault("Bedrockium", Materials.Neutronium), 4), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.Bedrockium, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 8L, 5)}, getOrDefault("Bedrockium", Materials.Neutronium).getMolten(288), CustomItemList.Machine_BuckConverter_UEV.get(1), 100, 8000000); - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.Transformer_UMV_UIV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Piko, 2), GT_OreDictUnificator.get(OrePrefixes.plateDouble, getOrDefault("BlackPlutonium", Materials.Neutronium), 4), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.Draconium, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 16L, 5)}, getOrDefault("BlackPlutonium", Materials.Neutronium).getMolten(288), CustomItemList.Machine_BuckConverter_UIV.get(1), 200, 8000000); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_LuV_IV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Elite, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 2), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.TungstenSteel, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 2)}, Materials.TungstenSteel.getMolten(288), CustomItemList.Machine_BuckConverter_IV.get(1), 100, 7680); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_ZPM_LuV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Master, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), 2), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.NiobiumTitanium, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 3)}, new FluidStack(FluidRegistry.getFluid("molten.rhodium-plated palladium"), 288), CustomItemList.Machine_BuckConverter_LuV.get(1), 100, 30720); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_UV_ZPM.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Ultimate, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 2), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.TungstenSteel, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 4)}, Materials.Iridium.getMolten(288), CustomItemList.Machine_BuckConverter_ZPM.get(1), 100, 122880); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_MAX_UV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Superconductor, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 2), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.Naquadah, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 5)}, Materials.Osmium.getMolten(288), CustomItemList.Machine_BuckConverter_UV.get(1), 100, 500000); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.Transformer_UEV_UHV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Infinite, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 2), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.ElectrumFlux, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 4L, 5)}, Materials.Neutronium.getMolten(288), CustomItemList.Machine_BuckConverter_UHV.get(1), 100, 2000000); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.Transformer_UIV_UEV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Bio, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Bedrockium", Materials.Neutronium), 2), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.Bedrockium, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 8L, 5)}, getOrDefault("Bedrockium", Materials.Neutronium).getMolten(288), CustomItemList.Machine_BuckConverter_UEV.get(1), 100, 8000000); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.Transformer_UMV_UIV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Nano, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("BlackPlutonium", Materials.Neutronium), 2), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.Draconium, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 16L, 5)}, getOrDefault("BlackPlutonium", Materials.Neutronium).getMolten(288), CustomItemList.Machine_BuckConverter_UIV.get(1), 200, 8000000); } //Laser Dynamo IV-UEV 256/t GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Hull_IV.get(1), GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), ItemList.Emitter_IV.get(1), ItemList.Electric_Pump_IV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.TungstenSteel, 2), GT_Utility.getIntegratedCircuit(1)}, null, CustomItemList.eM_dynamoTunnel1_IV.get(1), 1000, 7680); -- cgit From 93907bac715fb04d206aaff9480974c709e8389c Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Mon, 1 Jun 2020 18:33:32 +0200 Subject: Buck Converter from TecTech #6179 (#29) * Buck Converter from TecTech #6179 https://github.com/GTNewHorizons/GT-New-Horizons-Modpack/issues/6179 * Buck Converter from TecTech #6179 https://github.com/GTNewHorizons/GT-New-Horizons-Modpack/issues/6179 add neutronium fluid if Bedrockium and Black Plutonium not available * bump version and gt dependencie for Jenkins * Buck Converter from TecTech #6179 https://github.com/GTNewHorizons/GT-New-Horizons-Modpack/issues/6179 fix Display naming * Buck Converter from TecTech #6179 https://github.com/GTNewHorizons/GT-New-Horizons-Modpack/issues/6179 change BAse block be a GT Transformator add Wires * Buck Converter from TecTech #6179 https://github.com/GTNewHorizons/GT-New-Horizons-Modpack/issues/6179 make recipes a bit cheaper use lower circuits and normal plates 2x --- build.properties | 6 +++--- .../dreamcraft/DreamCraftRecipeLoader.java | 24 +++++++++++++++------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/build.properties b/build.properties index 5eafc26e8e..3b282b43c2 100644 --- a/build.properties +++ b/build.properties @@ -1,13 +1,13 @@ minecraft.version=1.7.10 forge.version=10.13.4.1614 -tectech.version=3.8.2 +tectech.version=3.8.3 ic2.version=2.2.790-experimental codechickenlib.version=1.1.3.140 codechickencore.version=1.0.7.47 nei.version=1.0.5.120 -gregtech.jenkinsbuild=545 -gregtech.version=5.09.33.44 +gregtech.jenkinsbuild=620 +gregtech.version=5.09.33.50 cofhcore.version=[1.7.10]3.1.4-329-dev yamcore.version=0.5.79 baubles.version=1.0.1.10 diff --git a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java index b863e35901..b45d1b7d10 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java +++ b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java @@ -253,9 +253,9 @@ public class DreamCraftRecipeLoader implements Runnable { GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("Transformer_UIV_UEV").get(1), CustomItemList.eM_dynamoMulti4_UEV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Draconium, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Bedrockium", Materials.Neutronium), 4)}, Materials.Electrum.getMolten(4608), CustomItemList.eM_dynamoMulti16_UEV.get(1), 200, 2000000); GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("WetTransformer_UIV_UEV").get(1), CustomItemList.eM_dynamoMulti16_UEV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.Draconium, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Bedrockium", Materials.Neutronium), 6)}, Materials.Tungsten.getMolten(4608), CustomItemList.eM_dynamoMulti64_UEV.get(1), 400, 2000000); - //GT_Values.RA.ADD_ASSEMBLER_RECIPE(new ItemStack[]{com.dreammaster.gthandler.CustomItemList.Hatch_Dynamo_UIV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.NetherStar, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BlackPlutonium, 2)}, Materials.Silver.getMolten(8000), CustomItemList.eM_dynamoMulti4_UIV.get(1), 100, 8000000); - //GT_Values.RA.ADD_ASSEMBLER_RECIPE(new ItemStack[]{com.dreammaster.gthandler.CustomItemList.Transformer_UMV_UIV.get(1), CustomItemList.eM_dynamoMulti4_UIV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.NetherStar, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BlackPlutonium, 4)}, Materials.Electrum.getMolten(8000), CustomItemList.eM_dynamoMulti16_UIV.get(1), 200, 8000000); - //GT_Values.RA.ADD_ASSEMBLER_RECIPE(new ItemStack[]{com.dreammaster.gthandler.CustomItemList.WetTransformer_UMV_UIV.get(1), CustomItemList.eM_dynamoMulti16_UIV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.NetherStar, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BlackPlutonium, 6)}, Materials.Tungsten.getMolten(8000), CustomItemList.eM_dynamoMulti64_UIV.get(1), 400, 8000000); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("Hatch_Dynamo_UIV").get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.NetherStar, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("BlackPlutonium", Materials.Neutronium), 2)}, Materials.Silver.getMolten(8000), CustomItemList.eM_dynamoMulti4_UIV.get(1), 100, 8000000); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("Transformer_UMV_UIV").get(1), CustomItemList.eM_dynamoMulti4_UIV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.NetherStar, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("BlackPlutonium", Materials.Neutronium), 4)}, Materials.Electrum.getMolten(8000), CustomItemList.eM_dynamoMulti16_UIV.get(1), 200, 8000000); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("WetTransformer_UMV_UIV").get(1), CustomItemList.eM_dynamoMulti16_UIV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.NetherStar, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("BlackPlutonium", Materials.Neutronium), 6)}, Materials.Tungsten.getMolten(8000), CustomItemList.eM_dynamoMulti64_UIV.get(1), 400, 8000000); //Energy Hatches IV-UIV GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Hatch_Energy_IV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Tungsten, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 2)}, Materials.Silver.getMolten(144), CustomItemList.eM_energyMulti4_IV.get(1), 100, 1920); @@ -282,10 +282,20 @@ public class DreamCraftRecipeLoader implements Runnable { GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("Transformer_UIV_UEV").get(1), CustomItemList.eM_energyMulti4_UEV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Draconium, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Bedrockium", Materials.Neutronium), 4)}, Materials.Electrum.getMolten(4608), CustomItemList.eM_energyMulti16_UEV.get(1), 200, 2000000); GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("WetTransformer_UIV_UEV").get(1), CustomItemList.eM_energyMulti16_UEV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.Draconium, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Bedrockium", Materials.Neutronium), 6)}, Materials.Tungsten.getMolten(4608), CustomItemList.eM_energyMulti64_UEV.get(1), 400, 2000000); - //GT_Values.RA.ADD_ASSEMBLER_RECIPE(new ItemStack[]{com.dreammaster.gthandler.CustomItemList.Hatch_Energy_UIV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.NetherStar, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BlackPlutonium, 2)}, Materials.Silver.getMolten(8000), CustomItemList.eM_energyMulti4_UIV.get(1), 100, 8000000); - //GT_Values.RA.ADD_ASSEMBLER_RECIPE(new ItemStack[]{com.dreammaster.gthandler.CustomItemList.Transformer_UMV_UIV.get(1), CustomItemList.eM_energyMulti4_UIV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.NetherStar, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BlackPlutonium, 4)}, Materials.Electrum.getMolten(8000), CustomItemList.eM_energyMulti16_UIV.get(1), 200, 8000000); - //GT_Values.RA.ADD_ASSEMBLER_RECIPE(new ItemStack[]{com.dreammaster.gthandler.CustomItemList.WetTransformer_UMV_UIV.get(1), CustomItemList.eM_energyMulti16_UIV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.NetherStar, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BlackPlutonium, 6)}, Materials.Tungsten.getMolten(8000), CustomItemList.eM_energyMulti64_UIV.get(1), 400, 8000000); - + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("Hatch_Energy_UIV").get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.NetherStar, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("BlackPlutonium", Materials.Neutronium), 2)}, Materials.Silver.getMolten(8000), CustomItemList.eM_energyMulti4_UIV.get(1), 100, 8000000); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("Transformer_UMV_UIV").get(1), CustomItemList.eM_energyMulti4_UIV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.NetherStar, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("BlackPlutonium", Materials.Neutronium), 4)}, Materials.Electrum.getMolten(8000), CustomItemList.eM_energyMulti16_UIV.get(1), 200, 8000000); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("WetTransformer_UMV_UIV").get(1), CustomItemList.eM_energyMulti16_UIV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.NetherStar, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("BlackPlutonium", Materials.Neutronium), 6)}, Materials.Tungsten.getMolten(8000), CustomItemList.eM_energyMulti64_UIV.get(1), 400, 8000000); + + //Buck Converter IV-UIV + if(Loader.isModLoaded("bartworks")) { + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_LuV_IV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Elite, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 2), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.TungstenSteel, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 2)}, Materials.TungstenSteel.getMolten(288), CustomItemList.Machine_BuckConverter_IV.get(1), 100, 7680); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_ZPM_LuV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Master, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), 2), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.NiobiumTitanium, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 3)}, new FluidStack(FluidRegistry.getFluid("molten.rhodium-plated palladium"), 288), CustomItemList.Machine_BuckConverter_LuV.get(1), 100, 30720); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_UV_ZPM.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Ultimate, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 2), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.TungstenSteel, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 4)}, Materials.Iridium.getMolten(288), CustomItemList.Machine_BuckConverter_ZPM.get(1), 100, 122880); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_MAX_UV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Superconductor, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 2), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.Naquadah, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 5)}, Materials.Osmium.getMolten(288), CustomItemList.Machine_BuckConverter_UV.get(1), 100, 500000); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.Transformer_UEV_UHV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Infinite, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 2), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.ElectrumFlux, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 4L, 5)}, Materials.Neutronium.getMolten(288), CustomItemList.Machine_BuckConverter_UHV.get(1), 100, 2000000); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.Transformer_UIV_UEV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Bio, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Bedrockium", Materials.Neutronium), 2), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.Bedrockium, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 8L, 5)}, getOrDefault("Bedrockium", Materials.Neutronium).getMolten(288), CustomItemList.Machine_BuckConverter_UEV.get(1), 100, 8000000); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.Transformer_UMV_UIV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Nano, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("BlackPlutonium", Materials.Neutronium), 2), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.Draconium, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 16L, 5)}, getOrDefault("BlackPlutonium", Materials.Neutronium).getMolten(288), CustomItemList.Machine_BuckConverter_UIV.get(1), 200, 8000000); + } //Laser Dynamo IV-UEV 256/t GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Hull_IV.get(1), GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), ItemList.Emitter_IV.get(1), ItemList.Electric_Pump_IV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.TungstenSteel, 2), GT_Utility.getIntegratedCircuit(1)}, null, CustomItemList.eM_dynamoTunnel1_IV.get(1), 1000, 7680); GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Hull_LuV.get(1), GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), ItemList.Emitter_LuV.get(1), ItemList.Electric_Pump_LuV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.VanadiumGallium, 2), GT_Utility.getIntegratedCircuit(1)}, null, CustomItemList.eM_dynamoTunnel1_LuV.get(1), 1000, 30720); -- cgit From 1393d73fea85784d8abf9c81fa2234cf879309a9 Mon Sep 17 00:00:00 2001 From: DreamMasterXXL Date: Mon, 1 Jun 2020 18:57:15 +0200 Subject: Buck Converter from TecTech #6179 https://github.com/GTNewHorizons/GT-New-Horizons-Modpack/issues/6179 fix derp --- .../tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java index b45d1b7d10..bbbed0a70a 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java +++ b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java @@ -292,9 +292,9 @@ public class DreamCraftRecipeLoader implements Runnable { GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_ZPM_LuV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Master, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), 2), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.NiobiumTitanium, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 3)}, new FluidStack(FluidRegistry.getFluid("molten.rhodium-plated palladium"), 288), CustomItemList.Machine_BuckConverter_LuV.get(1), 100, 30720); GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_UV_ZPM.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Ultimate, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 2), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.TungstenSteel, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 4)}, Materials.Iridium.getMolten(288), CustomItemList.Machine_BuckConverter_ZPM.get(1), 100, 122880); GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Transformer_MAX_UV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Superconductor, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 2), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.Naquadah, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 2L, 5)}, Materials.Osmium.getMolten(288), CustomItemList.Machine_BuckConverter_UV.get(1), 100, 500000); - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.Transformer_UEV_UHV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Infinite, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 2), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.ElectrumFlux, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 4L, 5)}, Materials.Neutronium.getMolten(288), CustomItemList.Machine_BuckConverter_UHV.get(1), 100, 2000000); - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.Transformer_UIV_UEV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Bio, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Bedrockium", Materials.Neutronium), 2), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.Bedrockium, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 8L, 5)}, getOrDefault("Bedrockium", Materials.Neutronium).getMolten(288), CustomItemList.Machine_BuckConverter_UEV.get(1), 100, 8000000); - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{CustomItemList.Transformer_UMV_UIV.get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Nano, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("BlackPlutonium", Materials.Neutronium), 2), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.Draconium, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 16L, 5)}, getOrDefault("BlackPlutonium", Materials.Neutronium).getMolten(288), CustomItemList.Machine_BuckConverter_UIV.get(1), 200, 8000000); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("Transformer_UEV_UHV").get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Infinite, 2), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 2), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.ElectrumFlux, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 4L, 5)}, Materials.Neutronium.getMolten(288), CustomItemList.Machine_BuckConverter_UHV.get(1), 100, 2000000); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("Transformer_UIV_UEV").get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Bio, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Bedrockium", Materials.Neutronium), 2), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.Bedrockium, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 8L, 5)}, getOrDefault("Bedrockium", Materials.Neutronium).getMolten(288), CustomItemList.Machine_BuckConverter_UEV.get(1), 100, 8000000); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{getItemContainer("Transformer_UMV_UIV").get(1), getItemContainer("Display").get(1), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Nano, 2), GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("BlackPlutonium", Materials.Neutronium), 2), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.Draconium, 4), GT_ModHandler.getModItem("bartworks", "BW_GlasBlocks", 16L, 5)}, getOrDefault("BlackPlutonium", Materials.Neutronium).getMolten(288), CustomItemList.Machine_BuckConverter_UIV.get(1), 200, 8000000); } //Laser Dynamo IV-UEV 256/t GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Hull_IV.get(1), GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), ItemList.Emitter_IV.get(1), ItemList.Electric_Pump_IV.get(1), GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.TungstenSteel, 2), GT_Utility.getIntegratedCircuit(1)}, null, CustomItemList.eM_dynamoTunnel1_IV.get(1), 1000, 7680); -- cgit From b3fa98eebb71c25e3a59ed965ca217f40bd68470 Mon Sep 17 00:00:00 2001 From: Tec Date: Mon, 1 Jun 2020 19:12:09 +0200 Subject: Add recipes for some hatches --- .../dreamcraft/DreamCraftRecipeLoader.java | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java index b863e35901..fcf89dc1c6 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java +++ b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java @@ -446,6 +446,20 @@ public class DreamCraftRecipeLoader implements Runnable { ItemList.Cover_Screen.get(1), new ItemStack(Blocks.stone_button, 16), }, Materials.Iridium.getMolten(2592), CustomItemList.Parametrizer_Hatch.get(1), 800, 122880); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ + CustomItemList.eM_Computer_Casing.get(1), + ItemList.Circuit_Ultimatecrystalcomputer.get(1), + CustomItemList.DATApipe.get(6), + ItemList.Cover_Screen.get(1), + new ItemStack(Blocks.stone_button, 32), + }, Materials.Iridium.getMolten(2592), CustomItemList.ParametrizerX_Hatch.get(1), 800, 122880); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ + CustomItemList.eM_Computer_Casing.get(1), + ItemList.Circuit_Biomainframe.get(1), + CustomItemList.DATApipe.get(8), + ItemList.Cover_Screen.get(2), + new ItemStack(Blocks.stone_button, 64), + }, Materials.Iridium.getMolten(2592), CustomItemList.ParametrizerTXT_Hatch.get(1), 800, 122880); //Uncertainty addAssemblerRecipeWithCleanroom(new ItemStack[]{ CustomItemList.eM_Computer_Casing.get(1), @@ -454,6 +468,13 @@ public class DreamCraftRecipeLoader implements Runnable { ItemList.Cover_Screen.get(1), new ItemStack(Blocks.stone_button, 16), }, Materials.Iridium.getMolten(2592), CustomItemList.Uncertainty_Hatch.get(1), 1200, 122880); + addAssemblerRecipeWithCleanroom(new ItemStack[]{ + CustomItemList.eM_Computer_Casing.get(1), + ItemList.Circuit_Biomainframe.get(1), + CustomItemList.DATApipe.get(32), + ItemList.Cover_Screen.get(1), + new ItemStack(Blocks.stone_button, 16), + }, Materials.Iridium.getMolten(2592), CustomItemList.UncertaintyX_Hatch.get(1), 1200, 122880); //Elemental Input addAssemblerRecipeWithCleanroom(new ItemStack[]{ -- cgit From eb479dd05217d6313e3b8cc0b294e1b526663cc5 Mon Sep 17 00:00:00 2001 From: DreamMasterXXL Date: Thu, 11 Jun 2020 12:27:07 +0200 Subject: Uncertainty Resolver has no recipe #6217 https://github.com/GTNewHorizons/GT-New-Horizons-Modpack/issues/6217 add control circuits to the recipes --- .../tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java index 57eb0179ed..696dc2a1df 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java +++ b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java @@ -455,6 +455,7 @@ public class DreamCraftRecipeLoader implements Runnable { CustomItemList.DATApipe.get(4), ItemList.Cover_Screen.get(1), new ItemStack(Blocks.stone_button, 16), + GT_Utility.getIntegratedCircuit(1), }, Materials.Iridium.getMolten(2592), CustomItemList.Parametrizer_Hatch.get(1), 800, 122880); GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ CustomItemList.eM_Computer_Casing.get(1), @@ -462,13 +463,16 @@ public class DreamCraftRecipeLoader implements Runnable { CustomItemList.DATApipe.get(6), ItemList.Cover_Screen.get(1), new ItemStack(Blocks.stone_button, 32), + GT_Utility.getIntegratedCircuit(2), }, Materials.Iridium.getMolten(2592), CustomItemList.ParametrizerX_Hatch.get(1), 800, 122880); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ CustomItemList.eM_Computer_Casing.get(1), ItemList.Circuit_Biomainframe.get(1), CustomItemList.DATApipe.get(8), ItemList.Cover_Screen.get(2), new ItemStack(Blocks.stone_button, 64), + GT_Utility.getIntegratedCircuit(3), }, Materials.Iridium.getMolten(2592), CustomItemList.ParametrizerTXT_Hatch.get(1), 800, 122880); //Uncertainty addAssemblerRecipeWithCleanroom(new ItemStack[]{ @@ -477,13 +481,16 @@ public class DreamCraftRecipeLoader implements Runnable { CustomItemList.DATApipe.get(16), ItemList.Cover_Screen.get(1), new ItemStack(Blocks.stone_button, 16), + GT_Utility.getIntegratedCircuit(4), }, Materials.Iridium.getMolten(2592), CustomItemList.Uncertainty_Hatch.get(1), 1200, 122880); + addAssemblerRecipeWithCleanroom(new ItemStack[]{ CustomItemList.eM_Computer_Casing.get(1), ItemList.Circuit_Biomainframe.get(1), CustomItemList.DATApipe.get(32), ItemList.Cover_Screen.get(1), new ItemStack(Blocks.stone_button, 16), + GT_Utility.getIntegratedCircuit(5), }, Materials.Iridium.getMolten(2592), CustomItemList.UncertaintyX_Hatch.get(1), 1200, 122880); //Elemental Input -- cgit From 55d58b9812096f09a41a5298e74791d82509595b Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 14 Jun 2020 07:35:34 +0200 Subject: REsolve some bugs --- .../tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java | 4 +++- .../thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java | 2 +- .../multi/base/GT_MetaTileEntity_MultiblockBase_EM.java | 2 ++ .../thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_Data.java | 1 + 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java index 57eb0179ed..c26125fe69 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java +++ b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java @@ -30,9 +30,11 @@ import static com.github.technus.tectech.loader.recipe.RecipeLoader.getOrDefault */ public class DreamCraftRecipeLoader implements Runnable { //region reflect a bit + @SuppressWarnings("rawtypes") private Class CUSTOM_ITEM_LIST; private Method ADD_ASSEMBLER_RECIPE; + @SuppressWarnings("unchecked") private IItemContainer getItemContainer(String name) { return (IItemContainer) Enum.valueOf(CUSTOM_ITEM_LIST, name); } @@ -41,7 +43,7 @@ public class DreamCraftRecipeLoader implements Runnable { try { ADD_ASSEMBLER_RECIPE.invoke(GT_Values.RA, items, fluid, output, time, eut, true); } catch (Exception e) { - throw new Error(e); + throw new RuntimeException("Failed to add clean room assembler recipe! " +output.getDisplayName(),e); } } //endregion diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java index 213c919ec8..8838286071 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java @@ -239,7 +239,7 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB mEfficiencyIncrease = 10000; eRequiredData = (short) (ttRecipe.mSpecialValue >>> 16); eAmpereFlow = (short) (ttRecipe.mSpecialValue & 0xFFFF); - mEUt = ttRecipe.mEUt; + mEUt = Math.min(ttRecipe.mEUt,-ttRecipe.mEUt); eHolders.get(0).getBaseMetaTileEntity().setActive(true); return true; } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java index cf37fb0689..24fd51c7d4 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java @@ -87,6 +87,8 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt protected ArrayList eInputData = new ArrayList<>(); protected ArrayList eOutputData = new ArrayList<>(); + //endregion + //region parameters public final Parameters parametrization; //endregion diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_Data.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_Data.java index 7aabff1af4..ee6f469d59 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_Data.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_Data.java @@ -194,6 +194,7 @@ public class GT_MetaTileEntity_Pipe_Data extends MetaPipeEntity implements IConn if (meta instanceof IConnectsToDataPipe && meta != source) { if (meta instanceof GT_MetaTileEntity_Pipe_Data && ((GT_MetaTileEntity_Pipe_Data) meta).connectionCount == 2) { + ((GT_MetaTileEntity_Pipe_Data) meta).markUsed(); return (IConnectsToDataPipe) meta; } if (((IConnectsToDataPipe) meta).isDataInputFacing(GT_Utility.getOppositeSide(b))) { -- cgit From 2ad9e1927127ee115741ebed7c24de617e0df1b9 Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 14 Jun 2020 08:11:32 +0200 Subject: Add offline temp reading --- .../multi/GT_MetaTileEntity_EM_computer.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java index c845fe361e..5d88fdfc50 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java @@ -35,6 +35,7 @@ import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texture import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.*; +import static com.github.technus.tectech.util.CommonValues.MULTI_CHECK_AT; import static com.github.technus.tectech.util.CommonValues.V; import static net.minecraft.util.StatCollector.translateToLocal; @@ -160,6 +161,23 @@ public class GT_MetaTileEntity_EM_computer extends GT_MetaTileEntity_MultiblockB return eUncertainHatches.size() == 1; } + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if(aBaseMetaTileEntity.isServerSide() && mMachine && !aBaseMetaTileEntity.isActive() && aTick % 20 == MULTI_CHECK_AT){ + double maxTemp = 0; + for (GT_MetaTileEntity_Hatch_Rack rack : eRacks) { + if (!GT_MetaTileEntity_MultiBlockBase.isValidMetaTileEntity(rack)) { + continue; + } + if (rack.heat > maxTemp) { + maxTemp = rack.heat; + } + } + maxCurrentTemp.set(maxTemp); + } + } + @Override public boolean checkRecipe_EM(ItemStack itemStack) { parametrization.setToDefaults(false, true); -- cgit From 12d5080675762c4ce760f371673a2af37d6476ac Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 14 Jun 2020 08:25:51 +0200 Subject: Add missing machine type --- .../thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java index 8838286071..889b4cfec3 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java @@ -58,6 +58,7 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB private GT_Recipe.GT_Recipe_AssemblyLine tRecipe; private TT_recipe.TT_assLineRecipe aRecipe; private String machineType; + private static final String assembly="Assembly line"; private ItemStack holdItem; private long computationRemaining, computationRequired; @@ -282,6 +283,7 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB if (ItemList.Tool_DataStick.isStackEqual(itemStack, false, true)) { for (GT_Recipe.GT_Recipe_AssemblyLine assRecipe : TT_recipe.GT_Recipe_MapTT.sAssemblylineRecipes) { if (GT_Utility.areStacksEqual(assRecipe.mResearchItem, holdItem, true)) { + machineType = assembly; tRecipe = assRecipe; //if found if (iterateRecipes()) return true; @@ -469,6 +471,7 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB for (GT_Recipe.GT_Recipe_AssemblyLine tRecipe : TT_recipe.GT_Recipe_MapTT.sAssemblylineRecipes) { if (GT_Utility.areStacksEqual(tRecipe.mResearchItem, holdItem, true)) { this.tRecipe = tRecipe; + machineType = assembly; break; } } -- cgit From 028dd5ee21c8b1d4766ccc6f35dedcb81ca2408a Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 14 Jun 2020 09:12:55 +0200 Subject: Fix sound loops --- .../thing/metaTileEntity/multi/base/SoundLoop.java | 9 ++++----- .../resources/assets/tectech/sounds/fx_lo_freq.ogg | Bin 14802 -> 29373 bytes .../resources/assets/tectech/sounds/fx_mid_freq.ogg | Bin 15252 -> 26378 bytes 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/SoundLoop.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/SoundLoop.java index 338af1626e..e8e1a7eb27 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/SoundLoop.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/SoundLoop.java @@ -25,7 +25,7 @@ public class SoundLoop extends MovingSound{ zPosF=base.getZCoord(); worldID=base.getWorld().provider.dimensionId; repeat=true; - volume=0f; + volume= 0.0625f; } @Override @@ -34,14 +34,13 @@ public class SoundLoop extends MovingSound{ return; } if(fadeMe) { - volume-=0.05f; - if(volume<0){ + volume-=0.0625f; + if(volume<=0){ volume=0; - }else if(volume==0){ donePlaying=true; } }else if(volume<1) { - volume += 0.05f; + volume += 0.0625f; } World world=Minecraft.getMinecraft().thePlayer.worldObj; donePlaying=world.provider.dimensionId!=worldID || diff --git a/src/main/resources/assets/tectech/sounds/fx_lo_freq.ogg b/src/main/resources/assets/tectech/sounds/fx_lo_freq.ogg index 8eab2d92e2..f02581ae56 100644 Binary files a/src/main/resources/assets/tectech/sounds/fx_lo_freq.ogg and b/src/main/resources/assets/tectech/sounds/fx_lo_freq.ogg differ diff --git a/src/main/resources/assets/tectech/sounds/fx_mid_freq.ogg b/src/main/resources/assets/tectech/sounds/fx_mid_freq.ogg index b16d1297f4..10ac371e19 100644 Binary files a/src/main/resources/assets/tectech/sounds/fx_mid_freq.ogg and b/src/main/resources/assets/tectech/sounds/fx_mid_freq.ogg differ -- cgit From 2c0bbbb109aa0cc00193ad294e0aa794137bf9e1 Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 14 Jun 2020 09:31:50 +0200 Subject: Fix divide by zero lol --- .../metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java index 24fd51c7d4..28c90b58d0 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java @@ -1708,6 +1708,9 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt } private boolean drainEnergyInput_EM(long EUtTierVoltage, long EUtEffective, long Amperes) { + if(maxEUinputMin==0){ + return false; + } if (EUtTierVoltage < 0) { EUtTierVoltage = -EUtTierVoltage; } -- cgit From 1959a09715b671073379f63e34c2df391635278d Mon Sep 17 00:00:00 2001 From: bartimaeusnek <33183715+bartimaeusnek@users.noreply.github.com> Date: Tue, 23 Jun 2020 12:36:11 +0200 Subject: Added Support for MetaBlocks --- .../tectech/mechanics/structure/Structure.java | 20 +++++++------ .../mechanics/structure/StructureUtility.java | 33 ++++++++++++++-------- 2 files changed, 32 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java b/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java index e7769b3e04..7195563d19 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java @@ -103,32 +103,34 @@ public class Structure { } break; default://check for block (countable) + Block worldblock = world.getBlock(xyz[0], xyz[1], xyz[2]); + int dmg = worldblock.getDamageValue(world, xyz[0], xyz[1], xyz[2]); if ((pointer = block - '0') >= 0) { //countable air -> net.minecraft.block.BlockAir - if (world.getBlock(xyz[0], xyz[1], xyz[2]) != blockType[pointer]) { + if (worldblock != blockType[pointer]) { if (DEBUG_MODE) { - TecTech.LOGGER.info("Struct-block-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + world.getBlock(xyz[0], xyz[1], xyz[2]).getUnlocalizedName() + ' ' + blockType[pointer].getUnlocalizedName()); + TecTech.LOGGER.info("Struct-block-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + worldblock.getUnlocalizedName() + ' ' + blockType[pointer].getUnlocalizedName()); } return false; } - if (world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) != blockMeta[pointer]) { + if (dmg != blockMeta[pointer]) { if (DEBUG_MODE) { - TecTech.LOGGER.info("Struct-meta-id-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) + ' ' + blockMeta[pointer]); + TecTech.LOGGER.info("Struct-meta-id-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + dmg + ' ' + blockMeta[pointer]); } return false; } } else if ((pointer = block - ' ') >= 0) { igt = aBaseMetaTileEntity.getIGregTechTileEntity(xyz[0], xyz[1], xyz[2]); if (igt == null || !addingMethods[pointer].apply(metaTile,igt, casingTextures[pointer])) { - if (world.getBlock(xyz[0], xyz[1], xyz[2]) != blockTypeFallback[pointer]) { + if (worldblock != blockTypeFallback[pointer]) { if (DEBUG_MODE) { - TecTech.LOGGER.info("Fallback-struct-block-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + world.getBlock(xyz[0], xyz[1], xyz[2]).getUnlocalizedName() + ' ' + (blockTypeFallback[pointer] == null ? "null" : blockTypeFallback[pointer].getUnlocalizedName())); + TecTech.LOGGER.info("Fallback-struct-block-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + worldblock.getUnlocalizedName() + ' ' + (blockTypeFallback[pointer] == null ? "null" : blockTypeFallback[pointer].getUnlocalizedName())); } return false; } - if (world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) != blockMetaFallback[pointer]) { + if (dmg != blockMetaFallback[pointer]) { if (DEBUG_MODE) { - TecTech.LOGGER.info("Fallback-Struct-meta-id-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) + ' ' + blockMetaFallback[pointer]); + TecTech.LOGGER.info("Fallback-Struct-meta-id-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + dmg + ' ' + blockMetaFallback[pointer]); } return false; } @@ -212,7 +214,7 @@ public class Structure { break; default: //check for block if ((pointer = block - '0') >= 0) { - if (world.getBlock(xyz[0], xyz[1], xyz[2]) != blockType[pointer] || world.getBlockMetadata(xyz[0], xyz[1], xyz[2]) != blockMeta[pointer]) { + if (world.getBlock(xyz[0], xyz[1], xyz[2]) != blockType[pointer] || blockType[pointer].getDamageValue(world,xyz[0], xyz[1], xyz[2]) != blockMeta[pointer]) { TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], blockType[pointer], blockMeta[pointer]); } } else if ((pointer = block - ' ') >= 0) { diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java index 1c2fd18326..04e79ea33b 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java @@ -196,7 +196,8 @@ public class StructureUtility { return new IStructureElementNoPlacement() { @Override public boolean check(T t, World world, int x, int y, int z) { - return blocsMap.getOrDefault(world.getBlock(x, y, z), -1) == world.getBlockMetadata(x, y, z); + Block worldBlock = world.getBlock(x, y, z); + return blocsMap.getOrDefault(worldBlock, -1) == worldBlock.getDamageValue(world, x, y, z); } @Override @@ -222,7 +223,8 @@ public class StructureUtility { return new IStructureElementNoPlacement() { @Override public boolean check(T t, World world, int x, int y, int z) { - return blocsMap.getOrDefault(world.getBlock(x, y, z), Collections.emptySet()).contains(world.getBlockMetadata(x, y, z)); + Block worldBlock = world.getBlock(x, y, z); + return blocsMap.getOrDefault(worldBlock, Collections.emptySet()).contains(worldBlock.getDamageValue(world, x, y, z)); } @Override @@ -240,7 +242,8 @@ public class StructureUtility { return new IStructureElementNoPlacement() { @Override public boolean check(T t, World world, int x, int y, int z) { - return block == world.getBlock(x, y, z) && meta == world.getBlockMetadata(x, y, z); + Block worldBlock = world.getBlock(x, y, z); + return block == worldBlock && meta == worldBlock.getDamageValue(world, x, y, z); } @Override @@ -262,7 +265,8 @@ public class StructureUtility { return new IStructureElementNoPlacement() { @Override public boolean check(T t, World world, int x, int y, int z) { - return iBlockAdder.apply(t, world.getBlock(x, y, z), world.getBlockMetadata(x, y, z)); + Block worldBlock = world.getBlock(x, y, z); + return iBlockAdder.apply(t, worldBlock, worldBlock.getDamageValue(world,x,y,z)); } @Override @@ -283,7 +287,8 @@ public class StructureUtility { return new IStructureElement() { @Override public boolean check(T t, World world, int x, int y, int z) { - return blocsMap.getOrDefault(world.getBlock(x, y, z), -1) == world.getBlockMetadata(x, y, z); + Block worldBlock = world.getBlock(x, y, z); + return blocsMap.getOrDefault(worldBlock, -1) == worldBlock.getDamageValue(world,x,y,z); } @Override @@ -315,7 +320,8 @@ public class StructureUtility { return new IStructureElement() { @Override public boolean check(T t, World world, int x, int y, int z) { - return blocsMap.getOrDefault(world.getBlock(x, y, z), Collections.emptySet()).contains(world.getBlockMetadata(x, y, z)); + Block worldBlock = world.getBlock(x, y, z); + return blocsMap.getOrDefault(worldBlock, Collections.emptySet()).contains(worldBlock.getDamageValue(world, x, y, z)); } @Override @@ -339,7 +345,8 @@ public class StructureUtility { return new IStructureElement() { @Override public boolean check(T t, World world, int x, int y, int z) { - return block == world.getBlock(x, y, z) && meta == world.getBlockMetadata(x, y, z); + Block worldBlock = world.getBlock(x, y, z); + return block == worldBlock && meta == worldBlock.getDamageValue(world, x, y, z); } @Override @@ -371,7 +378,8 @@ public class StructureUtility { return new IStructureElement() { @Override public boolean check(T t, World world, int x, int y, int z) { - return iBlockAdder.apply(t, world.getBlock(x, y, z), world.getBlockMetadata(x, y, z)); + Block worldBlock = world.getBlock(x, y, z); + return iBlockAdder.apply(t, worldBlock, worldBlock.getDamageValue(world, x, y, z)); } @Override @@ -446,9 +454,10 @@ public class StructureUtility { @Override public boolean check(T t, World world, int x, int y, int z) { TileEntity tileEntity = world.getTileEntity(x, y, z); + Block worldBlock = world.getBlock(x, y, z); return (tileEntity instanceof IGregTechTileEntity && iHatchAdder.apply(t, (IGregTechTileEntity) tileEntity, (short) textureIndex)) || - (world.getBlock(x, y, z) == placeCasing && world.getBlockMetadata(x, y, z) == placeCasingMeta); + (worldBlock == placeCasing && worldBlock.getDamageValue(world, x, y, z) == placeCasingMeta); } @Override @@ -989,7 +998,7 @@ public class StructureUtility { if (set == null) { set = new TreeSet<>(); } - set.add(world.getBlockMetadata(x, y, z)); + set.add(block.getDamageValue(world, x, y, z)); return set; }); } @@ -1060,7 +1069,7 @@ public class StructureUtility { if (tileEntity == null) { Block block = w.getBlock(x, y, z); if (block != null && block != Blocks.air) { - builder.append(map.get(block.getUnlocalizedName() + '\0' + world.getBlockMetadata(x, y, z))); + builder.append(map.get(block.getUnlocalizedName() + '\0' + block.getDamageValue(world, x, y, z))); } else { builder.append(' '); } @@ -1095,7 +1104,7 @@ public class StructureUtility { if (tileEntity == null) { Block block = w.getBlock(x, y, z); if (block != null && block != Blocks.air) { - builder.append(map.get(block.getUnlocalizedName() + '\0' + world.getBlockMetadata(x, y, z))); + builder.append(map.get(block.getUnlocalizedName() + '\0' + block.getDamageValue(world,x, y, z))); } else { builder.append(' '); } -- cgit From 0afcd6ff4c62200307c409dd62b768c3015ead1d Mon Sep 17 00:00:00 2001 From: bartimaeusnek <33183715+bartimaeusnek@users.noreply.github.com> Date: Tue, 23 Jun 2020 17:08:28 +0200 Subject: Added Build Support for MetaBlocks --- .../mechanics/structure/ICustomMetaBlock.java | 10 +++++++++ .../tectech/mechanics/structure/Structure.java | 5 ++++- .../mechanics/structure/StructureUtility.java | 25 +++++++++++++++++----- 3 files changed, 34 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/ICustomMetaBlock.java diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/ICustomMetaBlock.java b/src/main/java/com/github/technus/tectech/mechanics/structure/ICustomMetaBlock.java new file mode 100644 index 0000000000..2c783ef268 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/ICustomMetaBlock.java @@ -0,0 +1,10 @@ +package com.github.technus.tectech.mechanics.structure; + +import net.minecraft.block.Block; +import net.minecraft.world.World; + +public interface ICustomMetaBlock { + default void setBlock(World world, int x, int y, int z, int meta){ + world.setBlock(x, y, z, (Block)this, meta, 2); + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java b/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java index 7195563d19..9e680b877e 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java @@ -237,7 +237,10 @@ public class Structure { break; default: //check for block if ((pointer = block - '0') >= 0) { - world.setBlock(xyz[0], xyz[1], xyz[2], blockType[pointer], blockMeta[pointer], 2); + if (blockType[pointer] instanceof ICustomMetaBlock) + ((ICustomMetaBlock)blockType[pointer]).setBlock(world,xyz[0], xyz[1], xyz[2], blockMeta[pointer]); + else + world.setBlock(xyz[0], xyz[1], xyz[2], blockType[pointer], blockMeta[pointer], 2); } } } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java index 04e79ea33b..10779659dc 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java @@ -293,7 +293,10 @@ public class StructureUtility { @Override public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - world.setBlock(x, y, z, defaultBlock, defaultMeta, 2); + if (defaultBlock instanceof ICustomMetaBlock) + ((ICustomMetaBlock)defaultBlock).setBlock(world, x, y, z, defaultMeta); + else + world.setBlock(x, y, z, defaultBlock, defaultMeta, 2); return true; } @@ -326,7 +329,10 @@ public class StructureUtility { @Override public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - world.setBlock(x, y, z, defaultBlock, defaultMeta, 2); + if (defaultBlock instanceof ICustomMetaBlock) + ((ICustomMetaBlock)defaultBlock).setBlock(world, x, y, z, defaultMeta); + else + world.setBlock(x, y, z, defaultBlock, defaultMeta, 2); return true; } @@ -351,7 +357,10 @@ public class StructureUtility { @Override public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - world.setBlock(x, y, z, defaultBlock, defaultMeta, 2); + if (defaultBlock instanceof ICustomMetaBlock) + ((ICustomMetaBlock)defaultBlock).setBlock(world, x, y, z, defaultMeta); + else + world.setBlock(x, y, z, defaultBlock, defaultMeta, 2); return true; } @@ -384,7 +393,10 @@ public class StructureUtility { @Override public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - world.setBlock(x, y, z, defaultBlock, defaultMeta, 2); + if (defaultBlock instanceof ICustomMetaBlock) + ((ICustomMetaBlock)defaultBlock).setBlock(world, x, y, z, defaultMeta); + else + world.setBlock(x, y, z, defaultBlock, defaultMeta, 2); return true; } @@ -468,7 +480,10 @@ public class StructureUtility { @Override public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - world.setBlock(x, y, z, placeCasing, placeCasingMeta, 2); + if (placeCasing instanceof ICustomMetaBlock) + ((ICustomMetaBlock)placeCasing).setBlock(world, x, y, z, placeCasingMeta); + else + world.setBlock(x, y, z, placeCasing, placeCasingMeta, 2); return true; } }; -- cgit From 3707610dd388d8cdcb9f3a1f30de6249c65ad782 Mon Sep 17 00:00:00 2001 From: Tec Date: Tue, 23 Jun 2020 21:07:50 +0200 Subject: Cleanup code style, rename interface, unimplement default method to force user to implement it. rework to eager evaluation of instanceof check --- .../mechanics/structure/ICustomBlockSetting.java | 17 ++ .../mechanics/structure/ICustomMetaBlock.java | 10 - .../tectech/mechanics/structure/Structure.java | 24 +- .../mechanics/structure/StructureUtility.java | 311 ++++++++++++++------- 4 files changed, 236 insertions(+), 126 deletions(-) create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/ICustomBlockSetting.java delete mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/ICustomMetaBlock.java diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/ICustomBlockSetting.java b/src/main/java/com/github/technus/tectech/mechanics/structure/ICustomBlockSetting.java new file mode 100644 index 0000000000..b70e76fbac --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/ICustomBlockSetting.java @@ -0,0 +1,17 @@ +package com.github.technus.tectech.mechanics.structure; + +import net.minecraft.block.Block; +import net.minecraft.world.World; + +public interface ICustomBlockSetting { + /** + * Default block setting calls {@link World#setBlock(int x, int y, int z, Block block, int meta, int updateType)} like: + * {@code world.setBlock(x,y,z,this/block,meta,2)} where updateType 2 means to update lighting and stuff + * @param world world that should be affected + * @param x x position to set + * @param y y position to set + * @param z z position to set + * @param meta required meta + */ + void setBlock(World world, int x, int y, int z, int meta); +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/ICustomMetaBlock.java b/src/main/java/com/github/technus/tectech/mechanics/structure/ICustomMetaBlock.java deleted file mode 100644 index 2c783ef268..0000000000 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/ICustomMetaBlock.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.github.technus.tectech.mechanics.structure; - -import net.minecraft.block.Block; -import net.minecraft.world.World; - -public interface ICustomMetaBlock { - default void setBlock(World world, int x, int y, int z, int meta){ - world.setBlock(x, y, z, (Block)this, meta, 2); - } -} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java b/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java index 9e680b877e..4282a9e13c 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java @@ -16,10 +16,11 @@ import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; @Deprecated public class Structure { - private Structure(){} + private Structure() { + } @SafeVarargs - public static IHatchAdder[] adders(IHatchAdder... iHatchAdder){ + public static IHatchAdder[] adders(IHatchAdder... iHatchAdder) { return iHatchAdder; } @@ -121,7 +122,7 @@ public class Structure { } } else if ((pointer = block - ' ') >= 0) { igt = aBaseMetaTileEntity.getIGregTechTileEntity(xyz[0], xyz[1], xyz[2]); - if (igt == null || !addingMethods[pointer].apply(metaTile,igt, casingTextures[pointer])) { + if (igt == null || !addingMethods[pointer].apply(metaTile, igt, casingTextures[pointer])) { if (worldblock != blockTypeFallback[pointer]) { if (DEBUG_MODE) { TecTech.LOGGER.info("Fallback-struct-block-error " + xyz[0] + ' ' + xyz[1] + ' ' + xyz[2] + " / " + abc[0] + ' ' + abc[1] + ' ' + abc[2] + " / " + worldblock.getUnlocalizedName() + ' ' + (blockTypeFallback[pointer] == null ? "null" : blockTypeFallback[pointer].getUnlocalizedName())); @@ -155,10 +156,10 @@ public class Structure { byte[] blockMeta,//use numbers 0-9 for casing types int horizontalOffset, int verticalOffset, int depthOffset, IGregTechTileEntity tileEntity, ExtendedFacing extendedFacing, boolean hintsOnly) { - World world=tileEntity.getWorld(); - int baseX=tileEntity.getXCoord(); - int baseY=tileEntity.getYCoord(); - int baseZ=tileEntity.getZCoord(); + World world = tileEntity.getWorld(); + int baseX = tileEntity.getXCoord(); + int baseY = tileEntity.getYCoord(); + int baseZ = tileEntity.getZCoord(); if (world == null || (!world.isRemote && hintsOnly)) { return false; } @@ -214,7 +215,7 @@ public class Structure { break; default: //check for block if ((pointer = block - '0') >= 0) { - if (world.getBlock(xyz[0], xyz[1], xyz[2]) != blockType[pointer] || blockType[pointer].getDamageValue(world,xyz[0], xyz[1], xyz[2]) != blockMeta[pointer]) { + if (world.getBlock(xyz[0], xyz[1], xyz[2]) != blockType[pointer] || blockType[pointer].getDamageValue(world, xyz[0], xyz[1], xyz[2]) != blockMeta[pointer]) { TecTech.proxy.hint_particle(world, xyz[0], xyz[1], xyz[2], blockType[pointer], blockMeta[pointer]); } } else if ((pointer = block - ' ') >= 0) { @@ -237,10 +238,11 @@ public class Structure { break; default: //check for block if ((pointer = block - '0') >= 0) { - if (blockType[pointer] instanceof ICustomMetaBlock) - ((ICustomMetaBlock)blockType[pointer]).setBlock(world,xyz[0], xyz[1], xyz[2], blockMeta[pointer]); - else + if (blockType[pointer] instanceof ICustomBlockSetting) { + ((ICustomBlockSetting) blockType[pointer]).setBlock(world, xyz[0], xyz[1], xyz[2], blockMeta[pointer]); + } else { world.setBlock(xyz[0], xyz[1], xyz[2], blockType[pointer], blockMeta[pointer], 2); + } } } } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java index 10779659dc..a9b88af2f3 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java @@ -167,7 +167,7 @@ public class StructureUtility { * @param * @return */ - public static IStructureElementNoPlacement ofHintDeferred(Supplier icons,short[] RGBa) { + public static IStructureElementNoPlacement ofHintDeferred(Supplier icons, short[] RGBa) { return new IStructureElementNoPlacement() { @Override public boolean check(T t, World world, int x, int y, int z) { @@ -176,7 +176,7 @@ public class StructureUtility { @Override public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle_tinted(world, x, y, z, icons.get(),RGBa); + TecTech.proxy.hint_particle_tinted(world, x, y, z, icons.get(), RGBa); return false; } }; @@ -266,7 +266,7 @@ public class StructureUtility { @Override public boolean check(T t, World world, int x, int y, int z) { Block worldBlock = world.getBlock(x, y, z); - return iBlockAdder.apply(t, worldBlock, worldBlock.getDamageValue(world,x,y,z)); + return iBlockAdder.apply(t, worldBlock, worldBlock.getDamageValue(world, x, y, z)); } @Override @@ -284,28 +284,47 @@ public class StructureUtility { if (blocsMap == null || blocsMap.isEmpty() || defaultBlock == null) { throw new IllegalArgumentException(); } - return new IStructureElement() { - @Override - public boolean check(T t, World world, int x, int y, int z) { - Block worldBlock = world.getBlock(x, y, z); - return blocsMap.getOrDefault(worldBlock, -1) == worldBlock.getDamageValue(world,x,y,z); - } + if(defaultBlock instanceof ICustomBlockSetting){ + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + Block worldBlock = world.getBlock(x, y, z); + return blocsMap.getOrDefault(worldBlock, -1) == worldBlock.getDamageValue(world, x, y, z); + } - @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - if (defaultBlock instanceof ICustomMetaBlock) - ((ICustomMetaBlock)defaultBlock).setBlock(world, x, y, z, defaultMeta); - else + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + ((ICustomBlockSetting) defaultBlock).setBlock(world, x, y, z, defaultMeta); + return true; + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); + return true; + } + }; + }else { + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + Block worldBlock = world.getBlock(x, y, z); + return blocsMap.getOrDefault(worldBlock, -1) == worldBlock.getDamageValue(world, x, y, z); + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { world.setBlock(x, y, z, defaultBlock, defaultMeta, 2); - return true; - } + return true; + } - @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); - return true; - } - }; + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); + return true; + } + }; + } } /** @@ -320,56 +339,94 @@ public class StructureUtility { throw new IllegalArgumentException(); } } - return new IStructureElement() { - @Override - public boolean check(T t, World world, int x, int y, int z) { - Block worldBlock = world.getBlock(x, y, z); - return blocsMap.getOrDefault(worldBlock, Collections.emptySet()).contains(worldBlock.getDamageValue(world, x, y, z)); - } + if(defaultBlock instanceof ICustomBlockSetting){ + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + Block worldBlock = world.getBlock(x, y, z); + return blocsMap.getOrDefault(worldBlock, Collections.emptySet()).contains(worldBlock.getDamageValue(world, x, y, z)); + } - @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - if (defaultBlock instanceof ICustomMetaBlock) - ((ICustomMetaBlock)defaultBlock).setBlock(world, x, y, z, defaultMeta); - else + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + ((ICustomBlockSetting) defaultBlock).setBlock(world, x, y, z, defaultMeta); + return true; + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); + return true; + } + }; + }else { + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + Block worldBlock = world.getBlock(x, y, z); + return blocsMap.getOrDefault(worldBlock, Collections.emptySet()).contains(worldBlock.getDamageValue(world, x, y, z)); + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { world.setBlock(x, y, z, defaultBlock, defaultMeta, 2); - return true; - } + return true; + } - @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); - return true; - } - }; + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); + return true; + } + }; + } } public static IStructureElement ofBlock(Block block, int meta, Block defaultBlock, int defaultMeta) { if (block == null || defaultBlock == null) { throw new IllegalArgumentException(); } - return new IStructureElement() { - @Override - public boolean check(T t, World world, int x, int y, int z) { - Block worldBlock = world.getBlock(x, y, z); - return block == worldBlock && meta == worldBlock.getDamageValue(world, x, y, z); - } + if(block instanceof ICustomBlockSetting){ + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + Block worldBlock = world.getBlock(x, y, z); + return block == worldBlock && meta == worldBlock.getDamageValue(world, x, y, z); + } - @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - if (defaultBlock instanceof ICustomMetaBlock) - ((ICustomMetaBlock)defaultBlock).setBlock(world, x, y, z, defaultMeta); - else + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + ((ICustomBlockSetting) defaultBlock).setBlock(world, x, y, z, defaultMeta); + return true; + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); + return true; + } + }; + } else { + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + Block worldBlock = world.getBlock(x, y, z); + return block == worldBlock && meta == worldBlock.getDamageValue(world, x, y, z); + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { world.setBlock(x, y, z, defaultBlock, defaultMeta, 2); - return true; - } + return true; + } - @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); - return true; - } - }; + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); + return true; + } + }; + } } public static IStructureElement ofBlock(Block block, int meta) { @@ -384,28 +441,47 @@ public class StructureUtility { if (iBlockAdder == null || defaultBlock == null) { throw new IllegalArgumentException(); } - return new IStructureElement() { - @Override - public boolean check(T t, World world, int x, int y, int z) { - Block worldBlock = world.getBlock(x, y, z); - return iBlockAdder.apply(t, worldBlock, worldBlock.getDamageValue(world, x, y, z)); - } + if(defaultBlock instanceof ICustomBlockSetting){ + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + Block worldBlock = world.getBlock(x, y, z); + return iBlockAdder.apply(t, worldBlock, worldBlock.getDamageValue(world, x, y, z)); + } - @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - if (defaultBlock instanceof ICustomMetaBlock) - ((ICustomMetaBlock)defaultBlock).setBlock(world, x, y, z, defaultMeta); - else + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + ((ICustomBlockSetting) defaultBlock).setBlock(world, x, y, z, defaultMeta); + return true; + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); + return true; + } + }; + }else { + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + Block worldBlock = world.getBlock(x, y, z); + return iBlockAdder.apply(t, worldBlock, worldBlock.getDamageValue(world, x, y, z)); + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { world.setBlock(x, y, z, defaultBlock, defaultMeta, 2); - return true; - } + return true; + } - @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); - return true; - } - }; + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); + return true; + } + }; + } } public static IStructureElement ofBlockAdder(IBlockAdder iBlockAdder, int dots) { @@ -462,31 +538,53 @@ public class StructureUtility { if (iHatchAdder == null || hintBlock == null) { throw new IllegalArgumentException(); } - return new IStructureElement() { - @Override - public boolean check(T t, World world, int x, int y, int z) { - TileEntity tileEntity = world.getTileEntity(x, y, z); - Block worldBlock = world.getBlock(x, y, z); - return (tileEntity instanceof IGregTechTileEntity && - iHatchAdder.apply(t, (IGregTechTileEntity) tileEntity, (short) textureIndex)) || - (worldBlock == placeCasing && worldBlock.getDamageValue(world, x, y, z) == placeCasingMeta); - } + if(placeCasing instanceof ICustomBlockSetting){ + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + TileEntity tileEntity = world.getTileEntity(x, y, z); + Block worldBlock = world.getBlock(x, y, z); + return (tileEntity instanceof IGregTechTileEntity && + iHatchAdder.apply(t, (IGregTechTileEntity) tileEntity, (short) textureIndex)) || + (worldBlock == placeCasing && worldBlock.getDamageValue(world, x, y, z) == placeCasingMeta); + } - @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - TecTech.proxy.hint_particle(world, x, y, z, hintBlock, hintMeta); - return true; - } + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + TecTech.proxy.hint_particle(world, x, y, z, hintBlock, hintMeta); + return true; + } - @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - if (placeCasing instanceof ICustomMetaBlock) - ((ICustomMetaBlock)placeCasing).setBlock(world, x, y, z, placeCasingMeta); - else + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + ((ICustomBlockSetting) placeCasing).setBlock(world, x, y, z, placeCasingMeta); + return true; + } + }; + }else { + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + TileEntity tileEntity = world.getTileEntity(x, y, z); + Block worldBlock = world.getBlock(x, y, z); + return (tileEntity instanceof IGregTechTileEntity && + iHatchAdder.apply(t, (IGregTechTileEntity) tileEntity, (short) textureIndex)) || + (worldBlock == placeCasing && worldBlock.getDamageValue(world, x, y, z) == placeCasingMeta); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + TecTech.proxy.hint_particle(world, x, y, z, hintBlock, hintMeta); + return true; + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { world.setBlock(x, y, z, placeCasing, placeCasingMeta, 2); - return true; - } - }; + return true; + } + }; + } } //endregion @@ -885,6 +983,7 @@ public class StructureUtility { /** * Used internally, to generate skips for structure definitions + * * @param a * @param b * @param c @@ -897,6 +996,7 @@ public class StructureUtility { /** * Used internally, to generate skips for structure definitions + * * @param step * @param * @return @@ -1119,7 +1219,7 @@ public class StructureUtility { if (tileEntity == null) { Block block = w.getBlock(x, y, z); if (block != null && block != Blocks.air) { - builder.append(map.get(block.getUnlocalizedName() + '\0' + block.getDamageValue(world,x, y, z))); + builder.append(map.get(block.getUnlocalizedName() + '\0' + block.getDamageValue(world, x, y, z))); } else { builder.append(' '); } @@ -1211,14 +1311,15 @@ public class StructureUtility { /** * Transposes shape (swaps B and C axis, can be used to un-transpose transposed shape) * WARNING! Do not use on old api... + * * @param structurePiece shape (transposed shape) * @return transposed shape (untransposed shape) */ - public static String[][] transpose(String[][] structurePiece){ - String[][] shape=new String[structurePiece[0].length][structurePiece.length]; + public static String[][] transpose(String[][] structurePiece) { + String[][] shape = new String[structurePiece[0].length][structurePiece.length]; for (int i = 0; i < structurePiece.length; i++) { for (int j = 0; j < structurePiece[i].length; j++) { - shape[j][i]=structurePiece[i][j]; + shape[j][i] = structurePiece[i][j]; } } return shape; -- cgit From 7e55f6a68a7b7b307034c994f2fac95a83f3753b Mon Sep 17 00:00:00 2001 From: Tec Date: Tue, 23 Jun 2020 21:09:39 +0200 Subject: Fully mark old api for deprecation --- .../java/com/github/technus/tectech/mechanics/structure/Structure.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java b/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java index 4282a9e13c..83951372a2 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/Structure.java @@ -19,6 +19,7 @@ public class Structure { private Structure() { } + @Deprecated @SafeVarargs public static IHatchAdder[] adders(IHatchAdder... iHatchAdder) { return iHatchAdder; @@ -26,6 +27,7 @@ public class Structure { //Check Machine Structure based on string[][] (effectively char[][][]), ond offset of the controller //This only checks for REGULAR BLOCKS! + @Deprecated public static boolean checker( String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR-1 blocks Block[] blockType,//use numbers 0-9 for casing types @@ -151,6 +153,7 @@ public class Structure { return true; } + @Deprecated public static boolean builder(String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR+1 blocks Block[] blockType,//use numbers 0-9 for casing types byte[] blockMeta,//use numbers 0-9 for casing types -- cgit From 8e3024edfde8317f4f0073842563c45a3cb41ab6 Mon Sep 17 00:00:00 2001 From: basdxz Date: Mon, 6 Jul 2020 17:23:30 +0100 Subject: Add Plasma Boosting to Tesla Towers --- .../technus/tectech/loader/TecTechConfig.java | 22 +++-- .../multi/GT_MetaTileEntity_TM_teslaCoil.java | 100 +++++++++++++++++---- 2 files changed, 99 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/loader/TecTechConfig.java b/src/main/java/com/github/technus/tectech/loader/TecTechConfig.java index 0c2920e585..2cc52e8513 100644 --- a/src/main/java/com/github/technus/tectech/loader/TecTechConfig.java +++ b/src/main/java/com/github/technus/tectech/loader/TecTechConfig.java @@ -24,12 +24,12 @@ public class TecTechConfig extends ConfigManager { public float TESLA_MULTI_MIN_EFFICIENCY; public float TESLA_MULTI_MAX_EFFICIENCY; public float TESLA_MULTI_OVERDRIVE_LOSS; + public int TESLA_MULTI_SCAN_RANGE; + public boolean TESLA_MULTI_MOLTEN_OUTPUT; public float TESLA_SINGLE_MIN_EFFICIENCY; public float TESLA_SINGLE_MAX_EFFICIENCY; public float TESLA_SINGLE_OVERDRIVE_LOSS; - - /** * This loading phases do not correspond to mod loading phases! */ @@ -47,6 +47,8 @@ public class TecTechConfig extends ConfigManager { TESLA_MULTI_MIN_EFFICIENCY = 0.955F; TESLA_MULTI_MAX_EFFICIENCY = 0.98F; TESLA_MULTI_OVERDRIVE_LOSS = 0.005F; + TESLA_MULTI_SCAN_RANGE = 40; + TESLA_MULTI_MOLTEN_OUTPUT = false; TESLA_SINGLE_MIN_EFFICIENCY = 0.91F; TESLA_SINGLE_MAX_EFFICIENCY = 0.95F; TESLA_SINGLE_OVERDRIVE_LOSS = 0.010F; @@ -78,17 +80,21 @@ public class TecTechConfig extends ConfigManager { "Set to true to disable the block hardness nerf"); DISABLE_MATERIAL_LOADING_FFS = _mainConfig.getBoolean("DisableMaterialLoading", "Debug", DISABLE_MATERIAL_LOADING_FFS, "Set to true to disable gregtech material processing"); - TESLA_MULTI_MIN_EFFICIENCY = _mainConfig.getFloat("teslaMultiMinEfficency", "Features", TESLA_MULTI_MIN_EFFICIENCY, 0, 1, + TESLA_MULTI_MIN_EFFICIENCY = _mainConfig.getFloat("TeslaMultiMinEfficency", "Features", TESLA_MULTI_MIN_EFFICIENCY, 0, 1, "Worst possible power loss per block for the multi block tesla"); - TESLA_MULTI_MAX_EFFICIENCY = _mainConfig.getFloat("teslaMultiMaxEfficency", "Features", TESLA_MULTI_MAX_EFFICIENCY, 0, 1, + TESLA_MULTI_MAX_EFFICIENCY = _mainConfig.getFloat("TeslaMultiMaxEfficency", "Features", TESLA_MULTI_MAX_EFFICIENCY, 0, 1, "Best possible power loss per block for the multi block tesla"); - TESLA_MULTI_OVERDRIVE_LOSS = _mainConfig.getFloat("teslaMultiOverdriveLoss", "Features", TESLA_MULTI_OVERDRIVE_LOSS, 0, 1, + TESLA_MULTI_OVERDRIVE_LOSS = _mainConfig.getFloat("TeslaMultiOverdriveLoss", "Features", TESLA_MULTI_OVERDRIVE_LOSS, 0, 1, "Additional losses for overdrive use on the multi block tesla"); - TESLA_SINGLE_MIN_EFFICIENCY = _mainConfig.getFloat("teslaSingleMinEfficency", "Features", TESLA_SINGLE_MIN_EFFICIENCY, 0, 1, + TESLA_MULTI_SCAN_RANGE = _mainConfig.getInt("TeslaMultiScanRange", "Features", TESLA_MULTI_SCAN_RANGE, 4, 256, + "Determines the scan range constant for multi block tesla"); + TESLA_MULTI_MOLTEN_OUTPUT = _mainConfig.getBoolean("TeslaMultiMoltenOutput", "Features", TESLA_MULTI_MOLTEN_OUTPUT, + "Set to true to get molten outputs when boosting the multi block tesla with plasmas"); + TESLA_SINGLE_MIN_EFFICIENCY = _mainConfig.getFloat("TeslaSingleMinEfficency", "Features", TESLA_SINGLE_MIN_EFFICIENCY, 0, 1, "Worst possible power loss per block for the single block tesla"); - TESLA_SINGLE_MAX_EFFICIENCY = _mainConfig.getFloat("teslaSingleMaxEfficency", "Features", TESLA_SINGLE_MAX_EFFICIENCY, 0, 1, + TESLA_SINGLE_MAX_EFFICIENCY = _mainConfig.getFloat("TeslaSingleMaxEfficency", "Features", TESLA_SINGLE_MAX_EFFICIENCY, 0, 1, "Best possible power loss per block for the single block tesla"); - TESLA_SINGLE_OVERDRIVE_LOSS = _mainConfig.getFloat("teslaSingleOverdriveLoss", "Features", TESLA_SINGLE_OVERDRIVE_LOSS, 0, 1, + TESLA_SINGLE_OVERDRIVE_LOSS = _mainConfig.getFloat("TeslaSingleOverdriveLoss", "Features", TESLA_SINGLE_OVERDRIVE_LOSS, 0, 1, "Additional losses for overdrive use on the single block tesla"); } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java index 89093bdba7..dac8800894 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java @@ -23,6 +23,7 @@ import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.util.Vec3Impl; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.Materials; import gregtech.api.enums.Textures; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; @@ -33,6 +34,7 @@ import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.fluids.FluidStack; import java.util.ArrayList; import java.util.HashMap; @@ -57,20 +59,24 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock private static Textures.BlockIcons.CustomIcon ScreenOFF; private static Textures.BlockIcons.CustomIcon ScreenON; - + //TODO Make the setting abstractions static, if they aren't changed at tick time private int mTier = 0; //Determines max voltage and efficiency (MV to LuV) private int maxTier = 6; //Max tier for efficiency calcuation + private int plasmaTier = 0; //0 is None, 1 is Helium or Nitrogen, 2 is Radon + private boolean doFluidOutput = TecTech.configTecTech.TESLA_MULTI_MOLTEN_OUTPUT; //Default is false + private FluidStack[] mOutputFluidsQueue; //Used to buffer the fluid outputs for one second private float energyEfficiency = 1; private float overdriveEfficiency = 1; private float minEfficiency = TecTech.configTecTech.TESLA_MULTI_MIN_EFFICIENCY;//Default is 0.955F - private float maxEfficiency = TecTech.configTecTech.TESLA_MULTI_MAX_EFFICIENCY;//Default is 0.98F; + private float maxEfficiency = TecTech.configTecTech.TESLA_MULTI_MAX_EFFICIENCY;//Default is 0.98F private float overdriveEfficiencyExtra = TecTech.configTecTech.TESLA_MULTI_OVERDRIVE_LOSS;//Default is 0.005F private Map eTeslaMap = new HashMap<>(); //Used to store targets for power transmission private final ArrayList eCapacitorHatches = new ArrayList<>(); //Used to determine count and tier of capacitors present private int scanTime = 0; //Scan timer used for tesla search intervals + private int scanRangeXZ = TecTech.configTecTech.TESLA_MULTI_SCAN_RANGE;//Default is 40 private long energyCapacity = 0; //Total energy storage limited by capacitors private long outputVoltageMax = 0; //Tesla voltage output limited by capacitors @@ -254,11 +260,25 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock } private float getRangeMulti(int mTier, int vTier) { + //Helium and Nitrogen Plasmas will double the range + //Radon will quadruple the range + int plasmaBoost; + switch (plasmaTier) { + case 2: + plasmaBoost = 4; + break; + case 1: + plasmaBoost = 2; + break; + default: + plasmaBoost = 1; + } + //Over-tiered coils will add +25% range if (vTier > mTier) { - return 1.25F; + return 1.25F * plasmaBoost; } - return 1F; + return 1F * plasmaBoost; } private void scanForTransmissionTargets(Vec3Impl coordsMin, Vec3Impl coordsMax) { @@ -302,6 +322,46 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock sparkList.add(new ThaumSpark(posTop.get0(), posTop.get1(), posTop.get2(), xR, yR, zR, wID)); } + private void checkPlasmaBoost() { + //If there's fluid in the queue, try to output it + //That way it takes at least a second to 'process' the plasma + if (mOutputFluidsQueue != null) { + mOutputFluids = mOutputFluidsQueue; + mOutputFluidsQueue = null; + } + + for (GT_MetaTileEntity_Hatch_Input fluidHatch : mInputHatches) { + if (fluidHatch.mFluid != null) { + if (fluidHatch.mFluid.isFluidEqual(Materials.Helium.getPlasma(1)) && fluidHatch.mFluid.amount >= 100) { + System.out.print("HELIUM\n"); + fluidHatch.mFluid.amount = fluidHatch.mFluid.amount - 100; + if (doFluidOutput) { + mOutputFluidsQueue = new FluidStack[]{Materials.Helium.getGas(100)}; + } + plasmaTier = 1; + return; + } else if (fluidHatch.mFluid.isFluidEqual(Materials.Nitrogen.getPlasma(1)) && fluidHatch.mFluid.amount >= 50) { + System.out.print("NITRO\n"); + fluidHatch.mFluid.amount = fluidHatch.mFluid.amount - 50; + if (doFluidOutput) { + mOutputFluidsQueue = new FluidStack[]{Materials.Nitrogen.getGas(50)}; + } + plasmaTier = 1; + return; + } else if (fluidHatch.mFluid.isFluidEqual(Materials.Radon.getPlasma(1)) && fluidHatch.mFluid.amount >= 50) { + System.out.print("RADON\n"); + fluidHatch.mFluid.amount = fluidHatch.mFluid.amount - 50; + if (doFluidOutput) { + mOutputFluidsQueue = new FluidStack[]{Materials.Radon.getGas(50)}; + } + plasmaTier = 2; + return; + } + } + } + plasmaTier = 0; + } + @Override public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { return new GT_MetaTileEntity_TM_teslaCoil(mName); @@ -340,20 +400,20 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock posTop = getExtendedFacing().getWorldOffset(new Vec3Impl(0, -14, 2)).add(getBaseMetaTileEntity()); //Calculate offsets for scanning - scanPosOffsets[0] = getExtendedFacing().getWorldOffset(new Vec3Impl(40, 0, 43)); - scanPosOffsets[1] = getExtendedFacing().getWorldOffset(new Vec3Impl(-40, -4, -37)); + scanPosOffsets[0] = getExtendedFacing().getWorldOffset(new Vec3Impl(scanRangeXZ, 0, scanRangeXZ + 3)); + scanPosOffsets[1] = getExtendedFacing().getWorldOffset(new Vec3Impl(-1 * scanRangeXZ, -4, -1 * scanRangeXZ + 3)); - scanPosOffsets[2] = getExtendedFacing().getWorldOffset(new Vec3Impl(40, -5, 43)); - scanPosOffsets[3] = getExtendedFacing().getWorldOffset(new Vec3Impl(-40, -8, -37)); + scanPosOffsets[2] = getExtendedFacing().getWorldOffset(new Vec3Impl(scanRangeXZ, -5, scanRangeXZ + 3)); + scanPosOffsets[3] = getExtendedFacing().getWorldOffset(new Vec3Impl(-1 * scanRangeXZ, -8, -1 * scanRangeXZ + 3)); - scanPosOffsets[4] = getExtendedFacing().getWorldOffset(new Vec3Impl(40, -9, 43)); - scanPosOffsets[5] = getExtendedFacing().getWorldOffset(new Vec3Impl(-40, -12, -37)); + scanPosOffsets[4] = getExtendedFacing().getWorldOffset(new Vec3Impl(scanRangeXZ, -9, scanRangeXZ + 3)); + scanPosOffsets[5] = getExtendedFacing().getWorldOffset(new Vec3Impl(-1 * scanRangeXZ, -12, -1 * scanRangeXZ + 3)); - scanPosOffsets[6] = getExtendedFacing().getWorldOffset(new Vec3Impl(40, -13, 43)); - scanPosOffsets[7] = getExtendedFacing().getWorldOffset(new Vec3Impl(-40, -16, -37)); + scanPosOffsets[6] = getExtendedFacing().getWorldOffset(new Vec3Impl(scanRangeXZ, -13, scanRangeXZ + 3)); + scanPosOffsets[7] = getExtendedFacing().getWorldOffset(new Vec3Impl(-1 * scanRangeXZ, -16, -1 * scanRangeXZ + 3)); - scanPosOffsets[8] = getExtendedFacing().getWorldOffset(new Vec3Impl(40, -17, 43)); - scanPosOffsets[9] = getExtendedFacing().getWorldOffset(new Vec3Impl(-40, -20, -37)); + scanPosOffsets[8] = getExtendedFacing().getWorldOffset(new Vec3Impl(scanRangeXZ, -17, scanRangeXZ + 3)); + scanPosOffsets[9] = getExtendedFacing().getWorldOffset(new Vec3Impl(-1 * scanRangeXZ, -20, -1 * scanRangeXZ + 3)); } return true; } @@ -362,6 +422,8 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock @Override public boolean checkRecipe_EM(ItemStack itemStack) { + checkPlasmaBoost(); + if (!histHighSetting.getStatus(false).isOk || !histLowSetting.getStatus(false).isOk || !transferRadiusTowerSetting.getStatus(false).isOk || @@ -825,6 +887,14 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); return eParamHatches.add((GT_MetaTileEntity_Hatch_Param) aMetaTileEntity); } + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { + ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return mInputHatches.add((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity); + } + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) { + ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return mOutputHatches.add((GT_MetaTileEntity_Hatch_Output) aMetaTileEntity); + } return false; } @@ -841,4 +911,4 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock public String[] getStructureDescription(ItemStack stackSize) { return description; } -} \ No newline at end of file +} -- cgit From 3b388cd947255ccef57215862591228cb4421997 Mon Sep 17 00:00:00 2001 From: basdxz Date: Sat, 11 Jul 2020 13:37:02 +0100 Subject: Plasma range boosting now helps with loss Very generous imo, might need to be scaled back --- .../multi/GT_MetaTileEntity_TM_teslaCoil.java | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java index dac8800894..5ae1d86895 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java @@ -252,10 +252,22 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock } private long getEnergyEfficiency(long voltage, int distance, boolean overDriveToggle) { + //Helium and Nitrogen Plasmas will half the effective distance + //Radon will half it again + int effectiveDistance = distance; + switch (plasmaTier) { + case 2: + effectiveDistance = distance / 4; + break; + case 1: + effectiveDistance = distance / 2; + break; + } + if (overDriveToggle) { - return (long) ((voltage * 2) - (voltage * Math.pow(overdriveEfficiency, distance))); + return (long) ((voltage * 2) - (voltage * Math.pow(overdriveEfficiency, effectiveDistance))); } else { - return (long) (voltage * Math.pow(energyEfficiency, distance)); + return (long) (voltage * Math.pow(energyEfficiency, effectiveDistance)); } } @@ -333,7 +345,6 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock for (GT_MetaTileEntity_Hatch_Input fluidHatch : mInputHatches) { if (fluidHatch.mFluid != null) { if (fluidHatch.mFluid.isFluidEqual(Materials.Helium.getPlasma(1)) && fluidHatch.mFluid.amount >= 100) { - System.out.print("HELIUM\n"); fluidHatch.mFluid.amount = fluidHatch.mFluid.amount - 100; if (doFluidOutput) { mOutputFluidsQueue = new FluidStack[]{Materials.Helium.getGas(100)}; @@ -341,7 +352,6 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock plasmaTier = 1; return; } else if (fluidHatch.mFluid.isFluidEqual(Materials.Nitrogen.getPlasma(1)) && fluidHatch.mFluid.amount >= 50) { - System.out.print("NITRO\n"); fluidHatch.mFluid.amount = fluidHatch.mFluid.amount - 50; if (doFluidOutput) { mOutputFluidsQueue = new FluidStack[]{Materials.Nitrogen.getGas(50)}; @@ -349,7 +359,6 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock plasmaTier = 1; return; } else if (fluidHatch.mFluid.isFluidEqual(Materials.Radon.getPlasma(1)) && fluidHatch.mFluid.amount >= 50) { - System.out.print("RADON\n"); fluidHatch.mFluid.amount = fluidHatch.mFluid.amount - 50; if (doFluidOutput) { mOutputFluidsQueue = new FluidStack[]{Materials.Radon.getGas(50)}; @@ -450,6 +459,7 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock //Calculate Efficiency values energyEfficiency = map(mTier + 1, 1, maxTier, minEfficiency, maxEfficiency); + //OD Eff calc overdriveEfficiency = energyEfficiency - overdriveEfficiencyExtra; energyCapacity = 0; -- cgit From 011cfd255f5324dad9cf53e4efe1b0c455257152 Mon Sep 17 00:00:00 2001 From: basdxz Date: Sat, 11 Jul 2020 13:38:09 +0100 Subject: Expand Tesla tiers We now have ZPM Tier primary coils and LuV and ZPM tier capacitors, props to the madlads at the BigFlex MegaPlex for planning on using it with their fusion reactors --- .../dreamcraft/DreamCraftRecipeLoader.java | 27 +++++++++++++++- .../tectech/loader/recipe/BloodyRecipeLoader.java | 22 +++++++++++++ .../technus/tectech/thing/CustomItemList.java | 2 +- .../tectech/thing/casing/GT_Block_CasingsBA0.java | 35 ++++++++++++++------- .../tectech/thing/casing/GT_Item_CasingsBA0.java | 4 +++ .../tectech/thing/item/TeslaCoilCapacitor.java | 14 ++++++--- .../hatch/GT_MetaTileEntity_Hatch_Capacitor.java | 18 +++++------ .../multi/GT_MetaTileEntity_TM_teslaCoil.java | 10 ++++-- .../iconsets/TM_TESLA_WINDING_PRIMARY_SIDES_6.png | Bin 0 -> 814 bytes .../TM_TESLA_WINDING_PRIMARY_TOP_BOTTOM_6.png | Bin 0 -> 838 bytes src/main/resources/assets/tectech/lang/en_US.lang | 3 ++ .../tectech/textures/items/itemCapacitorLuV.png | Bin 0 -> 570 bytes .../tectech/textures/items/itemCapacitorZPM.png | Bin 0 -> 563 bytes 13 files changed, 106 insertions(+), 29 deletions(-) create mode 100644 src/main/resources/assets/gregtech/textures/blocks/iconsets/TM_TESLA_WINDING_PRIMARY_SIDES_6.png create mode 100644 src/main/resources/assets/gregtech/textures/blocks/iconsets/TM_TESLA_WINDING_PRIMARY_TOP_BOTTOM_6.png create mode 100644 src/main/resources/assets/tectech/textures/items/itemCapacitorLuV.png create mode 100644 src/main/resources/assets/tectech/textures/items/itemCapacitorZPM.png diff --git a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java index b669165176..748888c5c9 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java +++ b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java @@ -224,7 +224,12 @@ public class DreamCraftRecipeLoader implements Runnable { GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.SuperconductorLuV, 8), getItemContainer("MicaInsulatorFoil").get(28) - }, Materials.Indium.getMolten(144), CustomItemList.tM_TeslaPrimary_5.get(1), 50, 30720); + }, Materials.Indium.getMolten(144), CustomItemList.tM_TeslaPrimary_5.get(1), 200, 30720); + //Tesla Primary Coils T6 + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ + GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.SuperconductorZPM, 8), + getItemContainer("MicaInsulatorFoil").get(32) + }, Materials.Naquadah.getMolten(144), CustomItemList.tM_TeslaPrimary_6.get(1), 200, 122880); //endregion @@ -1599,6 +1604,20 @@ public class DreamCraftRecipeLoader implements Runnable { GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 24), GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Silicone, 24), }, Materials.Epoxid.getMolten(360), CustomItemList.teslaCapacitor.getWithDamage(1, 4), 320, 7680); + //LuV Tesla Capacitor + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ + GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.HSSG, 4), + GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 14), + GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 28), + GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Silicone, 28), + }, Materials.Epoxid.getMolten(432), CustomItemList.teslaCapacitor.getWithDamage(1, 5), 320, 30720); + //ZPM Tesla Capacitor + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ + GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Naquadah, 4), + GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 16), + GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 32), + GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Silicone, 32), + }, Materials.Epoxid.getMolten(504), CustomItemList.teslaCapacitor.getWithDamage(1, 6), 320, 122880); //Tesla Cover GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ CustomItemList.teslaComponent.getWithDamage(4, 0), @@ -1663,6 +1682,12 @@ public class DreamCraftRecipeLoader implements Runnable { //IV Tesla Capacitor GT_Values.RA.addExtractorRecipe(CustomItemList.teslaCapacitor.getWithDamage(1, 4), GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 12), 300, 2); + //LuV Tesla Capacitor + GT_Values.RA.addExtractorRecipe(CustomItemList.teslaCapacitor.getWithDamage(1, 5), + GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 14), 300, 2); + //ZPM Tesla Capacitor + GT_Values.RA.addExtractorRecipe(CustomItemList.teslaCapacitor.getWithDamage(1, 6), + GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 16), 300, 2); //endregion diff --git a/src/main/java/com/github/technus/tectech/loader/recipe/BloodyRecipeLoader.java b/src/main/java/com/github/technus/tectech/loader/recipe/BloodyRecipeLoader.java index 70f64d3719..7b8cc14f4d 100644 --- a/src/main/java/com/github/technus/tectech/loader/recipe/BloodyRecipeLoader.java +++ b/src/main/java/com/github/technus/tectech/loader/recipe/BloodyRecipeLoader.java @@ -191,6 +191,7 @@ public class BloodyRecipeLoader implements Runnable { GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[]{"WWW", "WwW", "WWW", 'W', OrePrefixes.wireGt02.get(Materials.Superconductor)}); + //TODO Add Tesla Primary Coils T6 //endregion @@ -1157,6 +1158,21 @@ public class BloodyRecipeLoader implements Runnable { GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 24), GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Silicone, 24), }, Materials.Epoxid.getMolten(360), CustomItemList.teslaCapacitor.getWithDamage(1, 4), 320, 7680); + //LuV Tesla Capacitor + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ + GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.HSSG, 4), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BatteryAlloy, 14), + GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 28), + GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Silicone, 28), + }, Materials.Epoxid.getMolten(432), CustomItemList.teslaCapacitor.getWithDamage(1, 5), 320, 30720); + //ZPM Tesla Capacitor + //GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ + // GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Naquadah, 4), + // GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BatteryAlloy, 16), + // GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 32), + // GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Silicone, 32), + //}, Materials.Epoxid.getMolten(504), CustomItemList.teslaCapacitor.getWithDamage(1, 6), 320, 122880); + //TODO Allow with the coils, useless alone and will only cause trouble //Tesla Cover GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ CustomItemList.teslaComponent.getWithDamage(4, 0), @@ -1221,6 +1237,12 @@ public class BloodyRecipeLoader implements Runnable { //IV Tesla Capacitor GT_Values.RA.addExtractorRecipe(CustomItemList.teslaCapacitor.getWithDamage(1, 4), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BatteryAlloy, 12), 300, 2); + //LuV Tesla Capacitor + GT_Values.RA.addExtractorRecipe(CustomItemList.teslaCapacitor.getWithDamage(1, 5), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BatteryAlloy, 14), 300, 2); + //ZPM Tesla Capacitor + GT_Values.RA.addExtractorRecipe(CustomItemList.teslaCapacitor.getWithDamage(1, 6), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BatteryAlloy, 16), 300, 2); //endregion diff --git a/src/main/java/com/github/technus/tectech/thing/CustomItemList.java b/src/main/java/com/github/technus/tectech/thing/CustomItemList.java index 5265ad25c6..a86695ff4a 100644 --- a/src/main/java/com/github/technus/tectech/thing/CustomItemList.java +++ b/src/main/java/com/github/technus/tectech/thing/CustomItemList.java @@ -78,7 +78,7 @@ public enum CustomItemList implements IItemContainer { eM_Containment, eM_Containment_Field, eM_Containment_Advanced, eM_Coil, eM_Teleportation, eM_Dimensional, eM_Ultimate_Containment, eM_Ultimate_Containment_Advanced, eM_Ultimate_Containment_Field, eM_Spacetime, eM_Computer_Casing, eM_Computer_Bus, eM_Computer_Vent, eM_Hollow, eM_Power, debugBlock, - tM_TeslaBase, tM_TeslaToroid, tM_TeslaSecondary, tM_TeslaPrimary_0, tM_TeslaPrimary_1, tM_TeslaPrimary_2, tM_TeslaPrimary_3, tM_TeslaPrimary_4, tM_TeslaPrimary_5, + tM_TeslaBase, tM_TeslaToroid, tM_TeslaSecondary, tM_TeslaPrimary_0, tM_TeslaPrimary_1, tM_TeslaPrimary_2, tM_TeslaPrimary_3, tM_TeslaPrimary_4, tM_TeslaPrimary_5, tM_TeslaPrimary_6, Machine_Multi_Microwave, Machine_Multi_TeslaCoil, Machine_Multi_Transformer, diff --git a/src/main/java/com/github/technus/tectech/thing/casing/GT_Block_CasingsBA0.java b/src/main/java/com/github/technus/tectech/thing/casing/GT_Block_CasingsBA0.java index 6d5bcd2b04..823f9ae26e 100644 --- a/src/main/java/com/github/technus/tectech/thing/casing/GT_Block_CasingsBA0.java +++ b/src/main/java/com/github/technus/tectech/thing/casing/GT_Block_CasingsBA0.java @@ -23,8 +23,8 @@ import static com.github.technus.tectech.TecTech.tectechTexturePage1; * Created by danie_000 on 03.10.2016. */ public class GT_Block_CasingsBA0 extends GT_Block_Casings_Abstract { - public static final byte texturePage=tectechTexturePage1; - public static final short textureOffset = (texturePage << 7)+16;//Start of PAGE 8 (which is the 9th page) (8*128)+16 + public static final byte texturePage = tectechTexturePage1; + public static final short textureOffset = (texturePage << 7) + 16;//Start of PAGE 8 (which is the 9th page) (8*128)+16 private static IIcon[] tM0 = new IIcon[2]; private static IIcon[] tM1 = new IIcon[2]; @@ -35,11 +35,12 @@ public class GT_Block_CasingsBA0 extends GT_Block_Casings_Abstract { private static IIcon[] tM6 = new IIcon[2]; private static IIcon tM7; private static IIcon[] tM8 = new IIcon[2]; + private static IIcon[] tM9 = new IIcon[2]; public GT_Block_CasingsBA0() { super(GT_Item_CasingsBA0.class, "gt.blockcasingsBA0", GT_Material_Casings.INSTANCE); for (byte b = 0; b < 16; b = (byte) (b + 1)) { - Textures.BlockIcons.casingTexturePages[texturePage][b+16] = new GT_CopiedBlockTexture(this, 6, b); + Textures.BlockIcons.casingTexturePages[texturePage][b + 16] = new GT_CopiedBlockTexture(this, 6, b); /*IMPORTANT for block recoloring**/ } @@ -49,6 +50,7 @@ public class GT_Block_CasingsBA0 extends GT_Block_Casings_Abstract { GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "EV Superconductor Primary Tesla Windings"); GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "IV Superconductor Primary Tesla Windings"); GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "LuV Superconductor Primary Tesla Windings"); + GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "ZPM Superconductor Primary Tesla Windings"); GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Tesla Base Casing"); GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Tesla Toroid Casing"); @@ -60,6 +62,7 @@ public class GT_Block_CasingsBA0 extends GT_Block_Casings_Abstract { CustomItemList.tM_TeslaPrimary_3.set(new ItemStack(this, 1, 3)); CustomItemList.tM_TeslaPrimary_4.set(new ItemStack(this, 1, 4)); CustomItemList.tM_TeslaPrimary_5.set(new ItemStack(this, 1, 5)); + CustomItemList.tM_TeslaPrimary_6.set(new ItemStack(this, 1, 9)); CustomItemList.tM_TeslaBase.set(new ItemStack(this, 1, 6)); CustomItemList.tM_TeslaToroid.set(new ItemStack(this, 1, 7)); @@ -80,6 +83,8 @@ public class GT_Block_CasingsBA0 extends GT_Block_Casings_Abstract { tM4[1] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_PRIMARY_SIDES_4"); tM5[0] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_PRIMARY_TOP_BOTTOM_5"); tM5[1] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_PRIMARY_SIDES_5"); + tM9[0] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_PRIMARY_TOP_BOTTOM_6"); + tM9[1] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_PRIMARY_SIDES_6"); tM6[0] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_BASE_TOP_BOTTOM"); tM6[1] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_BASE_SIDES"); @@ -92,7 +97,7 @@ public class GT_Block_CasingsBA0 extends GT_Block_Casings_Abstract { public IIcon getIcon(int aSide, int aMeta) { switch (aMeta) { case 0: - switch (aSide){ + switch (aSide) { case 0: case 1: return tM0[0]; @@ -100,7 +105,7 @@ public class GT_Block_CasingsBA0 extends GT_Block_Casings_Abstract { return tM0[1]; } case 1: - switch (aSide){ + switch (aSide) { case 0: case 1: return tM1[0]; @@ -108,7 +113,7 @@ public class GT_Block_CasingsBA0 extends GT_Block_Casings_Abstract { return tM1[1]; } case 2: - switch (aSide){ + switch (aSide) { case 0: case 1: return tM2[0]; @@ -116,7 +121,7 @@ public class GT_Block_CasingsBA0 extends GT_Block_Casings_Abstract { return tM2[1]; } case 3: - switch (aSide){ + switch (aSide) { case 0: case 1: return tM3[0]; @@ -124,7 +129,7 @@ public class GT_Block_CasingsBA0 extends GT_Block_Casings_Abstract { return tM3[1]; } case 4: - switch (aSide){ + switch (aSide) { case 0: case 1: return tM4[0]; @@ -132,7 +137,7 @@ public class GT_Block_CasingsBA0 extends GT_Block_Casings_Abstract { return tM4[1]; } case 5: - switch (aSide){ + switch (aSide) { case 0: case 1: return tM5[0]; @@ -140,7 +145,7 @@ public class GT_Block_CasingsBA0 extends GT_Block_Casings_Abstract { return tM5[1]; } case 6: - switch (aSide){ + switch (aSide) { case 0: case 1: return tM6[0]; @@ -150,13 +155,21 @@ public class GT_Block_CasingsBA0 extends GT_Block_Casings_Abstract { case 7: return tM7; case 8: - switch (aSide){ + switch (aSide) { case 0: case 1: return tM8[0]; default: return tM8[1]; } + case 9: + switch (aSide) { + case 0: + case 1: + return tM9[0]; + default: + return tM9[1]; + } default: return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); } diff --git a/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_CasingsBA0.java b/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_CasingsBA0.java index 56fdfd22bb..50630820df 100644 --- a/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_CasingsBA0.java +++ b/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_CasingsBA0.java @@ -45,6 +45,10 @@ public class GT_Item_CasingsBA0 extends GT_Item_Casings_Abstract { aList.add(translateToLocal("gt.blockcasingsBA0.8.desc.0"));//Picks up power from a primary coil aList.add(EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD + translateToLocal("gt.blockcasingsBA0.8.desc.1"));//Who wouldn't want a 32k epoxy multi? break; + case 9://"ZPM Superconductor Primary Tesla Windings" + aList.add(translateToLocal("gt.blockcasingsBA0.0.desc.0") + " " + V[7] + " EU/t");//Handles up to + aList.add(EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD + translateToLocal("gt.blockcasingsBA0.0.desc.1"));//What one man calls God, another calls the laws of physics. + break; default://WTF? aList.add("Damn son where did you get that!?"); aList.add(EnumChatFormatting.BLUE.toString() + "From outer space... I guess..."); diff --git a/src/main/java/com/github/technus/tectech/thing/item/TeslaCoilCapacitor.java b/src/main/java/com/github/technus/tectech/thing/item/TeslaCoilCapacitor.java index 6e7e8c426d..86982e7c09 100644 --- a/src/main/java/com/github/technus/tectech/thing/item/TeslaCoilCapacitor.java +++ b/src/main/java/com/github/technus/tectech/thing/item/TeslaCoilCapacitor.java @@ -22,7 +22,7 @@ import static net.minecraft.util.StatCollector.translateToLocal; public final class TeslaCoilCapacitor extends Item { public static TeslaCoilCapacitor INSTANCE; - private static IIcon LVicon, MVicon, HVicon, EVicon, IVicon; + private static IIcon LVicon, MVicon, HVicon, EVicon, IVicon, LuVicon, ZPMicon; private TeslaCoilCapacitor() { setHasSubtypes(true); @@ -33,8 +33,8 @@ public final class TeslaCoilCapacitor extends Item { @Override public void addInformation(ItemStack aStack, EntityPlayer ep, List aList, boolean boo) { aList.add(CommonValues.BASS_MARK); - if (aStack.getItemDamage() >= 0 && aStack.getItemDamage() <= 4) { - aList.add(translateToLocal("item.tm.teslaCoilCapacitor.desc.0") + " " + V[aStack.getItemDamage() + 1] * 512 + " " + translateToLocal("item.tm.teslaCoilCapacitor.desc.1") +" " + V[aStack.getItemDamage() + 1] + " EU/t");//Stores 16384 EU in a tesla tower at 32 EU/t + if (aStack.getItemDamage() >= 0 && aStack.getItemDamage() <= 6) { + aList.add(translateToLocal("item.tm.teslaCoilCapacitor.desc.0") + " " + V[aStack.getItemDamage() + 1] * 512 + " " + translateToLocal("item.tm.teslaCoilCapacitor.desc.1") + " " + V[aStack.getItemDamage() + 1] + " EU/t");//Stores 16384 EU in a tesla tower at 32 EU/t } else { aList.add(translateToLocal("item.tm.teslaCoilCapacitor.desc.2"));//Yeet this broken item into some spicy water! } @@ -61,6 +61,8 @@ public final class TeslaCoilCapacitor extends Item { HVicon = iconRegister.registerIcon(MODID + ":itemCapacitorHV"); EVicon = iconRegister.registerIcon(MODID + ":itemCapacitorEV"); IVicon = iconRegister.registerIcon(MODID + ":itemCapacitorIV"); + LuVicon = iconRegister.registerIcon(MODID + ":itemCapacitorLuV"); + ZPMicon = iconRegister.registerIcon(MODID + ":itemCapacitorZPM"); } @Override @@ -74,6 +76,10 @@ public final class TeslaCoilCapacitor extends Item { return EVicon; case 4: return IVicon; + case 5: + return LuVicon; + case 6: + return ZPMicon; default: return LVicon; } @@ -81,7 +87,7 @@ public final class TeslaCoilCapacitor extends Item { @Override public void getSubItems(Item aItem, CreativeTabs par2CreativeTabs, List aList) { - for (int i = 0; i <= 4; i++) { + for (int i = 0; i <= 6; i++) { aList.add(new ItemStack(aItem, 1, i)); } } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Capacitor.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Capacitor.java index b4e8f03a74..4e07622c25 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Capacitor.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Capacitor.java @@ -38,7 +38,7 @@ public class GT_MetaTileEntity_Hatch_Capacitor extends GT_MetaTileEntity_Hatch { public GT_MetaTileEntity_Hatch_Capacitor(int aID, String aName, String aNameRegional, int aTier) { super(aID, aName, aNameRegional, aTier, 16, ""); - Util.setTier(aTier,this); + Util.setTier(aTier, this); } public GT_MetaTileEntity_Hatch_Capacitor(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { @@ -173,11 +173,13 @@ public class GT_MetaTileEntity_Hatch_Capacitor extends GT_MetaTileEntity_Hatch { } public static void run() { - new GT_MetaTileEntity_Hatch_Capacitor.CapacitorComponent(Reference.MODID+":item.tm.teslaCoilCapacitor.0", 0, 1, V[1]*512);//LV Capacitor - new GT_MetaTileEntity_Hatch_Capacitor.CapacitorComponent(Reference.MODID+":item.tm.teslaCoilCapacitor.1", 1, 1, V[2]*512);//MV Capacitor - new GT_MetaTileEntity_Hatch_Capacitor.CapacitorComponent(Reference.MODID+":item.tm.teslaCoilCapacitor.2", 2, 1, V[3]*512);//HV Capacitor - new GT_MetaTileEntity_Hatch_Capacitor.CapacitorComponent(Reference.MODID+":item.tm.teslaCoilCapacitor.3", 3, 1, V[4]*512);//EV Capacitor - new GT_MetaTileEntity_Hatch_Capacitor.CapacitorComponent(Reference.MODID+":item.tm.teslaCoilCapacitor.4", 4, 1, V[5]*512);//IV Capacitor + new GT_MetaTileEntity_Hatch_Capacitor.CapacitorComponent(Reference.MODID + ":item.tm.teslaCoilCapacitor.0", 0, 1, V[1] * 512);//LV Capacitor + new GT_MetaTileEntity_Hatch_Capacitor.CapacitorComponent(Reference.MODID + ":item.tm.teslaCoilCapacitor.1", 1, 1, V[2] * 512);//MV Capacitor + new GT_MetaTileEntity_Hatch_Capacitor.CapacitorComponent(Reference.MODID + ":item.tm.teslaCoilCapacitor.2", 2, 1, V[3] * 512);//HV Capacitor + new GT_MetaTileEntity_Hatch_Capacitor.CapacitorComponent(Reference.MODID + ":item.tm.teslaCoilCapacitor.3", 3, 1, V[4] * 512);//EV Capacitor + new GT_MetaTileEntity_Hatch_Capacitor.CapacitorComponent(Reference.MODID + ":item.tm.teslaCoilCapacitor.4", 4, 1, V[5] * 512);//IV Capacitor + new GT_MetaTileEntity_Hatch_Capacitor.CapacitorComponent(Reference.MODID + ":item.tm.teslaCoilCapacitor.5", 5, 1, V[6] * 512);//LuV Capacitor + new GT_MetaTileEntity_Hatch_Capacitor.CapacitorComponent(Reference.MODID + ":item.tm.teslaCoilCapacitor.6", 6, 1, V[7] * 512);//ZPM Capacitor } public static class CapacitorComponent implements Comparable { @@ -206,12 +208,10 @@ public class GT_MetaTileEntity_Hatch_Capacitor extends GT_MetaTileEntity_Hatch { @Override public boolean equals(Object obj) { - if(obj instanceof CapacitorComponent) { + if (obj instanceof CapacitorComponent) { return compareTo((CapacitorComponent) obj) == 0; } return false; } } } - - diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java index 5ae1d86895..58ea6d322b 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java @@ -61,7 +61,7 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock private static Textures.BlockIcons.CustomIcon ScreenON; //TODO Make the setting abstractions static, if they aren't changed at tick time private int mTier = 0; //Determines max voltage and efficiency (MV to LuV) - private int maxTier = 6; //Max tier for efficiency calcuation + private int maxTier = 7; //Max tier for efficiency calcuation private int plasmaTier = 0; //0 is None, 1 is Helium or Nitrogen, 2 is Radon private boolean doFluidOutput = TecTech.configTecTech.TESLA_MULTI_MOLTEN_OUTPUT; //Default is false private FluidStack[] mOutputFluidsQueue; //Used to buffer the fluid outputs for one second @@ -110,7 +110,8 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock private static final byte[] blockMetaT3 = new byte[]{7, 3, 6, 8}; private static final byte[] blockMetaT4 = new byte[]{7, 4, 6, 8}; private static final byte[] blockMetaT5 = new byte[]{7, 5, 6, 8}; - private static final byte[][] blockMetas = new byte[][]{blockMetaT0, blockMetaT1, blockMetaT2, blockMetaT3, blockMetaT4, blockMetaT5}; + private static final byte[] blockMetaT6 = new byte[]{7, 9, 6, 8}; + private static final byte[][] blockMetas = new byte[][]{blockMetaT0, blockMetaT1, blockMetaT2, blockMetaT3, blockMetaT4, blockMetaT5, blockMetaT6}; private static final IHatchAdder[] addingMethods = adders( GT_MetaTileEntity_TM_teslaCoil::addCapacitorToMachineList, GT_MetaTileEntity_TM_teslaCoil::addFrameToMachineList); @@ -389,6 +390,9 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock xyzOffsets = getExtendedFacing().getWorldOffset(new Vec3Impl(0, -1, 1)); mTier = iGregTechTileEntity.getMetaIDOffset(xyzOffsets.get0(), xyzOffsets.get1(), xyzOffsets.get2()); + if (mTier == 9){ + mTier = 6; + } if (structureCheck_EM(shape, blockType, blockMetas[mTier], addingMethods, casingTextures, blockTypeFallback, blockMetaFallback, 3, 16, 0) && eCapacitorHatches.size() > 0) { for (GT_MetaTileEntity_Hatch_Capacitor cap : eCapacitorHatches) { @@ -914,7 +918,7 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock @Override public void construct(ItemStack stackSize, boolean hintsOnly) { - Structure.builder(shape, blockType, blockMetas[(stackSize.stackSize - 1) % 6], 3, 16, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); + Structure.builder(shape, blockType, blockMetas[(stackSize.stackSize - 1) % 7], 3, 16, 0, getBaseMetaTileEntity(), getExtendedFacing(), hintsOnly); } @Override diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/TM_TESLA_WINDING_PRIMARY_SIDES_6.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/TM_TESLA_WINDING_PRIMARY_SIDES_6.png new file mode 100644 index 0000000000..833597130b Binary files /dev/null and b/src/main/resources/assets/gregtech/textures/blocks/iconsets/TM_TESLA_WINDING_PRIMARY_SIDES_6.png differ diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/TM_TESLA_WINDING_PRIMARY_TOP_BOTTOM_6.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/TM_TESLA_WINDING_PRIMARY_TOP_BOTTOM_6.png new file mode 100644 index 0000000000..de4ce136e7 Binary files /dev/null and b/src/main/resources/assets/gregtech/textures/blocks/iconsets/TM_TESLA_WINDING_PRIMARY_TOP_BOTTOM_6.png differ diff --git a/src/main/resources/assets/tectech/lang/en_US.lang b/src/main/resources/assets/tectech/lang/en_US.lang index 3b8bc433ed..dc4af9970b 100644 --- a/src/main/resources/assets/tectech/lang/en_US.lang +++ b/src/main/resources/assets/tectech/lang/en_US.lang @@ -64,6 +64,8 @@ item.tm.teslaCoilCapacitor.1.name=MV Tesla Capacitor item.tm.teslaCoilCapacitor.2.name=HV Tesla Capacitor item.tm.teslaCoilCapacitor.3.name=EV Tesla Capacitor item.tm.teslaCoilCapacitor.4.name=IV Tesla Capacitor +item.tm.teslaCoilCapacitor.5.name=LuV Tesla Capacitor +item.tm.teslaCoilCapacitor.6.name=ZPM Tesla Capacitor item.tm.teslaCoilCapacitor.desc.0=Stores item.tm.teslaCoilCapacitor.desc.1=EU in a tesla tower at item.tm.teslaCoilCapacitor.desc.2=Yeet this broken item into some spicy water! @@ -518,6 +520,7 @@ gt.blockcasingsBA0.2.name=HV Superconductor Primary Tesla Windings gt.blockcasingsBA0.3.name=EV Superconductor Primary Tesla Windings gt.blockcasingsBA0.4.name=IV Superconductor Primary Tesla Windings gt.blockcasingsBA0.5.name=LuV Superconductor Primary Tesla Windings +gt.blockcasingsBA0.9.name=ZPM Superconductor Primary Tesla Windings gt.blockcasingsBA0.0.desc.0=Handles up to gt.blockcasingsBA0.0.desc.1=What one man calls God, another calls the laws of physics. gt.blockcasingsBA0.6.name=Tesla Base Casing diff --git a/src/main/resources/assets/tectech/textures/items/itemCapacitorLuV.png b/src/main/resources/assets/tectech/textures/items/itemCapacitorLuV.png new file mode 100644 index 0000000000..0801e3f0d7 Binary files /dev/null and b/src/main/resources/assets/tectech/textures/items/itemCapacitorLuV.png differ diff --git a/src/main/resources/assets/tectech/textures/items/itemCapacitorZPM.png b/src/main/resources/assets/tectech/textures/items/itemCapacitorZPM.png new file mode 100644 index 0000000000..29b30dc63e Binary files /dev/null and b/src/main/resources/assets/tectech/textures/items/itemCapacitorZPM.png differ -- cgit From 5b9d907a4e098d8b765c13c411ba0ea5225267aa Mon Sep 17 00:00:00 2001 From: basdxz Date: Sat, 11 Jul 2020 13:39:58 +0100 Subject: Bump the version Added Plasma Boosting to Tesla Tower Works with Nitrogen and Helium 100mb Helium per second 50mb Nitrogen per second 50mb Radon per second Helium and Nitrogen boost max range by 2x Radon by 4x The max scan range hasn't been changed, but i pushed it into the config would suggest setting to 64 there if you want more than 40 In addition By default it just voids the plasma There is a config to make it output fluid instead idk im coder not a gayme play balance lad so you should play with it also unsure of the plasma values are low/high please give input Added ZPM Primary Tesla Coils Added LuV Telsa Capacitors Added ZPM Tesla Capacitors All above with recipes Tesla range related losses now halfed when using Nitrogen or Helium and Quartered when using Radon plasma Current bugginess, power sent may or may not be once a second instead of once a tick. Additionally multi amp per source transmission might be messed up The bugginess was due to the capacitor tiering not being configured, EG LuV and IV capacitors working at IV tier. Has since been fixed. --- build.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.properties b/build.properties index 3b282b43c2..b377db8b58 100644 --- a/build.properties +++ b/build.properties @@ -1,6 +1,6 @@ minecraft.version=1.7.10 forge.version=10.13.4.1614 -tectech.version=3.8.3 +tectech.version=3.9.0 ic2.version=2.2.790-experimental codechickenlib.version=1.1.3.140 -- cgit From 792d54ffa2fde437a3af9925c7c41399821b2d83 Mon Sep 17 00:00:00 2001 From: basdxz Date: Sat, 11 Jul 2020 13:51:59 +0100 Subject: Patch ZPM Tesla Primaries missing from NEI --- build.properties | 2 +- .../com/github/technus/tectech/thing/casing/GT_Block_CasingsBA0.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.properties b/build.properties index b377db8b58..90269e3abe 100644 --- a/build.properties +++ b/build.properties @@ -1,6 +1,6 @@ minecraft.version=1.7.10 forge.version=10.13.4.1614 -tectech.version=3.9.0 +tectech.version=3.9.1 ic2.version=2.2.790-experimental codechickenlib.version=1.1.3.140 diff --git a/src/main/java/com/github/technus/tectech/thing/casing/GT_Block_CasingsBA0.java b/src/main/java/com/github/technus/tectech/thing/casing/GT_Block_CasingsBA0.java index 823f9ae26e..0d2f710ae9 100644 --- a/src/main/java/com/github/technus/tectech/thing/casing/GT_Block_CasingsBA0.java +++ b/src/main/java/com/github/technus/tectech/thing/casing/GT_Block_CasingsBA0.java @@ -184,7 +184,7 @@ public class GT_Block_CasingsBA0 extends GT_Block_Casings_Abstract { @Override public void getSubBlocks(Item aItem, CreativeTabs par2CreativeTabs, List aList) { - for (int i = 0; i <= 8; i++) { + for (int i = 0; i <= 9; i++) { aList.add(new ItemStack(aItem, 1, i)); } } -- cgit From d895a4f85ae7edad8884c5ded8c29ff47bbb8de9 Mon Sep 17 00:00:00 2001 From: basdxz Date: Sat, 18 Jul 2020 09:38:35 +0100 Subject: Lots of Tesla Tower work Reworked power loss Fixed Tesla Tower exploding when already powered off Added and reworded some comments Added plasma consumption values to config --- .../technus/tectech/loader/TecTechConfig.java | 65 +++++------ .../multi/GT_MetaTileEntity_TM_teslaCoil.java | 119 ++++++++++----------- .../single/GT_MetaTileEntity_TeslaCoil.java | 64 ++++++----- 3 files changed, 119 insertions(+), 129 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/loader/TecTechConfig.java b/src/main/java/com/github/technus/tectech/loader/TecTechConfig.java index 2cc52e8513..030be65f3b 100644 --- a/src/main/java/com/github/technus/tectech/loader/TecTechConfig.java +++ b/src/main/java/com/github/technus/tectech/loader/TecTechConfig.java @@ -21,14 +21,17 @@ public class TecTechConfig extends ConfigManager { public boolean DISABLE_BLOCK_HARDNESS_NERF; public float TURRET_DAMAGE_FACTOR; public float TURRET_EXPLOSION_FACTOR; - public float TESLA_MULTI_MIN_EFFICIENCY; - public float TESLA_MULTI_MAX_EFFICIENCY; - public float TESLA_MULTI_OVERDRIVE_LOSS; - public int TESLA_MULTI_SCAN_RANGE; - public boolean TESLA_MULTI_MOLTEN_OUTPUT; - public float TESLA_SINGLE_MIN_EFFICIENCY; - public float TESLA_SINGLE_MAX_EFFICIENCY; - public float TESLA_SINGLE_OVERDRIVE_LOSS; + public int TESLA_MULTI_HELIUM_PLASMA_PER_SECOND; + public int TESLA_MULTI_NITROGEN_PLASMA_PER_SECOND; + public int TESLA_MULTI_RADON_PLASMA_PER_SECOND; + public int TESLA_MULTI_LOSS_PER_BLOCK_T0; + public int TESLA_MULTI_LOSS_PER_BLOCK_T1; + public int TESLA_MULTI_LOSS_PER_BLOCK_T2; + public float TESLA_MULTI_OVERDRIVE_LOSS_FACTOR; + public int TESLA_MULTI_SCAN_RANGE;//TODO delete + public boolean TESLA_MULTI_GAS_OUTPUT; + public int TESLA_SINGLE_LOSS_PER_BLOCK; + public float TESLA_SINGLE_OVERDRIVE_LOSS_FACTOR; /** * This loading phases do not correspond to mod loading phases! @@ -44,17 +47,19 @@ public class TecTechConfig extends ConfigManager { DISABLE_MATERIAL_LOADING_FFS = false; TURRET_DAMAGE_FACTOR = 10; TURRET_EXPLOSION_FACTOR = 1; - TESLA_MULTI_MIN_EFFICIENCY = 0.955F; - TESLA_MULTI_MAX_EFFICIENCY = 0.98F; - TESLA_MULTI_OVERDRIVE_LOSS = 0.005F; + TESLA_MULTI_HELIUM_PLASMA_PER_SECOND = 100; + TESLA_MULTI_NITROGEN_PLASMA_PER_SECOND = 50; + TESLA_MULTI_RADON_PLASMA_PER_SECOND = 50; + TESLA_MULTI_LOSS_PER_BLOCK_T0 = 1; + TESLA_MULTI_LOSS_PER_BLOCK_T1 = 1; + TESLA_MULTI_LOSS_PER_BLOCK_T2 = 1; + TESLA_MULTI_OVERDRIVE_LOSS_FACTOR = 0.25F; TESLA_MULTI_SCAN_RANGE = 40; - TESLA_MULTI_MOLTEN_OUTPUT = false; - TESLA_SINGLE_MIN_EFFICIENCY = 0.91F; - TESLA_SINGLE_MAX_EFFICIENCY = 0.95F; - TESLA_SINGLE_OVERDRIVE_LOSS = 0.010F; + TESLA_MULTI_GAS_OUTPUT = false; + TESLA_SINGLE_LOSS_PER_BLOCK = 1; + TESLA_SINGLE_OVERDRIVE_LOSS_FACTOR = 0.25F; } - /** * This loading phases do not correspond to mod loading phases! */ @@ -80,22 +85,18 @@ public class TecTechConfig extends ConfigManager { "Set to true to disable the block hardness nerf"); DISABLE_MATERIAL_LOADING_FFS = _mainConfig.getBoolean("DisableMaterialLoading", "Debug", DISABLE_MATERIAL_LOADING_FFS, "Set to true to disable gregtech material processing"); - TESLA_MULTI_MIN_EFFICIENCY = _mainConfig.getFloat("TeslaMultiMinEfficency", "Features", TESLA_MULTI_MIN_EFFICIENCY, 0, 1, - "Worst possible power loss per block for the multi block tesla"); - TESLA_MULTI_MAX_EFFICIENCY = _mainConfig.getFloat("TeslaMultiMaxEfficency", "Features", TESLA_MULTI_MAX_EFFICIENCY, 0, 1, - "Best possible power loss per block for the multi block tesla"); - TESLA_MULTI_OVERDRIVE_LOSS = _mainConfig.getFloat("TeslaMultiOverdriveLoss", "Features", TESLA_MULTI_OVERDRIVE_LOSS, 0, 1, - "Additional losses for overdrive use on the multi block tesla"); - TESLA_MULTI_SCAN_RANGE = _mainConfig.getInt("TeslaMultiScanRange", "Features", TESLA_MULTI_SCAN_RANGE, 4, 256, - "Determines the scan range constant for multi block tesla"); - TESLA_MULTI_MOLTEN_OUTPUT = _mainConfig.getBoolean("TeslaMultiMoltenOutput", "Features", TESLA_MULTI_MOLTEN_OUTPUT, - "Set to true to get molten outputs when boosting the multi block tesla with plasmas"); - TESLA_SINGLE_MIN_EFFICIENCY = _mainConfig.getFloat("TeslaSingleMinEfficency", "Features", TESLA_SINGLE_MIN_EFFICIENCY, 0, 1, - "Worst possible power loss per block for the single block tesla"); - TESLA_SINGLE_MAX_EFFICIENCY = _mainConfig.getFloat("TeslaSingleMaxEfficency", "Features", TESLA_SINGLE_MAX_EFFICIENCY, 0, 1, - "Best possible power loss per block for the single block tesla"); - TESLA_SINGLE_OVERDRIVE_LOSS = _mainConfig.getFloat("TeslaSingleOverdriveLoss", "Features", TESLA_SINGLE_OVERDRIVE_LOSS, 0, 1, - "Additional losses for overdrive use on the single block tesla"); + + TESLA_MULTI_HELIUM_PLASMA_PER_SECOND = _mainConfig.getInt("TeslaMultiHeliumPlasmaPerSecond", "Balance Tweaks", TESLA_MULTI_HELIUM_PLASMA_PER_SECOND, 0, Integer.MAX_VALUE, "Tesla Tower helium plasma consumed each second the tesla tower is active"); + TESLA_MULTI_NITROGEN_PLASMA_PER_SECOND = _mainConfig.getInt("TeslaMultiNitrogenPlasmaPerSecond", "Balance Tweaks", TESLA_MULTI_NITROGEN_PLASMA_PER_SECOND, 0, Integer.MAX_VALUE, "Tesla Tower nitrogen plasma consumed each second the tesla tower is active"); + TESLA_MULTI_RADON_PLASMA_PER_SECOND = _mainConfig.getInt("TeslaMultiRadonPlasmaPerSecond", "Balance Tweaks", TESLA_MULTI_RADON_PLASMA_PER_SECOND, 0, Integer.MAX_VALUE, "Tesla Tower radon plasma consumed each second the tesla tower is active"); + TESLA_MULTI_LOSS_PER_BLOCK_T0 = _mainConfig.getInt("TeslaMultiLossPerBlockT0", "Balance Tweaks", TESLA_MULTI_LOSS_PER_BLOCK_T0, 0, Integer.MAX_VALUE, "Tesla Tower power transmission loss per block per amp using no plasmas"); + TESLA_MULTI_LOSS_PER_BLOCK_T1 = _mainConfig.getInt("TeslaMultiLossPerBlockT1", "Balance Tweaks", TESLA_MULTI_LOSS_PER_BLOCK_T1, 0, Integer.MAX_VALUE, "Tesla Tower power transmission loss per block per amp using helium or nitrogen plasma"); + TESLA_MULTI_LOSS_PER_BLOCK_T2 = _mainConfig.getInt("TeslaMultiLossPerBlockT1", "Balance Tweaks", TESLA_MULTI_LOSS_PER_BLOCK_T2, 0, Integer.MAX_VALUE, "Tesla Tower power transmission loss per block per amp using radon plasma"); + TESLA_MULTI_OVERDRIVE_LOSS_FACTOR = _mainConfig.getFloat("TeslaMultiOverdriveLossFactor", "Balance Tweaks", TESLA_MULTI_OVERDRIVE_LOSS_FACTOR, 0, 1, "Additional Tesla Tower power loss per amp as a factor of the tier voltage"); + TESLA_MULTI_SCAN_RANGE = _mainConfig.getInt("TeslaMultiScanRange", "Balance Tweaks", TESLA_MULTI_SCAN_RANGE, 4, 256, "The horizontal radius scanned by the Tesla Tower"); + TESLA_MULTI_GAS_OUTPUT = _mainConfig.getBoolean("TeslaMultiMoltenOutput", "Balance Tweaks", TESLA_MULTI_GAS_OUTPUT, "Set to true to enable outputting plasmas as gasses from the tesla tower with a 1:1 ratio"); + TESLA_SINGLE_LOSS_PER_BLOCK = _mainConfig.getInt("TeslaSingleLossPerBlock", "Balance Tweaks", TESLA_SINGLE_LOSS_PER_BLOCK, 0, Integer.MAX_VALUE, "Tesla Transceiver power transmission loss per block per amp"); + TESLA_SINGLE_OVERDRIVE_LOSS_FACTOR = _mainConfig.getFloat("TeslaSingleOverdriveLossFactor", "Balance Tweaks", TESLA_SINGLE_OVERDRIVE_LOSS_FACTOR, 0, 1, "Additional Tesla Transceiver power loss per amp as a factor of the tier voltage"); } /** diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java index 58ea6d322b..09f6d597ad 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java @@ -55,42 +55,44 @@ import static net.minecraft.util.StatCollector.translateToLocal; public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_MultiblockBase_EM implements IConstructable { //region variables - private final static HashSet sparkList = new HashSet<>(); - + private static final int heliumUse = TecTech.configTecTech.TESLA_MULTI_HELIUM_PLASMA_PER_SECOND;//Default is 100 + private static final int nitrogenUse = TecTech.configTecTech.TESLA_MULTI_NITROGEN_PLASMA_PER_SECOND;//Default is 50 + private static final int radonUse = TecTech.configTecTech.TESLA_MULTI_RADON_PLASMA_PER_SECOND;//Default is 50 + //Default is {1, 1, 1} + private static final int[] plasmaTierLoss = new int[]{TecTech.configTecTech.TESLA_MULTI_LOSS_PER_BLOCK_T0, + TecTech.configTecTech.TESLA_MULTI_LOSS_PER_BLOCK_T1, TecTech.configTecTech.TESLA_MULTI_LOSS_PER_BLOCK_T2}; + private static final float overDriveLoss = TecTech.configTecTech.TESLA_MULTI_OVERDRIVE_LOSS_FACTOR;//Default is 0.25F; + private static final int scanRangeXZ = TecTech.configTecTech.TESLA_MULTI_SCAN_RANGE;//Default is 40 + private static final boolean doFluidOutput = TecTech.configTecTech.TESLA_MULTI_GAS_OUTPUT; //Default is false + + //Face icons private static Textures.BlockIcons.CustomIcon ScreenOFF; private static Textures.BlockIcons.CustomIcon ScreenON; - //TODO Make the setting abstractions static, if they aren't changed at tick time - private int mTier = 0; //Determines max voltage and efficiency (MV to LuV) - private int maxTier = 7; //Max tier for efficiency calcuation - private int plasmaTier = 0; //0 is None, 1 is Helium or Nitrogen, 2 is Radon - private boolean doFluidOutput = TecTech.configTecTech.TESLA_MULTI_MOLTEN_OUTPUT; //Default is false - private FluidStack[] mOutputFluidsQueue; //Used to buffer the fluid outputs for one second - private float energyEfficiency = 1; - private float overdriveEfficiency = 1; - private float minEfficiency = TecTech.configTecTech.TESLA_MULTI_MIN_EFFICIENCY;//Default is 0.955F - private float maxEfficiency = TecTech.configTecTech.TESLA_MULTI_MAX_EFFICIENCY;//Default is 0.98F - private float overdriveEfficiencyExtra = TecTech.configTecTech.TESLA_MULTI_OVERDRIVE_LOSS;//Default is 0.005F + private int mTier = 0; //Determines max voltage (LV to ZPM) + private int plasmaTier = 0; //0 is None, 1 is Helium or Nitrogen, 2 is Radon (Does not match actual plasma tiers) + + private FluidStack[] mOutputFluidsQueue; //Used to buffer the fluid outputs, so the tesla takes a second to 'cool' any plasma it would output as a gas - private Map eTeslaMap = new HashMap<>(); //Used to store targets for power transmission - private final ArrayList eCapacitorHatches = new ArrayList<>(); //Used to determine count and tier of capacitors present + private final HashSet sparkList = new HashSet<>(); //Thaumcraft lighting coordinate pairs, so we can send them in bursts and save on lag + private final Map eTeslaMap = new HashMap<>(); //Targets for power transmission //TODO Make this fill more efficently and globally + private final ArrayList eCapacitorHatches = new ArrayList<>(); //Capacitor hatches which determine the max voltage tier and count of amps - private int scanTime = 0; //Scan timer used for tesla search intervals - private int scanRangeXZ = TecTech.configTecTech.TESLA_MULTI_SCAN_RANGE;//Default is 40 + private int scanTime = 0; //Scan timer used for tesla search intervals //TODO Replace with something that fetches from a global map private long energyCapacity = 0; //Total energy storage limited by capacitors private long outputVoltageMax = 0; //Tesla voltage output limited by capacitors private int vTier = -1; //Tesla voltage tier limited by capacitors private long outputCurrentMax = 0; //Tesla current output limited by capacitors - //Prevents unnecessary offset calculation + //Prevents unnecessary offset calculation, saving on lag private byte oldRotation = -1; private byte oldOrientation = -1; //Coordinate Arrays private final Vec3Impl[] scanPosOffsets = new Vec3Impl[10]; - private Vec3Impl posZap = Vec3Impl.NULL_VECTOR;//Power Transfer Origin - public Vec3Impl posTop = Vec3Impl.NULL_VECTOR;//Lightning Origin + private Vec3Impl posZap = Vec3Impl.NULL_VECTOR;//Location of the bottom middle of the tower, used as the power transfer origin + public Vec3Impl posTop = Vec3Impl.NULL_VECTOR;//Location of the center of the sphere on top of the tower, used as theThaumcraft lightning origin //endregion //region structure @@ -252,24 +254,22 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock super(aName); } - private long getEnergyEfficiency(long voltage, int distance, boolean overDriveToggle) { - //Helium and Nitrogen Plasmas will half the effective distance - //Radon will half it again - int effectiveDistance = distance; - switch (plasmaTier) { - case 2: - effectiveDistance = distance / 4; - break; - case 1: - effectiveDistance = distance / 2; - break; - } + private int getPerBlockLoss(){ + return plasmaTierLoss[plasmaTier]; + } + + private long[] getOutputVoltage(long outputVoltage, int distance, boolean overDriveToggle) { + long outputVoltageInjectable; + long outputVoltageConsumption; if (overDriveToggle) { - return (long) ((voltage * 2) - (voltage * Math.pow(overdriveEfficiency, effectiveDistance))); + outputVoltageInjectable = outputVoltage; + outputVoltageConsumption = outputVoltage + (distance * getPerBlockLoss()) + (long) Math.round(overDriveLoss * outputVoltage); } else { - return (long) (voltage * Math.pow(energyEfficiency, effectiveDistance)); + outputVoltageInjectable = outputVoltage - (distance * getPerBlockLoss()); + outputVoltageConsumption = outputVoltage; } + return new long[]{outputVoltageInjectable, outputVoltageConsumption}; } private float getRangeMulti(int mTier, int vTier) { @@ -345,24 +345,24 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock for (GT_MetaTileEntity_Hatch_Input fluidHatch : mInputHatches) { if (fluidHatch.mFluid != null) { - if (fluidHatch.mFluid.isFluidEqual(Materials.Helium.getPlasma(1)) && fluidHatch.mFluid.amount >= 100) { - fluidHatch.mFluid.amount = fluidHatch.mFluid.amount - 100; + if (fluidHatch.mFluid.isFluidEqual(Materials.Helium.getPlasma(1)) && fluidHatch.mFluid.amount >= heliumUse) { + fluidHatch.mFluid.amount = fluidHatch.mFluid.amount - heliumUse; if (doFluidOutput) { - mOutputFluidsQueue = new FluidStack[]{Materials.Helium.getGas(100)}; + mOutputFluidsQueue = new FluidStack[]{Materials.Helium.getGas(heliumUse)}; } plasmaTier = 1; return; - } else if (fluidHatch.mFluid.isFluidEqual(Materials.Nitrogen.getPlasma(1)) && fluidHatch.mFluid.amount >= 50) { - fluidHatch.mFluid.amount = fluidHatch.mFluid.amount - 50; + } else if (fluidHatch.mFluid.isFluidEqual(Materials.Nitrogen.getPlasma(1)) && fluidHatch.mFluid.amount >= nitrogenUse) { + fluidHatch.mFluid.amount = fluidHatch.mFluid.amount - nitrogenUse; if (doFluidOutput) { - mOutputFluidsQueue = new FluidStack[]{Materials.Nitrogen.getGas(50)}; + mOutputFluidsQueue = new FluidStack[]{Materials.Nitrogen.getGas(nitrogenUse)}; } plasmaTier = 1; return; - } else if (fluidHatch.mFluid.isFluidEqual(Materials.Radon.getPlasma(1)) && fluidHatch.mFluid.amount >= 50) { - fluidHatch.mFluid.amount = fluidHatch.mFluid.amount - 50; + } else if (fluidHatch.mFluid.isFluidEqual(Materials.Radon.getPlasma(1)) && fluidHatch.mFluid.amount >= radonUse) { + fluidHatch.mFluid.amount = fluidHatch.mFluid.amount - radonUse; if (doFluidOutput) { - mOutputFluidsQueue = new FluidStack[]{Materials.Radon.getGas(50)}; + mOutputFluidsQueue = new FluidStack[]{Materials.Radon.getGas(radonUse)}; } plasmaTier = 2; return; @@ -390,9 +390,7 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock xyzOffsets = getExtendedFacing().getWorldOffset(new Vec3Impl(0, -1, 1)); mTier = iGregTechTileEntity.getMetaIDOffset(xyzOffsets.get0(), xyzOffsets.get1(), xyzOffsets.get2()); - if (mTier == 9){ - mTier = 6; - } + if (mTier == 9){mTier = 6;}//Hacky remap because the ZPM coils were added later if (structureCheck_EM(shape, blockType, blockMetas[mTier], addingMethods, casingTextures, blockTypeFallback, blockMetaFallback, 3, 16, 0) && eCapacitorHatches.size() > 0) { for (GT_MetaTileEntity_Hatch_Capacitor cap : eCapacitorHatches) { @@ -461,11 +459,6 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock } } - //Calculate Efficiency values - energyEfficiency = map(mTier + 1, 1, maxTier, minEfficiency, maxEfficiency); - //OD Eff calc - overdriveEfficiency = energyEfficiency - overdriveEfficiencyExtra; - energyCapacity = 0; outputCurrentMax = 0; @@ -608,6 +601,7 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock cap.getBaseMetaTileEntity().setActive(false); } + ePowerPass = false; setEUVar(0); energyStoredDisplay.set(0); energyFractionDisplay.set(0); @@ -618,12 +612,10 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock IGregTechTileEntity mte = getBaseMetaTileEntity(); //Hysteresis based ePowerPass setting - long energyMax = maxEUStore() / 2; long energyStored = getEUVar(); + float energyFrac = (float) energyStored / energyCapacity; - float energyFrac = (float) energyStored / energyMax; - - energyCapacityDisplay.set(energyMax); + energyCapacityDisplay.set(energyCapacity); energyStoredDisplay.set(energyStored); energyFractionDisplay.set(energyFrac); @@ -793,15 +785,9 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock IGregTechTileEntity node = Rx.getKey(); IMetaTileEntity nodeInside = node.getMetaTileEntity(); - long outputVoltageInjectable; - long outputVoltageConsumption; - if (overdriveToggle) { - outputVoltageInjectable = outputVoltage; - outputVoltageConsumption = getEnergyEfficiency(outputVoltage, Rx.getValue(), true); - } else { - outputVoltageInjectable = getEnergyEfficiency(outputVoltage, Rx.getValue(), false); - outputVoltageConsumption = outputVoltage; - } + long[] outputVoltageNow = getOutputVoltage(outputVoltage, Rx.getValue(), overdriveToggle); + long outputVoltageInjectable = outputVoltageNow[0]; + long outputVoltageConsumption = outputVoltageNow[1]; if (nodeInside instanceof GT_MetaTileEntity_TM_teslaCoil && Rx.getValue() <= transferRadiusTower) { GT_MetaTileEntity_TM_teslaCoil nodeTesla = (GT_MetaTileEntity_TM_teslaCoil) nodeInside; @@ -865,6 +851,11 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock return energyCapacity * 2; } + @Override + public long getEUVar() { + return getBaseMetaTileEntity().isActive() ? super.getEUVar() : 0; + } + private boolean addCapacitorToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { if (aTileEntity == null) { return false; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java index ed36dec7cb..0f73750d48 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java @@ -36,37 +36,32 @@ import static net.minecraft.util.StatCollector.translateToLocalFormatted; public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryBuffer { + private final static int perBlockLoss = TecTech.configTecTech.TESLA_SINGLE_LOSS_PER_BLOCK;//Default is 1 + private final static float overDriveLoss = TecTech.configTecTech.TESLA_SINGLE_OVERDRIVE_LOSS_FACTOR;//Default is 0.25F + + public Map eTeslaMap = new HashMap<>();//Tesla Map to map them tesla bois! private final static HashSet sparkList = new HashSet<>(); private byte sparkCount = 0; - private int maxTier = 4; //Max tier of transceiver - private int minTier = 0; //Min tier of transceiver - - public Map eTeslaMap = new HashMap<>();//Tesla Map to map them tesla bois! + private final static int maxTier = 4; //Max tier of transceiver + private final static int minTier = 0; //Min tier of transceiver - private int transferRadiusMax = 20; - private int transferRadiusMin = 4; - private int transferRadiusLimitTop = (int) map(mTier + 1, minTier + 1, maxTier + 1, transferRadiusMin, transferRadiusMax); - private int transferRadiusLimitBottom = 1; //Minimum user configurable + private final static int transferRadiusMax = 20; + private final static int transferRadiusMin = 4; + private final int transferRadiusLimitTop = (int) map(mTier + 1, minTier + 1, maxTier + 1, transferRadiusMin, transferRadiusMax); + private final static int transferRadiusLimitBottom = 1; //Minimum user configurable private int transferRadius = transferRadiusLimitTop; //Default transferRadius setting - private int transferRadiusTower = 0; //Radius for transceiver to tower transfers - private int transferRadiusCover = 0; //Radius for transceiver to cover transfers public boolean powerPassToggle = false; //Power Pass for public viewing - private int histSteps = 20; //Hysteresis Resolution + private final static int histSteps = 20; //Hysteresis Resolution private int histSettingLow = 3; //Hysteresis Low Limit private int histSettingHigh = 15; //Hysteresis High Limit - private int histLowLimit = 1; //How low can you configure it? - private int histHighLimit = 19; //How high can you configure it? + private final static int histLowLimit = 1; //How low can you configure it? + private final static int histHighLimit = 19; //How high can you configure it? private float histLow = (float) histSettingLow / histSteps; //Power pass is disabled if power is under this fraction private float histHigh = (float) histSettingHigh / histSteps; //Power pass is enabled if power is over this fraction - private long outputVoltage = V[mTier]; - private float minEfficiency = TecTech.configTecTech.TESLA_SINGLE_MIN_EFFICIENCY;//Default is 0.91F - private float maxEfficiency = TecTech.configTecTech.TESLA_SINGLE_MAX_EFFICIENCY;//Default is 0.95F - private float overdriveEfficiencyExtra = TecTech.configTecTech.TESLA_SINGLE_OVERDRIVE_LOSS;//Default is 0.010F - private float energyEfficiency = map(mTier + 1, minTier + 1, maxTier + 1, minEfficiency, maxEfficiency); - private float overdriveEfficiency = energyEfficiency - overdriveEfficiencyExtra; + private final long outputVoltage = V[mTier]; private boolean overdriveToggle = false; private String clientLocale = "en_US"; @@ -220,12 +215,18 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB sparkList.add(new ThaumSpark(x, y, z, xR, yR, zR, wID)); } - private long getEnergyEfficiency(long voltage, int distance, boolean overDriveToggle) { + private long[] getOutputVoltage(long outputVoltage, int distance, boolean overDriveToggle) { + long outputVoltageInjectable; + long outputVoltageConsumption; + if (overDriveToggle) { - return (long) ((voltage * 2) - (voltage * Math.pow(overdriveEfficiency, distance))); + outputVoltageInjectable = outputVoltage; + outputVoltageConsumption = outputVoltage + (distance * perBlockLoss) + (long) Math.round(overDriveLoss * outputVoltage); } else { - return (long) (voltage * Math.pow(energyEfficiency, distance)); + outputVoltageInjectable = outputVoltage - (distance * perBlockLoss); + outputVoltageConsumption = outputVoltage; } + return new long[]{outputVoltageInjectable, outputVoltageConsumption}; } @Override @@ -251,8 +252,10 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB if (powerPassToggle) { float rangeFrac = (float) ((-0.5 * Math.pow(energyFrac, 2)) + (1.5 * energyFrac)); long outputCurrent = mBatteryCount; - transferRadiusTower = (int) (transferRadius * rangeFrac); - transferRadiusCover = (int) (transferRadiusTower / 1.25); + //Radius for transceiver to tower transfers + int transferRadiusTower = (int) (transferRadius * rangeFrac); + //Radius for transceiver to cover transfers + int transferRadiusCover = (int) (transferRadiusTower / 1.25); //Clean the eTeslaMap for (Map.Entry Rx : eTeslaMap.entrySet()) { @@ -282,15 +285,10 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB IGregTechTileEntity node = Rx.getKey(); IMetaTileEntity nodeInside = node.getMetaTileEntity(); - long outputVoltageInjectable; - long outputVoltageConsumption; - if (overdriveToggle) { - outputVoltageInjectable = outputVoltage; - outputVoltageConsumption = getEnergyEfficiency(outputVoltage, Rx.getValue(), true); - } else { - outputVoltageInjectable = getEnergyEfficiency(outputVoltage, Rx.getValue(), false); - outputVoltageConsumption = outputVoltage; - } + long[] outputVoltageNow = getOutputVoltage(outputVoltage, Rx.getValue(), overdriveToggle); + long outputVoltageInjectable = outputVoltageNow[0]; + long outputVoltageConsumption = outputVoltageNow[1]; + if (nodeInside instanceof GT_MetaTileEntity_TM_teslaCoil && Rx.getValue() <= transferRadiusTower) { GT_MetaTileEntity_TM_teslaCoil nodeTesla = (GT_MetaTileEntity_TM_teslaCoil) nodeInside; if (!nodeTesla.ePowerPass) { -- cgit From d44e0b0c61384ca1a63f0dc322715d8a4e57678a Mon Sep 17 00:00:00 2001 From: Tec Date: Sat, 18 Jul 2020 13:01:44 +0200 Subject: Rework API --- .../definitions/dComplexAspectDefinition.java | 11 +- .../definitions/ePrimalAspectDefinition.java | 16 +- .../elementalMatter/core/cElementalDecay.java | 27 +-- .../core/cElementalDefinitionStackMap.java | 2 +- .../core/cElementalInstanceStackMap.java | 30 +-- .../core/cElementalMutableDefinitionStackMap.java | 5 +- .../elementalMatter/core/cElementalStackMap.java | 1 + .../elementalMatter/core/commands/GiveEM.java | 4 +- .../core/stacks/cElementalDefinitionStack.java | 23 ++- .../core/stacks/cElementalInstanceStack.java | 226 +++++++++++---------- .../core/stacks/iHasElementalDefinition.java | 6 +- .../core/templates/cElementalDefinition.java | 7 +- .../core/templates/cElementalPrimitive.java | 16 +- .../core/templates/iElementalDefinition.java | 18 +- .../definitions/complex/dAtomDefinition.java | 151 +++++++------- .../definitions/complex/dHadronDefinition.java | 68 ++++--- .../definitions/complex/iaeaNuclide.java | 75 ++++--- .../primitive/cPrimitiveDefinition.java | 12 +- .../definitions/primitive/eBosonDefinition.java | 14 +- .../definitions/primitive/eLeptonDefinition.java | 24 +-- .../definitions/primitive/eNeutrinoDefinition.java | 28 +-- .../definitions/primitive/eQuarkDefinition.java | 78 +++---- .../multi/GT_MetaTileEntity_EM_collider.java | 76 +++++-- .../github/technus/tectech/util/DoubleCount.java | 113 +++++++++++ 24 files changed, 611 insertions(+), 420 deletions(-) create mode 100644 src/main/java/com/github/technus/tectech/util/DoubleCount.java diff --git a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/elementalMatter/definitions/dComplexAspectDefinition.java b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/elementalMatter/definitions/dComplexAspectDefinition.java index 070a05d7e9..ddef29b214 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/elementalMatter/definitions/dComplexAspectDefinition.java +++ b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/elementalMatter/definitions/dComplexAspectDefinition.java @@ -26,7 +26,7 @@ import static net.minecraft.util.StatCollector.translateToLocal; */ public final class dComplexAspectDefinition extends cElementalDefinition implements iElementalAspect { private final int hash; - public final float mass; + public final double mass; private static final byte nbtType = (byte) 'c'; @@ -74,6 +74,9 @@ public final class dComplexAspectDefinition extends cElementalDefinition impleme if (!(aspects.definition instanceof dComplexAspectDefinition) && !(aspects.definition instanceof ePrimalAspectDefinition)) { return false; } + if((int)aspects.amount!=aspects.amount){ + throw new ArithmeticException("Amount cannot be safely converted to int!"); + } amount += aspects.amount; } return amount == 2; @@ -160,7 +163,7 @@ public final class dComplexAspectDefinition extends cElementalDefinition impleme } @Override - public float getRawTimeSpan(long currentEnergy) { + public double getRawTimeSpan(long currentEnergy) { return -1; } @@ -195,7 +198,7 @@ public final class dComplexAspectDefinition extends cElementalDefinition impleme } @Override - public float getEnergyDiffBetweenStates(long currentEnergyLevel, long newEnergyLevel) { + public double getEnergyDiffBetweenStates(long currentEnergyLevel, long newEnergyLevel) { return iElementalDefinition.DEFAULT_ENERGY_REQUIREMENT * (newEnergyLevel - currentEnergyLevel); } @@ -230,7 +233,7 @@ public final class dComplexAspectDefinition extends cElementalDefinition impleme } @Override - public float getMass() { + public double getMass() { return mass; } diff --git a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/elementalMatter/definitions/ePrimalAspectDefinition.java b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/elementalMatter/definitions/ePrimalAspectDefinition.java index bcb6e3f6fc..02e7d2fe21 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/elementalMatter/definitions/ePrimalAspectDefinition.java +++ b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/elementalMatter/definitions/ePrimalAspectDefinition.java @@ -10,14 +10,14 @@ import static net.minecraft.util.StatCollector.translateToLocal; */ public final class ePrimalAspectDefinition extends cElementalPrimitive implements iElementalAspect { public static final ePrimalAspectDefinition - magic_air = new ePrimalAspectDefinition(translateToLocal("tt.keyword.Air"), "a`", 1e1F, 35), - magic_earth = new ePrimalAspectDefinition(translateToLocal("tt.keyword.Earth"), "e`", 1e9F, 34), - magic_fire = new ePrimalAspectDefinition(translateToLocal("tt.keyword.Fire"), "f`", 1e3F, 33), - magic_water = new ePrimalAspectDefinition(translateToLocal("tt.keyword.Water"), "w`", 1e7F, 32), - magic_order = new ePrimalAspectDefinition(translateToLocal("tt.keyword.Order"), "o`", 1e5F, 30), - magic_entropy = new ePrimalAspectDefinition(translateToLocal("tt.keyword.Entropy"), "e`", 1e5F, 31); - - private ePrimalAspectDefinition(String name, String symbol, float mass, int ID) { + magic_air = new ePrimalAspectDefinition(translateToLocal("tt.keyword.Air"), "a`", 1e1D, 35), + magic_earth = new ePrimalAspectDefinition(translateToLocal("tt.keyword.Earth"), "e`", 1e9D, 34), + magic_fire = new ePrimalAspectDefinition(translateToLocal("tt.keyword.Fire"), "f`", 1e3D, 33), + magic_water = new ePrimalAspectDefinition(translateToLocal("tt.keyword.Water"), "w`", 1e7D, 32), + magic_order = new ePrimalAspectDefinition(translateToLocal("tt.keyword.Order"), "o`", 1e5D, 30), + magic_entropy = new ePrimalAspectDefinition(translateToLocal("tt.keyword.Entropy"), "e`", 1e5D, 31); + + private ePrimalAspectDefinition(String name, String symbol, double mass, int ID) { super(name, symbol, 0, mass, 0, -1, ID); } diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalDecay.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalDecay.java index 7d5e079876..3472f15cec 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalDecay.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalDecay.java @@ -3,6 +3,7 @@ package com.github.technus.tectech.mechanics.elementalMatter.core; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalDefinitionStack; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; import com.github.technus.tectech.mechanics.elementalMatter.core.templates.iElementalDefinition; +import com.github.technus.tectech.util.DoubleCount; /** * Created by danie_000 on 22.10.2016. @@ -15,50 +16,50 @@ public final class cElementalDecay { public static final cElementalDecay[] noProduct = new cElementalDecay[0]; //this in turn can be used to tell that the thing should just vanish public final cElementalDefinitionStackMap outputStacks; - public final float probability; + public final double probability; public cElementalDecay(iElementalDefinition... outSafe) { - this(2F, outSafe); + this(2D, outSafe); } - public cElementalDecay(float probability, iElementalDefinition... outSafe) { + public cElementalDecay(double probability, iElementalDefinition... outSafe) { cElementalDefinitionStack[] outArr = new cElementalDefinitionStack[outSafe.length]; for (int i = 0; i < outArr.length; i++) { - outArr[i] = new cElementalDefinitionStack(outSafe[i], 1); + outArr[i] = new cElementalDefinitionStack(outSafe[i], 1D); } outputStacks = new cElementalDefinitionStackMap(outArr); this.probability = probability; } public cElementalDecay(cElementalDefinitionStack... outSafe) { - this(2F, outSafe); + this(2D, outSafe); } - public cElementalDecay(float probability, cElementalDefinitionStack... out) { + public cElementalDecay(double probability, cElementalDefinitionStack... out) { outputStacks = new cElementalDefinitionStackMap(out); this.probability = probability; } public cElementalDecay(cElementalDefinitionStackMap tree) { - this(2F, tree); + this(2D, tree); } - public cElementalDecay(float probability, cElementalDefinitionStackMap tree) { + public cElementalDecay(double probability, cElementalDefinitionStackMap tree) { outputStacks = tree; this.probability = probability; } - public cElementalInstanceStackMap getResults(float lifeMult, long age, long energyTotalForProducts, long amountDecaying) { + public cElementalInstanceStackMap getResults(double lifeMult, double age, long energyTotalForProducts, double amountDecaying) { cElementalInstanceStackMap decayResult = new cElementalInstanceStackMap(); if (outputStacks == null) { return decayResult;//This is to prevent null pointer exceptions. } //Deny decay code is in instance! - long qtty = 0; + double qtty = 0D; for (cElementalDefinitionStack stack : outputStacks.values()) { - qtty += stack.amount; + qtty= DoubleCount.add(qtty,stack.amount); } - if (qtty <= 0) { + if (qtty <= 0D) { return decayResult; } //energyTotalForProducts /= qtty; @@ -66,7 +67,7 @@ public final class cElementalDecay { for (cElementalDefinitionStack stack : outputStacks.values()) { decayResult.putUnify(new cElementalInstanceStack(stack.definition, amountDecaying * stack.amount, - lifeMult, age/*new products*/, energyTotalForProducts / Math.max(1, Math.abs(stack.amount))));//get instances from stack + lifeMult, age/*new products*/, (long)(energyTotalForProducts / Math.max(1D, Math.abs(stack.amount)))));//get instances from stack } return decayResult; } diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalDefinitionStackMap.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalDefinitionStackMap.java index 294acfc479..ce0840bc8b 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalDefinitionStackMap.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalDefinitionStackMap.java @@ -13,7 +13,7 @@ import static com.github.technus.tectech.mechanics.elementalMatter.definitions.p */ public final class cElementalDefinitionStackMap/*IMMUTABLE*/ extends cElementalStackMap {//Target class for construction of definitions/recipes //Constructors + Clone, all make a whole new OBJ. - public static final cElementalDefinitionStackMap empty = new cElementalDefinitionStackMap(); + public static final cElementalDefinitionStackMap EMPTY = new cElementalDefinitionStackMap(); private cElementalDefinitionStackMap() { map = new TreeMap<>(); diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalInstanceStackMap.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalInstanceStackMap.java index 5893ac1a1f..9544d8d7e5 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalInstanceStackMap.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalInstanceStackMap.java @@ -4,6 +4,7 @@ import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElement import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.iHasElementalDefinition; import com.github.technus.tectech.mechanics.elementalMatter.core.templates.iElementalDefinition; +import com.github.technus.tectech.util.DoubleCount; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; @@ -131,7 +132,7 @@ public final class cElementalInstanceStackMap implements Comparable= instance.amount; } else { - long diff = target.amount - instance.amount; + double diff = DoubleCount.sub(target.amount,instance.amount); if (diff > 0) { target.amount = diff; return true; @@ -151,7 +152,7 @@ public final class cElementalInstanceStackMap implements Comparable= stack.getAmount(); } else { - long diff = target.amount - stack.getAmount(); + double diff = DoubleCount.sub(target.amount,stack.getAmount()); if (diff > 0) { target.amount = diff; return true; @@ -165,7 +166,7 @@ public final class cElementalInstanceStackMap implements Comparable stacksCount) { iElementalDefinition[] keys = keys(); @@ -364,24 +365,25 @@ public final class cElementalInstanceStackMap implements Comparable= instance.amount; } else { - long diff = target.amount - instance.amount; + double diff = DoubleCount.sub(target.amount,instance.amount); if (diff > 0) { map.put(target.definition, new cElementalDefinitionStack(target.definition, diff)); return true; @@ -120,7 +121,7 @@ public final class cElementalMutableDefinitionStackMap extends cElementalStackMa if (testOnly) { return target.amount >= stack.getAmount(); } else { - long diff = target.amount - stack.getAmount(); + double diff = DoubleCount.sub(target.amount,stack.getAmount()); if (diff > 0) { map.put(target.definition, new cElementalDefinitionStack(target.definition, diff)); return true; diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalStackMap.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalStackMap.java index dbbfa7bf66..3e5a7f7b33 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalStackMap.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalStackMap.java @@ -65,6 +65,7 @@ abstract class cElementalStackMap implements Comparable { return var.toArray(new iElementalDefinition[0]); } + @Deprecated public long getCountOfAllAmounts(){ long sum=0; for(cElementalDefinitionStack stack:map.values()){ diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/commands/GiveEM.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/commands/GiveEM.java index de1934fed7..912d44ff43 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/commands/GiveEM.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/commands/GiveEM.java @@ -50,7 +50,7 @@ public class GiveEM implements ICommand { cElementalDefinitionStack def= getDefinitionStack(list); if(def!=null) { - cElementalInstanceStack instanceStack = new cElementalInstanceStack(def, 1, 0, Long.parseLong(energy)); + cElementalInstanceStack instanceStack = new cElementalInstanceStack(def, 1D, 0D, Long.parseLong(energy)); sender.addChatMessage(new ChatComponentText(instanceStack.definition.getSymbol() + " - " + instanceStack.definition.getName())); @@ -73,7 +73,7 @@ public class GiveEM implements ICommand { args.remove(0); return null; } - long amount=Long.parseLong(args.remove(0)); + double amount=Double.parseDouble(args.remove(0)); try{ int id=Integer.parseInt(args.get(0)); args.remove(0); diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/stacks/cElementalDefinitionStack.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/stacks/cElementalDefinitionStack.java index 6b6fe35b41..2371b1b986 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/stacks/cElementalDefinitionStack.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/stacks/cElementalDefinitionStack.java @@ -2,6 +2,7 @@ package com.github.technus.tectech.mechanics.elementalMatter.core.stacks; import com.github.technus.tectech.mechanics.elementalMatter.core.templates.cElementalDefinition; import com.github.technus.tectech.mechanics.elementalMatter.core.templates.iElementalDefinition; +import com.github.technus.tectech.util.DoubleCount; import net.minecraft.nbt.NBTTagCompound; import static com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.cPrimitiveDefinition.null__; @@ -11,9 +12,9 @@ import static com.github.technus.tectech.mechanics.elementalMatter.definitions.p */ public final class cElementalDefinitionStack implements iHasElementalDefinition { public final iElementalDefinition definition; - public final long amount; + public final double amount; - public cElementalDefinitionStack(iElementalDefinition def, long amount) { + public cElementalDefinitionStack(iElementalDefinition def, double amount) { definition = def == null ? null__ : def; this.amount = amount; } @@ -29,47 +30,47 @@ public final class cElementalDefinitionStack implements iHasElementalDefinition } @Override - public long getAmount() { + public double getAmount() { return amount; } @Override - public long getCharge() { + public double getCharge() { return definition.getCharge() * amount; } @Override - public float getMass() { + public double getMass() { return definition.getMass() * amount; } public NBTTagCompound toNBT() { NBTTagCompound nbt = new NBTTagCompound(); nbt.setTag("d", definition.toNBT()); - nbt.setLong("q", amount); + nbt.setDouble("Q", amount); return nbt; } public static cElementalDefinitionStack fromNBT(NBTTagCompound nbt) { return new cElementalDefinitionStack( cElementalDefinition.fromNBT(nbt.getCompoundTag("d")), - nbt.getLong("q")); + nbt.getLong("q")+nbt.getDouble("Q")); } - public cElementalDefinitionStack addAmountIntoNewInstance(long amount) { + public cElementalDefinitionStack addAmountIntoNewInstance(double amount) { if(amount==0) { return this; } - return new cElementalDefinitionStack(definition, amount + this.amount); + return new cElementalDefinitionStack(definition, DoubleCount.add(amount,this.amount)); } public cElementalDefinitionStack addAmountIntoNewInstance(cElementalDefinitionStack... other) { if (other == null || other.length == 0) { return this; } - long l = 0; + double l = 0; for (cElementalDefinitionStack stack : other) { - l += stack.amount; + l=DoubleCount.add(l,stack.amount); } return addAmountIntoNewInstance(l); } diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/stacks/cElementalInstanceStack.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/stacks/cElementalInstanceStack.java index c108d8c8ae..fb4f0fed33 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/stacks/cElementalInstanceStack.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/stacks/cElementalInstanceStack.java @@ -1,12 +1,13 @@ package com.github.technus.tectech.mechanics.elementalMatter.core.stacks; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.util.Util; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalDecay; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalDefinitionStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.templates.cElementalDefinition; import com.github.technus.tectech.mechanics.elementalMatter.core.templates.iElementalDefinition; +import com.github.technus.tectech.util.DoubleCount; +import com.github.technus.tectech.util.Util; import net.minecraft.nbt.NBTTagCompound; import java.util.ArrayList; @@ -14,36 +15,37 @@ import java.util.ArrayList; import static com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.cPrimitiveDefinition.null__; import static com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.eBosonDefinition.deadEnd; import static com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_scanner.*; +import static java.lang.Math.ulp; /** * Created by danie_000 on 22.10.2016. */ public final class cElementalInstanceStack implements iHasElementalDefinition { - public static int MIN_MULTIPLE_DECAY_CALLS=4,MAX_MULTIPLE_DECAY_CALLS=16,DECAY_CALL_PER=144; + public static int MIN_MULTIPLE_DECAY_CALLS=16,MAX_MULTIPLE_DECAY_CALLS=64,DECAY_CALL_PER=144;//todo public final iElementalDefinition definition; //energy - if positive then particle should try to decay private long energy; //byte color; 0=Red 1=Green 2=Blue 0=Cyan 1=Magenta 2=Yellow, else ignored (-1 - uncolorable) private byte color; - public long age; - public long amount; - private float lifeTime; - private float lifeTimeMult; + public double age; + public double amount; + private double lifeTime; + private double lifeTimeMult; public cElementalInstanceStack(cElementalDefinitionStack stackSafe) { - this(stackSafe.definition, stackSafe.amount, 1F, 0, 0); + this(stackSafe.definition, stackSafe.amount, 1D, 0D, 0); } - public cElementalInstanceStack(cElementalDefinitionStack stackSafe, float lifeTimeMult, long age, long energy) { + public cElementalInstanceStack(cElementalDefinitionStack stackSafe, double lifeTimeMult, double age, long energy) { this(stackSafe.definition, stackSafe.amount, lifeTimeMult, age, energy); } - public cElementalInstanceStack(iElementalDefinition defSafe, long amount) { - this(defSafe, amount, 1F, 0, 0); + public cElementalInstanceStack(iElementalDefinition defSafe, double amount) { + this(defSafe, amount, 1D, 0D, 0); } - public cElementalInstanceStack(iElementalDefinition defSafe, long amount, float lifeTimeMult, long age, long energy) { + public cElementalInstanceStack(iElementalDefinition defSafe, double amount, double lifeTimeMult, double age, long energy) { definition = defSafe == null ? null__ : defSafe; byte bColor = definition.getColor(); if (bColor < 0 || bColor > 2) {//transforms colorable??? into proper color @@ -75,17 +77,17 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { } @Override - public long getAmount() { + public double getAmount() { return amount; } @Override - public long getCharge() { + public double getCharge() { return definition.getCharge() * amount; } @Override - public float getMass() { + public double getMass() { return definition.getMass() * amount; } @@ -98,11 +100,11 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { setLifeTimeMultiplier(getLifeTimeMultiplier()); } - public float getEnergySettingCost(long currentEnergyLevel, long newEnergyLevel){ + public double getEnergySettingCost(long currentEnergyLevel, long newEnergyLevel){ return definition.getEnergyDiffBetweenStates(currentEnergyLevel,newEnergyLevel)*amount; } - public float getEnergySettingCost(long newEnergyLevel){ + public double getEnergySettingCost(long newEnergyLevel){ return definition.getEnergyDiffBetweenStates(energy,newEnergyLevel)*amount; } @@ -133,11 +135,11 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { return color = (byte) TecTech.RANDOM.nextInt(3); } - public float getLifeTime() { + public double getLifeTime() { return lifeTime; } - public float setLifeTimeMultiplier(float mult) { + public double setLifeTimeMultiplier(double mult) { if(mult<=0) //since infinity*0=nan { throw new IllegalArgumentException("multiplier must be >0"); @@ -150,15 +152,15 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { return lifeTime; } - public float getLifeTimeMultiplier() { + public double getLifeTimeMultiplier() { return lifeTimeMult; } - public cElementalInstanceStackMap tickStackByOneSecond(float lifeTimeMult, int postEnergize){ - return tickStack(lifeTimeMult,postEnergize,1); + public cElementalInstanceStackMap tickStackByOneSecond(double lifeTimeMult, int postEnergize){ + return tickStack(lifeTimeMult,postEnergize,1D); } - public cElementalInstanceStackMap tickStack(float lifeTimeMult, int postEnergize, int seconds){ + public cElementalInstanceStackMap tickStack(double lifeTimeMult, int postEnergize, double seconds){ cElementalInstanceStackMap newInstances = decay(lifeTimeMult, age += seconds, postEnergize); if (newInstances == null) { nextColor(); @@ -171,14 +173,14 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { } public cElementalInstanceStackMap decay() { - return decay(1F, age, 0);//try to decay without changes + return decay(1D, age, 0);//try to decay without changes } - public cElementalInstanceStackMap decay(long apparentAge, long postEnergize) { - return decay(1F,apparentAge,postEnergize); + public cElementalInstanceStackMap decay(double apparentAge, long postEnergize) { + return decay(1D,apparentAge,postEnergize); } - public cElementalInstanceStackMap decay(float lifeTimeMult, long apparentAge, long postEnergize) { + public cElementalInstanceStackMap decay(double lifeTimeMult, double apparentAge, long postEnergize) { long newEnergyLevel = postEnergize + energy; if (newEnergyLevel > 0) { newEnergyLevel -= 1; @@ -186,10 +188,10 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { newEnergyLevel += 1; } if(definition.usesMultipleDecayCalls(energy)){ - long amountTemp=amount; - long decayCnt=Math.min(Math.max(amount/DECAY_CALL_PER,MIN_MULTIPLE_DECAY_CALLS),MAX_MULTIPLE_DECAY_CALLS); - long amountPer=amount/decayCnt; - amount-=amountPer*(--decayCnt); + double amountTemp=amount; + long decayCnt=(long) Math.min(Math.max(amount/DECAY_CALL_PER,MIN_MULTIPLE_DECAY_CALLS),MAX_MULTIPLE_DECAY_CALLS); + double amountPer= DoubleCount.div(amount,decayCnt); + amount=DoubleCount.sub(amount,amountPer*(--decayCnt)); cElementalInstanceStackMap output=decayMechanics(lifeTimeMult,apparentAge,newEnergyLevel); if(output==null){ amount=amountTemp; @@ -211,29 +213,28 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { } } - private cElementalInstanceStackMap decayMechanics(float lifeTimeMult, long apparentAge, long newEnergyLevel) { + private cElementalInstanceStackMap decayMechanics(double lifeTimeMult, double apparentAge, long newEnergyLevel) { if (energy > 0 && !definition.usesSpecialEnergeticDecayHandling()) { setLifeTimeMultiplier(getLifeTimeMultiplier()); - return decayCompute(definition.getEnergyInducedDecay(energy), lifeTimeMult, -1, newEnergyLevel); + return decayCompute(definition.getEnergyInducedDecay(energy), lifeTimeMult, -1D, newEnergyLevel); } else if (definition.getRawTimeSpan(energy) < 0) { return null;//return null, decay cannot be achieved } else if (definition.isTimeSpanHalfLife()) { - return exponentialDecayCompute(energy > 0 ? definition.getEnergyInducedDecay(energy) : definition.getDecayArray(), lifeTimeMult, -1, newEnergyLevel); + return exponentialDecayCompute(energy > 0 ? definition.getEnergyInducedDecay(energy) : definition.getDecayArray(), lifeTimeMult, -1D, newEnergyLevel); } else { - if (1F > lifeTime) { - return decayCompute(energy > 0 ? definition.getEnergyInducedDecay(energy) : definition.getNaturalDecayInstant(), lifeTimeMult, 0, newEnergyLevel); - } else if ((float) apparentAge > lifeTime) { - return decayCompute(energy > 0 ? definition.getEnergyInducedDecay(energy) : definition.getDecayArray(), lifeTimeMult, 0, newEnergyLevel); + if (1 > lifeTime) { + return decayCompute(energy > 0 ? definition.getEnergyInducedDecay(energy) : definition.getNaturalDecayInstant(), lifeTimeMult, 0D, newEnergyLevel); + } else if (apparentAge > lifeTime) { + return decayCompute(energy > 0 ? definition.getEnergyInducedDecay(energy) : definition.getDecayArray(), lifeTimeMult, 0D, newEnergyLevel); } } return null;//return null since decay cannot be achieved } //Use to get direct decay output providing correct decay array - private cElementalInstanceStackMap exponentialDecayCompute(cElementalDecay[] decays, float lifeTimeMult, long newProductsAge, long newEnergyLevel) { - double decayInverseRatio=Math.pow(2d,1d/* 1 second *//(double)lifeTime); - double newAmount=(double)amount/decayInverseRatio; - long amountRemaining= (long)Math.floor(newAmount) +(TecTech.RANDOM.nextDouble()<=newAmount-Math.floor(newAmount)?1:0); + private cElementalInstanceStackMap exponentialDecayCompute(cElementalDecay[] decays, double lifeTimeMult, double newProductsAge, long newEnergyLevel) { + double decayInverseRatio=Math.pow(2D,1D/* 1 second *//lifeTime); + double newAmount=DoubleCount.div(amount,decayInverseRatio+ulp(decayInverseRatio)); //if(definition.getSymbol().startsWith("U ")) { // System.out.println("newAmount = " + newAmount); // System.out.println("amountRemaining = " + amountRemaining); @@ -244,23 +245,24 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { // } // } //} - if(amountRemaining==amount) { - return null;//nothing decayed - } else if(amountRemaining<=0) { - return decayCompute(decays, lifeTimeMult, newProductsAge, newEnergyLevel); - } + //if(newAmount==amount) {//no longer needed + // return null;//nothing decayed + //} else if(newAmount<=0) {//no longer needed + // return decayCompute(decays, lifeTimeMult, newProductsAge, newEnergyLevel); + //}//no longer needed + //split to non decaying and decaying part - long amount=this.amount; - this.amount-=amountRemaining; + double amount=this.amount; + this.amount=DoubleCount.sub(this.amount,newAmount); cElementalInstanceStackMap products=decayCompute(decays,lifeTimeMult,newProductsAge,newEnergyLevel); - this.amount=amountRemaining; + this.amount=newAmount; products.putUnify(clone()); this.amount=amount; return products; } //Use to get direct decay output providing correct decay array - private cElementalInstanceStackMap decayCompute(cElementalDecay[] decays, float lifeTimeMult, long newProductsAge, long newEnergyLevel) { + private cElementalInstanceStackMap decayCompute(cElementalDecay[] decays, double lifeTimeMult, double newProductsAge, long newEnergyLevel) { if (decays == null) { return null;//Can not decay so it wont } @@ -299,51 +301,55 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { } else { cElementalInstanceStackMap output = new cElementalInstanceStackMap(); int differentDecays = decays.length; - long[] qttyOfDecay = new long[differentDecays]; - long amountRemaining = this.amount, amount = this.amount; - float remainingProbability = 1F; - - for (int i = 0; i < differentDecays; i++) { - if (decays[i].probability >= 1F) { - long thisDecayAmount = (long) Math.floor(remainingProbability * (double) amount); - if (thisDecayAmount > 0) { - if (thisDecayAmount <= amountRemaining) { - amountRemaining -= thisDecayAmount; - qttyOfDecay[i] += thisDecayAmount; - }else {//in case too much was made - qttyOfDecay[i] += amountRemaining; - amountRemaining = 0; - //remainingProbability=0; - } - } - break; - } - long thisDecayAmount = (long) Math.floor(decays[i].probability * (double) amount); - if (thisDecayAmount <= amountRemaining && thisDecayAmount > 0) {//some was made - amountRemaining -= thisDecayAmount; - qttyOfDecay[i] += thisDecayAmount; - } else if (thisDecayAmount > amountRemaining) {//too much was made - qttyOfDecay[i] += amountRemaining; - amountRemaining = 0; - //remainingProbability=0; - break; - } - remainingProbability -= decays[i].probability; - if(remainingProbability<=0) { - break; - } - } - - for (int i = 0; i < amountRemaining; i++) { - double rand = TecTech.RANDOM.nextDouble(); - for (int j = 0; j < differentDecays; j++) {//looking for the thing it decayed into - rand -= decays[j].probability; - if (rand <= 0D) { - qttyOfDecay[j]++; - break; - } - } + double[] probabilities=new double[differentDecays]; + for (int i = 0; i < probabilities.length; i++) { + probabilities[i]=decays[i].probability; } + double[] qttyOfDecay = DoubleCount.distribute(this.amount, probabilities); + //long amountRemaining = this.amount, amount = this.amount; + //float remainingProbability = 1D; +// + //for (int i = 0; i < differentDecays; i++) { + // if (decays[i].probability >= 1D) { + // long thisDecayAmount = (long) Math.floor(remainingProbability * (double) amount); + // if (thisDecayAmount > 0) { + // if (thisDecayAmount <= amountRemaining) { + // amountRemaining -= thisDecayAmount; + // qttyOfDecay[i] += thisDecayAmount; + // }else {//in case too much was made + // qttyOfDecay[i] += amountRemaining; + // amountRemaining = 0; + // //remainingProbability=0; + // } + // } + // break; + // } + // long thisDecayAmount = (long) Math.floor(decays[i].probability * (double) amount); + // if (thisDecayAmount <= amountRemaining && thisDecayAmount > 0) {//some was made + // amountRemaining -= thisDecayAmount; + // qttyOfDecay[i] += thisDecayAmount; + // } else if (thisDecayAmount > amountRemaining) {//too much was made + // qttyOfDecay[i] += amountRemaining; + // amountRemaining = 0; + // //remainingProbability=0; + // break; + // } + // remainingProbability -= decays[i].probability; + // if(remainingProbability<=0) { + // break; + // } + //} + + //for (int i = 0; i < amountRemaining; i++) { + // double rand = TecTech.RANDOM.nextDouble(); + // for (int j = 0; j < differentDecays; j++) {//looking for the thing it decayed into + // rand -= decays[j].probability; + // if (rand <= 0D) { + // qttyOfDecay[j]++; + // break; + // } + // } + //} if(definition.decayMakesEnergy(this.energy)){ for (int i = 0; i < differentDecays; i++) { @@ -394,14 +400,14 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { return this; } //returns with the definition from the first object passed - double energy = this.energy * amount; + double energyTotal = this.energy * amount; long maxEnergy=this.energy; - float lifeTimeMul = lifeTimeMult; + double lifeTimeMul = lifeTimeMult; for (cElementalInstanceStack instance : instances) { if (instance != null && compareTo(instance) == 0) { - amount += instance.amount; - energy += instance.energy * instance.amount; + amount=DoubleCount.add(amount,instance.amount); + energyTotal += instance.energy * instance.amount; if(instance.energy>maxEnergy){ maxEnergy=instance.energy; } @@ -411,12 +417,16 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { } if (amount != 0) { - energy /= Math.abs(amount); + energyTotal /= Math.abs(amount); } - double wholeParts=Math.floor(energy); - energy=Math.min(energy-wholeParts,1)+(wholeParts>=0?-0.11709966304863834:0.11709966304863834); - setEnergy(Math.min(maxEnergy,(long)wholeParts+(energy>TecTech.RANDOM.nextDouble()?1:0))); + double wholeParts=Math.floor(energyTotal); + energyTotal=Math.min(energyTotal-wholeParts,1D)+(wholeParts>=0?-0.11709966304863834D:0.11709966304863834D); + long energy=(long) wholeParts + ((energyTotal > TecTech.RANDOM.nextDouble()) ? 1 : 0); + if(energy*energyTotal<0){ + energy=0; + } + setEnergy(Math.min(maxEnergy,energy)); return this; } @@ -483,11 +493,11 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { public NBTTagCompound toNBT() { NBTTagCompound nbt = new NBTTagCompound(); nbt.setTag("d", definition.toNBT()); - nbt.setLong("q", amount); + nbt.setDouble("Q", amount); nbt.setLong("e", energy); nbt.setByte("c", color); - nbt.setLong("a", age); - nbt.setFloat("m", lifeTimeMult); + nbt.setDouble("A", age); + nbt.setDouble("M", lifeTimeMult); return nbt; } @@ -495,9 +505,9 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { NBTTagCompound definition = nbt.getCompoundTag("d"); cElementalInstanceStack instance = new cElementalInstanceStack( cElementalDefinition.fromNBT(definition), - nbt.getLong("q"), - nbt.getFloat("m"), - nbt.getLong("a"), + nbt.getLong("q")+nbt.getDouble("Q"), + nbt.getFloat("m")+nbt.getDouble("M"), + nbt.getLong("a")+nbt.getDouble("A"), nbt.getLong("e")); instance.setColor(nbt.getByte("c")); return instance; diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/stacks/iHasElementalDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/stacks/iHasElementalDefinition.java index 480707d570..1d8af7bab7 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/stacks/iHasElementalDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/stacks/iHasElementalDefinition.java @@ -8,11 +8,11 @@ import com.github.technus.tectech.mechanics.elementalMatter.core.templates.iElem public interface iHasElementalDefinition extends Comparable,Cloneable { iElementalDefinition getDefinition(); - long getAmount(); + double getAmount(); - long getCharge(); + double getCharge(); - float getMass(); + double getMass(); iHasElementalDefinition clone(); } diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/templates/cElementalDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/templates/cElementalDefinition.java index de8ccb7b2b..0061550ace 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/templates/cElementalDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/templates/cElementalDefinition.java @@ -100,8 +100,8 @@ public abstract class cElementalDefinition extends iElementalDefinition { } @Override - public final cElementalDefinitionStack getStackForm(long i) { - return new cElementalDefinitionStack(this,i); + public final cElementalDefinitionStack getStackForm(double amount) { + return new cElementalDefinitionStack(this, amount); } @Override @@ -122,7 +122,8 @@ public abstract class cElementalDefinition extends iElementalDefinition { public int hashCode() {//Internal amounts should be also hashed int hash = -(getSubParticles().size() << 4); for (cElementalDefinitionStack stack : getSubParticles().values()) { - hash += ((stack.amount & 0x1) == 0 ? -stack.amount : stack.amount) + stack.definition.hashCode(); + int amount=(int)stack.amount; + hash += ((amount & 0x1) == 0 ? -amount : amount) + stack.definition.hashCode(); } return hash; } diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/templates/cElementalPrimitive.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/templates/cElementalPrimitive.java index 701682cdaa..65446548e6 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/templates/cElementalPrimitive.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/templates/cElementalPrimitive.java @@ -37,7 +37,7 @@ public abstract class cElementalPrimitive extends cElementalDefinition { public final String name; public final String symbol; //float-mass in eV/c^2 - public final float mass; + public final double mass; //int -electric charge in 1/3rds of electron charge for optimization public final byte charge; //byte color; 0=Red 1=Green 2=Blue 0=Cyan 1=Magenta 2=Yellow, else ignored (-1 - uncolorable) @@ -49,7 +49,7 @@ public abstract class cElementalPrimitive extends cElementalDefinition { private cElementalDecay[] elementalDecays; private byte naturalDecayInstant; private byte energeticDecayInstant; - private float rawLifeTime; + private double rawLifeTime; public final int ID; @@ -57,7 +57,7 @@ public abstract class cElementalPrimitive extends cElementalDefinition { // _ at end - anti particle // __ at end - self is antiparticle - protected cElementalPrimitive(String name, String symbol, int type, float mass, int charge, int color, int ID) { + protected cElementalPrimitive(String name, String symbol, int type, double mass, int charge, int color, int ID) { this.name = name; this.symbol = symbol; this.type = (byte) type; @@ -72,7 +72,7 @@ public abstract class cElementalPrimitive extends cElementalDefinition { } // - protected void init(cElementalPrimitive antiParticle, float rawLifeTime, int naturalInstant, int energeticInstant, cElementalDecay... elementalDecaysArray) { + protected void init(cElementalPrimitive antiParticle, double rawLifeTime, int naturalInstant, int energeticInstant, cElementalDecay... elementalDecaysArray) { anti = antiParticle; this.rawLifeTime = rawLifeTime; naturalDecayInstant = (byte) naturalInstant; @@ -111,7 +111,7 @@ public abstract class cElementalPrimitive extends cElementalDefinition { } @Override - public float getMass() { + public double getMass() { return mass; } @@ -136,7 +136,7 @@ public abstract class cElementalPrimitive extends cElementalDefinition { } @Override - public float getEnergyDiffBetweenStates(long currentEnergyLevel, long newEnergyLevel) { + public double getEnergyDiffBetweenStates(long currentEnergyLevel, long newEnergyLevel) { return iElementalDefinition.DEFAULT_ENERGY_REQUIREMENT *(newEnergyLevel-currentEnergyLevel); } @@ -166,7 +166,7 @@ public abstract class cElementalPrimitive extends cElementalDefinition { } @Override - public float getRawTimeSpan(long currentEnergy) { + public double getRawTimeSpan(long currentEnergy) { return rawLifeTime; } @@ -234,7 +234,7 @@ public abstract class cElementalPrimitive extends cElementalDefinition { lines.add("SYMBOL = "+getSymbol()); } if(areBitsSet(SCAN_GET_CHARGE,capabilities)) { - lines.add("CHARGE = " + getCharge() / 3f + " e"); + lines.add("CHARGE = " + getCharge() / 3D + " e"); } if(areBitsSet(SCAN_GET_COLOR,capabilities)) { lines.add(getColor() < 0 ? "COLORLESS" : "CARRIES COLOR"); diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/templates/iElementalDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/templates/iElementalDefinition.java index 08be835cdf..90ac2eb339 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/templates/iElementalDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/templates/iElementalDefinition.java @@ -14,10 +14,10 @@ import java.util.ArrayList; * Created by danie_000 on 11.11.2016. */ public abstract class iElementalDefinition implements Comparable,Cloneable {//IMMUTABLE - public static final float STABLE_RAW_LIFE_TIME =1.5e36f; - public static final float NO_DECAY_RAW_LIFE_TIME=-1; + public static final double STABLE_RAW_LIFE_TIME =1.5e36D; + public static final double NO_DECAY_RAW_LIFE_TIME=-1D; public static final long DEFAULT_ENERGY_LEVEL=0; - public static final float DEFAULT_ENERGY_REQUIREMENT=25000;//legit cuz normal atoms should only emit a gamma if they don't have defined energy levels + public static final double DEFAULT_ENERGY_REQUIREMENT=25000D;//legit cuz normal atoms should only emit a gamma if they don't have defined energy levels //Nomenclature public abstract String getName(); @@ -43,24 +43,24 @@ public abstract class iElementalDefinition implements Comparable> stableIsotopes = new HashMap<>(); private static final Map stableAtoms = new HashMap<>(); - private static Map> mostStableUnstableIsotopes = new HashMap<>(); + private static Map> mostStableUnstableIsotopes = new HashMap<>(); private static final Map unstableAtoms = new HashMap<>(); private static cElementalDefinitionStack alpha,deuterium,tritium,helium_3,beryllium_8,carbon_14,neon_24,silicon_34; - private static final HashMap lifetimeOverrides = new HashMap<>(); + private static final HashMap lifetimeOverrides = new HashMap<>(); public final iaeaNuclide iaea; @@ -61,17 +61,17 @@ public final class dAtomDefinition extends cElementalDefinition { } private static final ArrayList overrides = new ArrayList<>(); - public static void addOverride(dAtomDefinition atom, float rawLifeTime){ + public static void addOverride(dAtomDefinition atom, double rawLifeTime){ lifetimeOverrides.put(atom,rawLifeTime); } //float-mass in eV/c^2 - public final float mass; + public final double mass; //public final int charge; public final int charge; //int -electric charge in 1/3rds of electron charge for optimization public final int chargeLeptons; - private float rawLifeTime; + private double rawLifeTime; //generation max present inside - minus if contains any anti quark public final byte type; @@ -115,7 +115,7 @@ public final class dAtomDefinition extends cElementalDefinition { } elementalStacks = things; - float mass = 0; + double mass = 0; int cLeptons = 0; int cNucleus = 0; int neutralCount = 0, element = 0; @@ -124,6 +124,9 @@ public final class dAtomDefinition extends cElementalDefinition { for (cElementalDefinitionStack stack : elementalStacks.values()) { iElementalDefinition def = stack.definition; int amount = (int)stack.amount; + if((int)stack.amount!=stack.amount){ + throw new ArithmeticException("Amount cannot be safely converted to int!"); + } mass += stack.getMass(); if (def.getType() < 0) { containsAnti = true; @@ -160,36 +163,36 @@ public final class dAtomDefinition extends cElementalDefinition { xstr.setSeed((element + 1L) * (neutralCount + 100L)); iaea =iaeaNuclide.get(element,neutralCount); if(iaea!=null){ - if(Float.isNaN(iaea.mass)) { + if(Double.isNaN(iaea.mass)) { this.mass = mass; } else { this.mass = iaea.mass; } - if(Float.isNaN(iaea.halfTime)) { - Float overriddenLifeTime= lifetimeOverrides.get(this); - float rawLifeTimeTemp; + if(Double.isNaN(iaea.halfTime)) { + Double overriddenLifeTime= lifetimeOverrides.get(this); + double rawLifeTimeTemp; if(overriddenLifeTime!=null) { rawLifeTimeTemp = overriddenLifeTime; } else { rawLifeTimeTemp = calculateLifeTime(izoDiff, izoDiffAbs, element, neutralCount, containsAnti); } - rawLifeTime =rawLifeTimeTemp> iElementalDefinition.STABLE_RAW_LIFE_TIME ? iElementalDefinition.STABLE_RAW_LIFE_TIME :rawLifeTimeTemp; + rawLifeTime = Math.min(rawLifeTimeTemp, iElementalDefinition.STABLE_RAW_LIFE_TIME); }else { - rawLifeTime = containsAnti ? iaea.halfTime * 1.5514433E-21f * (1f + xstr.nextFloat() * 9f) : iaea.halfTime; + rawLifeTime = containsAnti ? iaea.halfTime * 1.5514433E-21d * (1d + xstr.nextDouble() * 9d) : iaea.halfTime; } iaeaDefinitionExistsAndHasEnergyLevels =iaea.energeticStatesArray.length>1; }else{ this.mass=mass; - Float overriddenLifeTime= lifetimeOverrides.get(this); - float rawLifeTimeTemp; + Double overriddenLifeTime= lifetimeOverrides.get(this); + double rawLifeTimeTemp; if(overriddenLifeTime!=null) { rawLifeTimeTemp = overriddenLifeTime; } else { rawLifeTimeTemp = calculateLifeTime(izoDiff, izoDiffAbs, element, neutralCount, containsAnti); } - rawLifeTime =rawLifeTimeTemp> iElementalDefinition.STABLE_RAW_LIFE_TIME ? iElementalDefinition.STABLE_RAW_LIFE_TIME :rawLifeTimeTemp; + rawLifeTime = Math.min(rawLifeTimeTemp, iElementalDefinition.STABLE_RAW_LIFE_TIME); iaeaDefinitionExistsAndHasEnergyLevels =false; } @@ -209,50 +212,50 @@ public final class dAtomDefinition extends cElementalDefinition { } private static int stableIzoCurve(int element) { - return (int) Math.round(-1.19561E-06 * Math.pow(element, 4D) + - 1.60885E-04 * Math.pow(element, 3D) + - 3.76604E-04 * Math.pow(element, 2D) + - 1.08418E+00 * (double) element); + return (int) Math.round(-1.19561E-06D * Math.pow(element, 4D) + + 1.60885E-04D * Math.pow(element, 3D) + + 3.76604E-04D * Math.pow(element, 2D) + + 1.08418E+00D * (double) element); } - private static float calculateLifeTime(int izoDiff, int izoDiffAbs, int element, int isotope, boolean containsAnti) { - float rawLifeTime; + private static double calculateLifeTime(int izoDiff, int izoDiffAbs, int element, int isotope, boolean containsAnti) { + double rawLifeTime; if (element <= 83 && isotope < 127 && (izoDiffAbs == 0 || element == 1 && isotope == 0 || element == 2 && isotope == 1 || izoDiffAbs == 1 && element > 2 && element % 2 == 1 || izoDiffAbs == 3 && element > 30 && element % 2 == 0 || izoDiffAbs == 5 && element > 30 && element % 2 == 0 || izoDiffAbs == 2 && element > 20 && element % 2 == 1)) { - rawLifeTime = containsAnti ? 2.381e4f * (1f + xstr.nextFloat() * 9f) : (1f + xstr.nextFloat() * 9f) * 1.5347e25F; + rawLifeTime = (1D + xstr.nextDouble() * 9D) * (containsAnti ? 2.381e4D : 1.5347e25D); } else { //Y = (X-A)/(B-A) * (D-C) + C - float unstabilityEXP; + double unstabilityEXP; if (element == 0) { - return 1e-35f; + return 1e-35D; } else if (element == 1) { - unstabilityEXP = 1.743f - Math.abs(izoDiff - 1) * 9.743f; + unstabilityEXP = 1.743D - Math.abs(izoDiff - 1) * 9.743D; } else if (element == 2) { switch (isotope) { case 4: - unstabilityEXP = 1.61f; + unstabilityEXP = 1.61D; break; case 5: - unstabilityEXP = -7.523F; + unstabilityEXP = -7.523D; break; case 6: - unstabilityEXP = -1.51f; + unstabilityEXP = -1.51D; break; default: - unstabilityEXP = -(izoDiffAbs * 6.165F); + unstabilityEXP = -(izoDiffAbs * 6.165D); break; } } else if (element <= 83 || isotope <= 127 && element <= 120) { - float elementPow4 = (float) Math.pow(element, 4f); + double elementPow4 = Math.pow(element, 4); - unstabilityEXP = Math.min(element / 2.4f, 6 + ((element + 1) % 2) * 3e6F / elementPow4) + (float) -izoDiff * elementPow4 / 1e8F - Math.abs(izoDiff - 1 + element / 60F) * (3f - element / 12.5f + element * element / 1500f); + unstabilityEXP = Math.min(element / 2.4D, 6 + ((element + 1) % 2) * 3e6D / elementPow4) + -izoDiff * elementPow4 / 1e8D - Math.abs(izoDiff - 1 + element / 60D) * (3D - element / 12.5D + element * element / 1500D); } else if (element < 180) { - unstabilityEXP = Math.min((element - 85) * 2, 16 + ((isotope + 1) % 2) * 2.5F - (element - 85) / 3F) - Math.abs(izoDiff) * (3f - element / 13f + element * element / 1600f); + unstabilityEXP = Math.min((element - 85) * 2, 16 + ((isotope + 1) % 2) * 2.5D - (element - 85) / 3D) - Math.abs(izoDiff) * (3D - element / 13D + element * element / 1600D); } else { return -1; } if ((isotope == 127 || isotope == 128) && element < 120 && element > 83) { - unstabilityEXP -= 1.8f; + unstabilityEXP -= 1.8D; } if (element > 83 && element < 93 && isotope % 2 == 0 && izoDiff == 3) { unstabilityEXP += 6; @@ -260,14 +263,14 @@ public final class dAtomDefinition extends cElementalDefinition { if (element > 93 && element < 103 && isotope % 2 == 0 && izoDiff == 4) { unstabilityEXP += 6; } - rawLifeTime = (containsAnti ? 1e-8f : 1f) * (float) Math.pow(10F, unstabilityEXP) * (1f + xstr.nextFloat() * 9f); + rawLifeTime = (containsAnti ? 1e-8D : 1) * Math.pow(10D, unstabilityEXP) * (1D + xstr.nextDouble() * 9D); } - if (rawLifeTime < 8e-15) { - return 1e-35f; + if (rawLifeTime < 8e-15D) { + return 1e-35D; } - if (rawLifeTime > 8e28) { - return 8e30f; + if (rawLifeTime > 8e28D) { + return 8e30D; } return rawLifeTime; } @@ -284,6 +287,9 @@ public final class dAtomDefinition extends cElementalDefinition { } else if (!(stack.definition instanceof eLeptonDefinition)) { return false; } + if((int)stack.amount!=stack.amount){ + throw new ArithmeticException("Amount cannot be safely converted to int!"); + } qty+=stack.amount; } return nuclei && qty decaysList,int decayMode,boolean tryAnti) { + private cElementalDecay[] getDecayArray(ArrayList decaysList,int decayMode,boolean tryAnti) {//todo? if (type == 1) { switch (decayMode) { case -2: @@ -981,14 +987,13 @@ public final class dAtomDefinition extends cElementalDefinition { case "IT": case "IT?": case "G": { if(energy>0){ decaysList.add(new cElementalDecay(decay.chance, this, boson_Y__)); - return true; }else{ if(DEBUG_MODE) { TecTech.LOGGER.info("Tried to emit Gamma from ground state"); } decaysList.add(new cElementalDecay(decay.chance, this)); - return true; } + return true; } //break; case "IT+EC+B+": { if (withThis.removeAllAmounts(false, dHadronDefinition.hadron_p2,eLeptonDefinition.lepton_e1)){ @@ -1022,7 +1027,7 @@ public final class dAtomDefinition extends cElementalDefinition { cElementalMutableDefinitionStackMap tree = elementalStacks.toMutable(); if (tree.removeAmount(false, emit)) { try { - decaysList.add(new cElementalDecay((float) 1, new cElementalDefinitionStack(new dAtomDefinition(tree.toImmutable_optimized_unsafeLeavesExposedElementalTree()), 1), emit)); + decaysList.add(new cElementalDecay(1, new cElementalDefinitionStack(new dAtomDefinition(tree.toImmutable_optimized_unsafeLeavesExposedElementalTree()), 1), emit)); return true; } catch (Exception e) { if (DEBUG_MODE) { @@ -1037,7 +1042,7 @@ public final class dAtomDefinition extends cElementalDefinition { cElementalMutableDefinitionStackMap tree = elementalStacks.toMutable(); if (tree.removeAllAmounts(false, alpha.definition.getSubParticles())) { try { - decaysList.add(new cElementalDecay((float) 1, new cElementalDefinitionStack(new dAtomDefinition(tree.toImmutable_optimized_unsafeLeavesExposedElementalTree()), 1), alpha)); + decaysList.add(new cElementalDecay(1, new cElementalDefinitionStack(new dAtomDefinition(tree.toImmutable_optimized_unsafeLeavesExposedElementalTree()), 1), alpha)); return true; } catch (Exception e) { if (DEBUG_MODE) { @@ -1053,7 +1058,7 @@ public final class dAtomDefinition extends cElementalDefinition { if (tree.removeAmount(false, dHadronDefinition.hadron_n1)) { try { tree.putUnify(dHadronDefinition.hadron_p1); - decaysList.add(new cElementalDecay((float) 1, new cElementalDefinitionStack(new dAtomDefinition(tree.toImmutable_optimized_unsafeLeavesExposedElementalTree()), 1), eLeptonDefinition.lepton_e1, eNeutrinoDefinition.lepton_Ve_1)); + decaysList.add(new cElementalDecay(1, new cElementalDefinitionStack(new dAtomDefinition(tree.toImmutable_optimized_unsafeLeavesExposedElementalTree()), 1), eLeptonDefinition.lepton_e1, eNeutrinoDefinition.lepton_Ve_1)); return true; } catch (Exception e) { if (DEBUG_MODE) { @@ -1069,7 +1074,7 @@ public final class dAtomDefinition extends cElementalDefinition { if (tree.removeAmount(false, dHadronDefinition.hadron_p1)) { try { tree.putUnify(dHadronDefinition.hadron_n1); - decaysList.add(new cElementalDecay((float) 1, new cElementalDefinitionStack(new dAtomDefinition(tree.toImmutable_optimized_unsafeLeavesExposedElementalTree()), 1), eLeptonDefinition.lepton_e_1, eNeutrinoDefinition.lepton_Ve1)); + decaysList.add(new cElementalDecay(1, new cElementalDefinitionStack(new dAtomDefinition(tree.toImmutable_optimized_unsafeLeavesExposedElementalTree()), 1), eLeptonDefinition.lepton_e_1, eNeutrinoDefinition.lepton_Ve1)); return true; } catch (Exception e) { if (DEBUG_MODE) { @@ -1085,7 +1090,7 @@ public final class dAtomDefinition extends cElementalDefinition { if (tree.removeAllAmounts(false, dHadronDefinition.hadron_p1,eLeptonDefinition.lepton_e1)) { try { tree.putUnify(dHadronDefinition.hadron_n1); - decaysList.add(new cElementalDecay((float) 1, new cElementalDefinitionStack(new dAtomDefinition(tree.toImmutable_optimized_unsafeLeavesExposedElementalTree()), 1), eNeutrinoDefinition.lepton_Ve1)); + decaysList.add(new cElementalDecay(1, new cElementalDefinitionStack(new dAtomDefinition(tree.toImmutable_optimized_unsafeLeavesExposedElementalTree()), 1), eNeutrinoDefinition.lepton_Ve1)); return true; } catch (Exception e) { if (DEBUG_MODE) { @@ -1096,7 +1101,7 @@ public final class dAtomDefinition extends cElementalDefinition { return false; } - private boolean Fission(ArrayList decaysList, cElementalMutableDefinitionStackMap fissile, cElementalMutableDefinitionStackMap particles,float probability,boolean spontaneousCheck) { + private boolean Fission(ArrayList decaysList, cElementalMutableDefinitionStackMap fissile, cElementalMutableDefinitionStackMap particles,double probability,boolean spontaneousCheck) { cElementalMutableDefinitionStackMap heavy = new cElementalMutableDefinitionStackMap(); double[] liquidDrop= liquidDropFunction(Math.abs(element)<=97); @@ -1124,7 +1129,7 @@ public final class dAtomDefinition extends cElementalDefinition { //} }else{ int heavy_cnt=(int)Math.ceil(stack.amount*liquidDrop[0]); - if(heavy_cnt%2==1 && XSTR_INSTANCE.nextFloat()>0.05f) { + if(heavy_cnt%2==1 && XSTR_INSTANCE.nextDouble()>0.05D) { heavy_cnt--; } cElementalDefinitionStack new_stack=new cElementalDefinitionStack(stack.definition, heavy_cnt); @@ -1198,9 +1203,9 @@ public final class dAtomDefinition extends cElementalDefinition { } @Override - public float getEnergyDiffBetweenStates(long currentEnergyLevel,long newEnergyLevel) { + public double getEnergyDiffBetweenStates(long currentEnergyLevel,long newEnergyLevel) { if(iaeaDefinitionExistsAndHasEnergyLevels){ - float result=0; + double result=0; boolean backwards=newEnergyLevel entry:lifetimeOverrides.entrySet()){ + for(Map.Entry entry:lifetimeOverrides.entrySet()){ try { lifetimeOverrides.put(new dAtomDefinition(entry.getKey().elementalStacks), entry.getValue()); }catch (tElementalException e){ @@ -1375,7 +1380,7 @@ public final class dAtomDefinition extends cElementalDefinition { int StableIsotope = stableIzoCurve(element); int izoDiff = isotope - StableIsotope; int izoDiffAbs = Math.abs(izoDiff); - float rawLifeTime = calculateLifeTime(izoDiff, izoDiffAbs, element, isotope, false); + double rawLifeTime = calculateLifeTime(izoDiff, izoDiffAbs, element, isotope, false); iaeaNuclide nuclide = iaeaNuclide.get(element, isotope); if (rawLifeTime >= STABLE_RAW_LIFE_TIME || nuclide != null && nuclide.halfTime >= STABLE_RAW_LIFE_TIME) { TreeSet isotopes = stableIsotopes.computeIfAbsent(element, k -> new TreeSet<>()); @@ -1392,8 +1397,8 @@ public final class dAtomDefinition extends cElementalDefinition { int Isotope = stableIzoCurve(element); int izoDiff = isotope - Isotope; int izoDiffAbs = Math.abs(izoDiff); - float rawLifeTime = calculateLifeTime(izoDiff, izoDiffAbs, element, isotope, false); - TreeMap isotopes = mostStableUnstableIsotopes.computeIfAbsent(element, k -> new TreeMap<>()); + double rawLifeTime = calculateLifeTime(izoDiff, izoDiffAbs, element, isotope, false); + TreeMap isotopes = mostStableUnstableIsotopes.computeIfAbsent(element, k -> new TreeMap<>()); isotopes.put(rawLifeTime, isotope); } } @@ -1408,7 +1413,7 @@ public final class dAtomDefinition extends cElementalDefinition { TecTech.LOGGER.info("Added Stable Atom:" + integerTreeSetEntry.getKey() + ' ' + integerTreeSetEntry.getValue().first() + ' ' + stableAtoms.get(integerTreeSetEntry.getKey()).getMass()); } } - for (Map.Entry> integerTreeMapEntry : mostStableUnstableIsotopes.entrySet()) { + for (Map.Entry> integerTreeMapEntry : mostStableUnstableIsotopes.entrySet()) { unstableAtoms.put(integerTreeMapEntry.getKey(), new dAtomDefinition( new cElementalDefinitionStack(dHadronDefinition.hadron_p, integerTreeMapEntry.getKey()), new cElementalDefinitionStack(dHadronDefinition.hadron_n, integerTreeMapEntry.getValue().lastEntry().getValue()), @@ -1468,7 +1473,7 @@ public final class dAtomDefinition extends cElementalDefinition { public static void setTransformation(){ /*----STABLE ATOMS----**/ - refMass = getFirstStableIsotope(1).getMass() * 144F; + refMass = getFirstStableIsotope(1).getMass() * 144D; transformation.addFluid(new cElementalDefinitionStack(getFirstStableIsotope(1), 144),Materials.Hydrogen.mGas.getID(),144); transformation.addFluid(new cElementalDefinitionStack(getFirstStableIsotope(2), 144),Materials.Helium.mGas.getID(), 144); @@ -1554,7 +1559,7 @@ public final class dAtomDefinition extends cElementalDefinition { transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(82), 144), dust, Materials.Lead,1); /*----UNSTABLE ATOMS----**/ - refUnstableMass = getFirstStableIsotope(82).getMass() * 144F; + refUnstableMass = getFirstStableIsotope(82).getMass() * 144D; transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(83), 144), dust, Materials.Bismuth,1); //transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(84),144),OrePrefixes.dust, Materials.Polonium,1); @@ -1585,7 +1590,7 @@ public final class dAtomDefinition extends cElementalDefinition { ); transformation.addOredict(new cElementalDefinitionStack(temp, 144), dust, Materials.Uranium/*238*/,1); - float tempMass=temp.getMass(); + double tempMass=temp.getMass(); temp=new dAtomDefinition( new cElementalDefinitionStack(eLeptonDefinition.lepton_e, 92), @@ -1664,7 +1669,7 @@ public final class dAtomDefinition extends cElementalDefinition { lines.add("SYMBOL = "+getSymbol()); } if(Util.areBitsSet(SCAN_GET_CHARGE,capabilities)) { - lines.add("CHARGE = " + getCharge() / 3f + " e"); + lines.add("CHARGE = " + getCharge() / 3D + " e"); } if(Util.areBitsSet(SCAN_GET_COLOR,capabilities)) { lines.add(getColor() < 0 ? "COLORLESS" : "CARRIES COLOR"); diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dHadronDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dHadronDefinition.java index 96ee5cc3db..ce5e4a50aa 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dHadronDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dHadronDefinition.java @@ -41,17 +41,17 @@ public final class dHadronDefinition extends cElementalDefinition {//TODO Optimi public static final Map NAME_MAP =new HashMap<>(); public static dHadronDefinition hadron_p, hadron_n, hadron_p_, hadron_n_; public static cElementalDefinitionStack hadron_p1, hadron_n1, hadron_p2, hadron_n2, hadron_p3, hadron_n3, hadron_p5; - private static float protonMass = 0F; - private static float neutronMass = 0F; - private static final float actualProtonMass=938272081.3f; - private static final float actualNeutronMass=939565413.3f; + private static double protonMass = 0D; + private static double neutronMass = 0D; + private static final double actualProtonMass=938272081.3D; + private static final double actualNeutronMass=939565413.3D; //float-mass in eV/c^2 - public final float mass; + public final double mass; //int -electric charge in 1/3rds of electron charge for optimization public final int charge; - public final float rawLifeTime; - public final byte amount; + public final double rawLifeTime; + public final int amount; //generation max present inside - minus if contains any antiquark public final byte type; //private final FluidStack fluidThing; @@ -87,13 +87,16 @@ public final class dHadronDefinition extends cElementalDefinition {//TODO Optimi } quarkStacks = quarks; - byte amount = 0; + int amount = 0; int charge = 0; int type = 0; boolean containsAnti = false; - float mass = 0; + double mass = 0; for (cElementalDefinitionStack quarkStack : quarkStacks.values()) { amount += quarkStack.amount; + if((int)quarkStack.amount!=quarkStack.amount){ + throw new ArithmeticException("Amount cannot be safely converted to int!"); + } mass += quarkStack.getMass(); charge += quarkStack.getCharge(); type = Math.max(Math.abs(quarkStack.definition.getType()), type); @@ -104,22 +107,22 @@ public final class dHadronDefinition extends cElementalDefinition {//TODO Optimi this.amount = amount; this.charge = charge; this.type = containsAnti ? (byte) -type : (byte) type; - int mult = this.amount * this.amount * (this.amount - 1); - mass = mass * 5.543F * (float) mult;//yes it becomes heavier + long mult = this.amount * this.amount * (this.amount - 1); + mass = mass * 5.543D * mult;//yes it becomes heavier if (mass == protonMass && this.amount == 3) { rawLifeTime = iElementalDefinition.STABLE_RAW_LIFE_TIME; mass=actualProtonMass; } else if (mass == neutronMass && this.amount == 3) { - rawLifeTime = 882F; + rawLifeTime = 882D; mass=actualNeutronMass; } else { if (this.amount == 3) { - rawLifeTime = 1.34F / mass * (float) Math.pow(9.81, charge); + rawLifeTime = 1.34D / mass * Math.pow(9.81, charge); } else if (this.amount == 2) { - rawLifeTime = 1.21F / mass / (float) Math.pow(19.80, charge); + rawLifeTime = 1.21D / mass / Math.pow(19.80, charge); } else { - rawLifeTime = 1.21F / mass / (float) Math.pow(9.80, charge); + rawLifeTime = 1.21D / mass / Math.pow(9.80, charge); } } this.mass=mass; @@ -133,6 +136,9 @@ public final class dHadronDefinition extends cElementalDefinition {//TODO Optimi if (!(quarks.definition instanceof eQuarkDefinition)) { return false; } + if((int)quarks.amount!=quarks.amount){ + throw new ArithmeticException("Amount cannot be safely converted to int!"); + } amount += quarks.amount; } return amount >= 2 && amount <= 12; @@ -229,7 +235,7 @@ public final class dHadronDefinition extends cElementalDefinition {//TODO Optimi } } return new cElementalDecay[]{ - new cElementalDecay(0.75F, decaysInto.toArray(new cElementalDefinitionStack[0])), + new cElementalDecay(0.75D, decaysInto.toArray(new cElementalDefinitionStack[0])), eBosonDefinition.deadEnd }; } @@ -240,11 +246,11 @@ public final class dHadronDefinition extends cElementalDefinition {//TODO Optimi if (amount == 2 && quarkStacks.length == 2 && quarkStacks[0].definition.getMass() == quarkStacks[1].definition.getMass() && quarkStacks[0].definition.getType() == -quarkStacks[1].definition.getType()) { return cElementalDecay.noProduct; } - return new cElementalDecay[]{new cElementalDecay(0.75F, quarkStacks), eBosonDefinition.deadEnd}; //decay into quarks + return new cElementalDecay[]{new cElementalDecay(0.75D, quarkStacks), eBosonDefinition.deadEnd}; //decay into quarks } @Override - public float getEnergyDiffBetweenStates(long currentEnergyLevel, long newEnergyLevel) { + public double getEnergyDiffBetweenStates(long currentEnergyLevel, long newEnergyLevel) { return iElementalDefinition.DEFAULT_ENERGY_REQUIREMENT *(newEnergyLevel-currentEnergyLevel); } @@ -274,7 +280,7 @@ public final class dHadronDefinition extends cElementalDefinition {//TODO Optimi if (amount == 2 && quarkStacks.length == 2 && quarkStacks[0].definition.getMass() == quarkStacks[1].definition.getMass() && quarkStacks[0].definition.getType() == -quarkStacks[1].definition.getType()) { return cElementalDecay.noProduct; } else if (amount != 3) { - return new cElementalDecay[]{new cElementalDecay(0.95F, quarkStacks), eBosonDefinition.deadEnd}; //decay into quarks + return new cElementalDecay[]{new cElementalDecay(0.95D, quarkStacks), eBosonDefinition.deadEnd}; //decay into quarks } else { ArrayList newBaryon = new ArrayList<>(); iElementalDefinition[] Particles = new iElementalDefinition[2]; @@ -302,8 +308,8 @@ public final class dHadronDefinition extends cElementalDefinition {//TODO Optimi try { return new cElementalDecay[]{ - new cElementalDecay(0.99F, new dHadronDefinition(false, contentOfBaryon), Particles[0], Particles[1]), - new cElementalDecay(0.001F, new dHadronDefinition(false, contentOfBaryon), Particles[0], Particles[1], boson_Y__), + new cElementalDecay(0.99D, new dHadronDefinition(false, contentOfBaryon), Particles[0], Particles[1]), + new cElementalDecay(0.001D, new dHadronDefinition(false, contentOfBaryon), Particles[0], Particles[1], boson_Y__), eBosonDefinition.deadEnd}; } catch (tElementalException e) { if (DEBUG_MODE) { @@ -315,7 +321,7 @@ public final class dHadronDefinition extends cElementalDefinition {//TODO Optimi } @Override - public float getMass() { + public double getMass() { return mass; } @@ -325,7 +331,7 @@ public final class dHadronDefinition extends cElementalDefinition {//TODO Optimi } @Override - public float getRawTimeSpan(long currentEnergy) { + public double getRawTimeSpan(long currentEnergy) { return rawLifeTime; } @@ -436,13 +442,13 @@ public final class dHadronDefinition extends cElementalDefinition {//TODO Optimi protonMass = -1; neutronMass = -1; } - hadron_p1 = new cElementalDefinitionStack(hadron_p, 1); - hadron_n1 = new cElementalDefinitionStack(hadron_n, 1); - hadron_p2 = new cElementalDefinitionStack(hadron_p, 2); - hadron_n2 = new cElementalDefinitionStack(hadron_n, 2); - hadron_p3 = new cElementalDefinitionStack(hadron_p, 3); - hadron_n3 = new cElementalDefinitionStack(hadron_n, 3); - hadron_p5 = new cElementalDefinitionStack(hadron_p, 5); + hadron_p1 = new cElementalDefinitionStack(hadron_p, 1D); + hadron_n1 = new cElementalDefinitionStack(hadron_n, 1D); + hadron_p2 = new cElementalDefinitionStack(hadron_p, 2D); + hadron_n2 = new cElementalDefinitionStack(hadron_n, 2D); + hadron_p3 = new cElementalDefinitionStack(hadron_p, 3D); + hadron_n3 = new cElementalDefinitionStack(hadron_n, 3D); + hadron_p5 = new cElementalDefinitionStack(hadron_p, 5D); try { cElementalDefinition.addCreatorFromNBT(nbtType, dHadronDefinition.class.getMethod("fromNBT", NBTTagCompound.class),(byte)-64); @@ -497,7 +503,7 @@ public final class dHadronDefinition extends cElementalDefinition {//TODO Optimi //lines.add("SYMBOL = "+getSymbol()); } if(Util.areBitsSet(SCAN_GET_CHARGE,capabilities)) { - lines.add("CHARGE = " + getCharge() / 3f + " e"); + lines.add("CHARGE = " + getCharge() / 3D + " e"); } if(Util.areBitsSet(SCAN_GET_COLOR,capabilities)) { lines.add(getColor() < 0 ? "COLORLESS" : "CARRIES COLOR"); diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/iaeaNuclide.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/iaeaNuclide.java index 87a71b684f..410e53810e 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/iaeaNuclide.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/iaeaNuclide.java @@ -1,7 +1,5 @@ package com.github.technus.tectech.mechanics.elementalMatter.definitions.complex; -import com.github.technus.tectech.util.Util; - import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; @@ -10,6 +8,7 @@ import java.util.HashSet; import java.util.TreeMap; import static com.github.technus.tectech.mechanics.elementalMatter.core.templates.iElementalDefinition.STABLE_RAW_LIFE_TIME; +import static com.github.technus.tectech.util.Util.splitButDifferent; public final class iaeaNuclide { public static final double AMU_TO_EV_DIV_C_C=9.31494061E08D,MICRO_AMU_TO_EV_DIV_C_C=9.31494061E02D; @@ -28,7 +27,7 @@ public final class iaeaNuclide { BufferedReader reader = new BufferedReader(new InputStreamReader(iaeaNuclide.class.getResourceAsStream("nuclides.csv"))); ArrayList blockOfData=new ArrayList<>(4); while((line=reader.readLine())!=null) { - String[] split= Util.splitButDifferent(line,","); + String[] split= splitButDifferent(line,","); if(split.length!=19) { throw new Error("Invalid count (" + split.length + ") of separators in IAEA nuclides database " + line); } @@ -51,7 +50,7 @@ public final class iaeaNuclide { try { BufferedReader reader = new BufferedReader(new InputStreamReader(iaeaNuclide.class.getResourceAsStream("nuclidesTable.csv"))); while((line=reader.readLine())!=null) { - String[] split= Util.splitButDifferent(line,","); + String[] split= splitButDifferent(line,","); if(split.length!=47) { throw new Error("Invalid count (" + split.length + ") of separators in IAEA nuvlidesTable database " + line); } @@ -66,7 +65,7 @@ public final class iaeaNuclide { try { BufferedReader reader = new BufferedReader(new InputStreamReader(iaeaNuclide.class.getResourceAsStream("energyLevels.csv"))); while((line=reader.readLine())!=null) { - String[] split= Util.splitButDifferent(line,","); + String[] split= splitButDifferent(line,","); if(split.length!=27) { throw new Error("Invalid count (" + split.length + ") of separators in IAEA energyLevels database " + line); } @@ -88,10 +87,10 @@ public final class iaeaNuclide { } public final short N,Z; - public final float halfTime;//sec - public final float mass;//eV/c^2 + public final double halfTime;//sec + public final double mass;//eV/c^2 public final short discovery;//year - private TreeMap energeticStates; + private TreeMap energeticStates; public energeticState[] energeticStatesArray; @@ -100,14 +99,14 @@ public final class iaeaNuclide { Z=Short.parseShort(rows[1][0]); NUCLIDES.put(((int)Z <<16)+N,this); - String[] parts = Util.splitButDifferent(rows[0][16], "|"); + String[] parts = splitButDifferent(rows[0][16], "|"); double Mass=doubleOrNaN(parts[0],"mass"); if(!Double.isNaN(Mass)) { //System.out.println("Mass =\t" + Mass+"\t"+(N+Z)+"\t"+N+"\t"+Z+"\t"+(Mass/(N+Z))); - mass = (float)(Mass* MICRO_AMU_TO_EV_DIV_C_C); + mass = Mass* MICRO_AMU_TO_EV_DIV_C_C; } else { - mass = Float.NaN; + mass = Double.NaN; } discovery=(short)doubleOrNaN(rows[0][18],"discovery"); @@ -115,8 +114,8 @@ public final class iaeaNuclide { if(rows[0][3].contains("STABLE")){ halfTime = STABLE_RAW_LIFE_TIME; }else{ - parts = Util.splitButDifferent(rows[0][4], "|"); - halfTime = (float)doubleOrNaN(parts[0],"half life"); + parts = splitButDifferent(rows[0][4], "|"); + halfTime = doubleOrNaN(parts[0],"half life"); } } @@ -126,7 +125,13 @@ public final class iaeaNuclide { // if (add(cells[17])) System.out.println(N + " " + Z); // if (add(cells[20])) System.out.println(N + " " + Z); //} - new energeticState(this, halfTime, getDecaysFixed(cells[14],doubleOrNaN(cells[15],"chance1"),cells[17],doubleOrNaN(cells[18],"chance1"),cells[20],doubleOrNaN(cells[21],"chance1"))); + new energeticState(this, halfTime, getDecaysFixed( + cells[14], + doubleOrNaN(cells[15],"chance1"), + cells[17], + doubleOrNaN(cells[18],"chance1"), + cells[20], + doubleOrNaN(cells[21],"chance1"))); } private static final energeticState[] empty=new energeticState[0]; @@ -156,11 +161,11 @@ public final class iaeaNuclide { } public static final class energeticState{ - public final float energy; - public final float Thalf; + public final double energy; + public final double Thalf; public final iaeaDecay[] decaymodes; - private energeticState(iaeaNuclide nuclide,float Thalf,iaeaDecay[] decaymodes){ + private energeticState(iaeaNuclide nuclide,double Thalf,iaeaDecay[] decaymodes){ energy=0; this.Thalf=Thalf; this.decaymodes=decaymodes; @@ -175,11 +180,11 @@ public final class iaeaNuclide { if(nuclide==null) { throw new Error("Missing nuclide " + (int) doubleOrNaN(cells[0], "protons") + ' ' + (int) doubleOrNaN(cells[1], "neutrons")); } - energy =(float) (doubleOrNaN(cells[3],"energy level",nuclide)*1000f);//to eV + energy =doubleOrNaN(cells[3],"energy level",nuclide)*1000D;//to eV if(energy<0) { throw new Error("Invalid energy " + nuclide.N + ' ' + nuclide.Z + ' ' + cells[3]); } - Thalf =(float) doubleOrNaN(cells[10],"half life",nuclide); + Thalf =doubleOrNaN(cells[10],"half life",nuclide); if(nuclide.energeticStates==null) { new Exception("Should be initialized before doing this... "+ nuclide.N + ' ' +nuclide.Z).printStackTrace(); nuclide.energeticStates = new TreeMap<>(); @@ -190,7 +195,13 @@ public final class iaeaNuclide { // if (add(cells[15])) System.out.println(nuclide.N + " " + nuclide.Z); // if (add(cells[18])) System.out.println(nuclide.N + " " + nuclide.Z); //} - decaymodes = getDecaysFixed(cells[12],doubleOrNaN(cells[13],"chance 1",nuclide),cells[15],doubleOrNaN(cells[16],"chance 2",nuclide),cells[18],doubleOrNaN(cells[19],"chance 3",nuclide)); + decaymodes = getDecaysFixed( + cells[12], + doubleOrNaN(cells[13],"chance 1",nuclide), + cells[15], + doubleOrNaN(cells[16],"chance 2",nuclide), + cells[18], + doubleOrNaN(cells[19],"chance 3",nuclide)); } private double doubleOrNaN(String s, String name){ @@ -231,40 +242,40 @@ public final class iaeaNuclide { do3= !decay3.isEmpty() && !Double.isNaN(chance3); TreeMap decays=new TreeMap<>(); if(do1 && do2 && chance1==100 && chance2==100 && chance3!=100){ - decays.put(1D, new iaeaDecay(1f, decay1)); + decays.put(1D, new iaeaDecay(1D, decay1)); if(do3) { chance3/=100d; - decays.put(chance3, new iaeaDecay((float) chance3, decay2)); + decays.put(chance3, new iaeaDecay(chance3, decay2)); chance2=1d-chance3; } chance2/=2d; - decays.put(chance2, new iaeaDecay((float) chance2, decay2)); + decays.put(chance2, new iaeaDecay(chance2, decay2)); }else if(do1 && chance1==100){ - decays.put(1D, new iaeaDecay(1f, decay1)); + decays.put(1D, new iaeaDecay(1D, decay1)); if(do2) { chance2/=100d; - decays.put(chance2, new iaeaDecay((float) chance2, decay2)); + decays.put(chance2, new iaeaDecay(chance2, decay2)); } if(do3) { chance3 /= 100d; if(do2) { chance3 *= chance2; } - decays.put(chance3, new iaeaDecay((float) chance3, decay3)); + decays.put(chance3, new iaeaDecay(chance3, decay3)); } }else{ double normalization= (do1?chance1:0) + (do2?chance2:0) + (do3?chance3:0); if(do1) { chance1/=normalization; - decays.put(chance1, new iaeaDecay((float) chance1, decay1)); + decays.put(chance1, new iaeaDecay(chance1, decay1)); } if(do2) { chance2/=normalization; - decays.put(chance2, new iaeaDecay((float) chance2, decay2)); + decays.put(chance2, new iaeaDecay(chance2, decay2)); } if(do3) { chance3/=normalization; - decays.put(chance3, new iaeaDecay((float) chance3, decay3)); + decays.put(chance3, new iaeaDecay(chance3, decay3)); } if(do1||do2||do3) { decays.put(1D, iaeaDecay.DEAD_END); @@ -277,10 +288,10 @@ public final class iaeaNuclide { } public static final class iaeaDecay{ - public final float chance; + public final double chance; public final String decayName; - public static final iaeaDecay DEAD_END=new iaeaDecay(1f,"DEAD_END"); - private iaeaDecay(float chance,String decayName){ + public static final iaeaDecay DEAD_END=new iaeaDecay(1D,"DEAD_END"); + private iaeaDecay(double chance,String decayName){ this.chance=chance; this.decayName=decayName; } diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/cPrimitiveDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/cPrimitiveDefinition.java index a09fc60835..a3efe12b7e 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/cPrimitiveDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/cPrimitiveDefinition.java @@ -9,13 +9,13 @@ import static com.github.technus.tectech.mechanics.elementalMatter.core.cElement */ public final class cPrimitiveDefinition extends cElementalPrimitive { public static final cPrimitiveDefinition - nbtE__ = new cPrimitiveDefinition("NBT ERROR", "!", 0, 0f, Integer.MIN_VALUE, Integer.MIN_VALUE+10_000), - null__ = new cPrimitiveDefinition("NULL POINTER", ".", 0, 0F, -3, Integer.MAX_VALUE-10_000), - space__ = new cPrimitiveDefinition("Space", "_", 0, 0F, -4, 0), - magic = new cPrimitiveDefinition("Magic", "Ma", 4, 1e5F, 0, 1), - magic_ = new cPrimitiveDefinition("Antimagic", "~Ma", -4, 1e5F, 0, 2); + nbtE__ = new cPrimitiveDefinition("NBT ERROR", "!", 0, 0D, Integer.MIN_VALUE, Integer.MIN_VALUE+10_000), + null__ = new cPrimitiveDefinition("NULL POINTER", ".", 0, 0D, -3, Integer.MAX_VALUE-10_000), + space__ = new cPrimitiveDefinition("Space", "_", 0, 0D, -4, 0), + magic = new cPrimitiveDefinition("Magic", "Ma", 4, 1e5D, 0, 1), + magic_ = new cPrimitiveDefinition("Antimagic", "~Ma", -4, 1e5D, 0, 2); - private cPrimitiveDefinition(String name, String symbol, int type, float mass, int color, int ID) { + private cPrimitiveDefinition(String name, String symbol, int type, double mass, int color, int ID) { super(name, symbol, type, mass, 0, color, ID); } diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/eBosonDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/eBosonDefinition.java index 3f314151f3..f1f740f665 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/eBosonDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/eBosonDefinition.java @@ -9,23 +9,23 @@ import com.github.technus.tectech.mechanics.elementalMatter.core.templates.cElem */ public final class eBosonDefinition extends cElementalPrimitive { public static final eBosonDefinition - boson_Y__ = new eBosonDefinition("Photon", "\u03b3", 1e-18F, -1, 27), - boson_H__ = new eBosonDefinition("Higgs", "\u0397", 126.09e9F, -2, 28); + boson_Y__ = new eBosonDefinition("Photon", "\u03b3", 1e-18D, -1, 27), + boson_H__ = new eBosonDefinition("Higgs", "\u0397", 126.09e9D, -2, 28); //deadEnd public static final cElementalDecay deadEnd = new cElementalDecay(boson_Y__, boson_Y__); public static final cElementalDecay deadEndHalf = new cElementalDecay(boson_Y__); public static final cElementalDefinitionStack boson_Y__1=new cElementalDefinitionStack(boson_Y__,1); - private eBosonDefinition(String name, String symbol, float mass, int color, int ID) { + private eBosonDefinition(String name, String symbol, double mass, int color, int ID) { super(name, symbol, 0, mass, 0, color, ID); } public static void run() { boson_Y__.init(null, NO_DECAY_RAW_LIFE_TIME, -1, -1, cElementalDecay.noDecay); - boson_H__.init(null, 1.56e-22F, 0, 0, - new cElementalDecay(0.96F, new cElementalDefinitionStack(boson_Y__, 4)), - new cElementalDecay(0.02F, eLeptonDefinition.lepton_t, eLeptonDefinition.lepton_t_), - new cElementalDecay(0.01F, eQuarkDefinition.quark_b, eQuarkDefinition.quark_b_), + boson_H__.init(null, 1.56e-22D, 0, 0, + new cElementalDecay(0.96D, new cElementalDefinitionStack(boson_Y__, 4)), + new cElementalDecay(0.02D, eLeptonDefinition.lepton_t, eLeptonDefinition.lepton_t_), + new cElementalDecay(0.01D, eQuarkDefinition.quark_b, eQuarkDefinition.quark_b_), deadEnd); } diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/eLeptonDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/eLeptonDefinition.java index 20132e2095..dd57d6875e 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/eLeptonDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/eLeptonDefinition.java @@ -9,19 +9,19 @@ import com.github.technus.tectech.mechanics.elementalMatter.core.templates.cElem */ public final class eLeptonDefinition extends cElementalPrimitive { public static final eLeptonDefinition - lepton_e = new eLeptonDefinition("Electron", "\u03b2-", 1, 0.511e6F, -3, 15), - lepton_m = new eLeptonDefinition("Muon", "\u03bc-", 2, 105.658e6F, -3, 17), - lepton_t = new eLeptonDefinition("Tauon", "\u03c4-", 3, 1776.83e6F, -3, 19), - lepton_e_ = new eLeptonDefinition("Positron", "\u03b2+", -1, 0.511e6F, 3, 16), - lepton_m_ = new eLeptonDefinition("Antimuon", "\u03bc+", -2, 105.658e6F, 3, 18), - lepton_t_ = new eLeptonDefinition("Antitauon", "\u03c4+", -3, 1776.83e6F, 3, 20); + lepton_e = new eLeptonDefinition("Electron", "\u03b2-", 1, 0.511e6D, -3, 15), + lepton_m = new eLeptonDefinition("Muon", "\u03bc-", 2, 105.658e6D, -3, 17), + lepton_t = new eLeptonDefinition("Tauon", "\u03c4-", 3, 1776.83e6D, -3, 19), + lepton_e_ = new eLeptonDefinition("Positron", "\u03b2+", -1, 0.511e6D, 3, 16), + lepton_m_ = new eLeptonDefinition("Antimuon", "\u03bc+", -2, 105.658e6D, 3, 18), + lepton_t_ = new eLeptonDefinition("Antitauon", "\u03c4+", -3, 1776.83e6D, 3, 20); public static final cElementalDefinitionStack lepton_e1 = new cElementalDefinitionStack(lepton_e, 1); public static final cElementalDefinitionStack lepton_e2 = new cElementalDefinitionStack(lepton_e, 2); public static final cElementalDefinitionStack lepton_e_1 = new cElementalDefinitionStack(lepton_e_, 1); public static final cElementalDefinitionStack lepton_e_2 = new cElementalDefinitionStack(lepton_e_, 2); - private eLeptonDefinition(String name, String symbol, int type, float mass, int charge, int ID) { + private eLeptonDefinition(String name, String symbol, int type, double mass, int charge, int ID) { super(name, symbol, type, mass, charge, -1, ID); //this.itemThing=null; //this.fluidThing=null; @@ -31,12 +31,12 @@ public final class eLeptonDefinition extends cElementalPrimitive { lepton_e.init(lepton_e_, STABLE_RAW_LIFE_TIME, 0, 1, eBosonDefinition.deadEnd,//makes photons and don't care new cElementalDecay(lepton_e, eBosonDefinition.boson_Y__)); - lepton_m.init(lepton_m_, 2.197019e-6F, 0, 1, - new cElementalDecay(0.9F, lepton_e, eNeutrinoDefinition.lepton_Ve_, eNeutrinoDefinition.lepton_Vm), + lepton_m.init(lepton_m_, 2.197019e-6D, 0, 1, + new cElementalDecay(0.9D, lepton_e, eNeutrinoDefinition.lepton_Ve_, eNeutrinoDefinition.lepton_Vm), eBosonDefinition.deadEnd);//makes photons and don't care - lepton_t.init(lepton_t_, 2.906e-13F, 1, 3, - new cElementalDecay(0.8F, lepton_m, eNeutrinoDefinition.lepton_Vm_, eNeutrinoDefinition.lepton_Vt, eBosonDefinition.boson_Y__), - new cElementalDecay(0.1F, lepton_e, eNeutrinoDefinition.lepton_Ve_, eNeutrinoDefinition.lepton_Vm), + lepton_t.init(lepton_t_, 2.906e-13D, 1, 3, + new cElementalDecay(0.8D, lepton_m, eNeutrinoDefinition.lepton_Vm_, eNeutrinoDefinition.lepton_Vt, eBosonDefinition.boson_Y__), + new cElementalDecay(0.1D, lepton_e, eNeutrinoDefinition.lepton_Ve_, eNeutrinoDefinition.lepton_Vm), new cElementalDecay(0.05F, lepton_m, eNeutrinoDefinition.lepton_Vm_, eNeutrinoDefinition.lepton_Vt, eBosonDefinition.boson_H__), eBosonDefinition.deadEnd);//makes photons and don't care diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/eNeutrinoDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/eNeutrinoDefinition.java index 5f6a4a7b5e..ba084af9a2 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/eNeutrinoDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/eNeutrinoDefinition.java @@ -9,38 +9,38 @@ import com.github.technus.tectech.mechanics.elementalMatter.core.templates.cElem */ public final class eNeutrinoDefinition extends cElementalPrimitive { public static final eNeutrinoDefinition - lepton_Ve = new eNeutrinoDefinition("Electron neutrino", "\u03bd\u03b2", 1, 2e0F, 21), - lepton_Vm = new eNeutrinoDefinition("Muon neutrino", "\u03bd\u03bc", 2, 0.15e6F, 23), - lepton_Vt = new eNeutrinoDefinition("Tauon neutrino", "\u03bd\u03c4", 3, 15e6F, 25), - lepton_Ve_ = new eNeutrinoDefinition("Positron neutrino", "~\u03bd\u03b2", -1, 2e0F, 22), - lepton_Vm_ = new eNeutrinoDefinition("Antimuon neutrino", "~\u03bd\u03bc", -2, 0.15e6F, 24), - lepton_Vt_ = new eNeutrinoDefinition("Antitauon neutrino", "~\u03bd\u03c4", -3, 15e6F, 26); + lepton_Ve = new eNeutrinoDefinition("Electron neutrino", "\u03bd\u03b2", 1, 2e0D, 21), + lepton_Vm = new eNeutrinoDefinition("Muon neutrino", "\u03bd\u03bc", 2, 0.15e6D, 23), + lepton_Vt = new eNeutrinoDefinition("Tauon neutrino", "\u03bd\u03c4", 3, 15e6D, 25), + lepton_Ve_ = new eNeutrinoDefinition("Positron neutrino", "~\u03bd\u03b2", -1, 2e0D, 22), + lepton_Vm_ = new eNeutrinoDefinition("Antimuon neutrino", "~\u03bd\u03bc", -2, 0.15e6D, 24), + lepton_Vt_ = new eNeutrinoDefinition("Antitauon neutrino", "~\u03bd\u03c4", -3, 15e6D, 26); public static final cElementalDefinitionStack lepton_Ve1 = new cElementalDefinitionStack(lepton_Ve, 1); public static final cElementalDefinitionStack lepton_Ve2 = new cElementalDefinitionStack(lepton_Ve, 2); public static final cElementalDefinitionStack lepton_Ve_1 = new cElementalDefinitionStack(lepton_Ve_, 1); public static final cElementalDefinitionStack lepton_Ve_2 = new cElementalDefinitionStack(lepton_Ve_, 2); - private eNeutrinoDefinition(String name, String symbol, int type, float mass, int ID) { + private eNeutrinoDefinition(String name, String symbol, int type, double mass, int ID) { super(name, symbol, type, mass, 0, -1, ID); } public static void run() { - lepton_Ve.init(lepton_Ve_, 1F, -1, -1, + lepton_Ve.init(lepton_Ve_, 1D, -1, -1, cElementalDecay.noProduct); - lepton_Vm.init(lepton_Vm_, 1F, 1, 0, - new cElementalDecay(0.825F, nothing), + lepton_Vm.init(lepton_Vm_, 1D, 1, 0, + new cElementalDecay(0.825D, nothing), eBosonDefinition.deadEndHalf); - lepton_Vt.init(lepton_Vt_, 1F, 1, 0, + lepton_Vt.init(lepton_Vt_, 1, 1, 0, new cElementalDecay(0.75F, nothing), eBosonDefinition.deadEnd); - lepton_Ve_.init(lepton_Ve, 1F, -1, -1, + lepton_Ve_.init(lepton_Ve, 1, -1, -1, cElementalDecay.noProduct); - lepton_Vm_.init(lepton_Vm, 1F, 1, 0, + lepton_Vm_.init(lepton_Vm, 1, 1, 0, new cElementalDecay(0.825F, nothing), eBosonDefinition.deadEndHalf); - lepton_Vt_.init(lepton_Vt, 1F, 1, 0, + lepton_Vt_.init(lepton_Vt, 1, 1, 0, new cElementalDecay(0.75F, nothing), eBosonDefinition.deadEnd); } diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/eQuarkDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/eQuarkDefinition.java index be6879d435..027b604dc5 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/eQuarkDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/eQuarkDefinition.java @@ -8,62 +8,62 @@ import com.github.technus.tectech.mechanics.elementalMatter.core.templates.cElem */ public final class eQuarkDefinition extends cElementalPrimitive { public static final eQuarkDefinition - quark_u = new eQuarkDefinition("Up", "u", 1, 2.3e6F, 2, 3), - quark_c = new eQuarkDefinition("Charm", "c", 2, 1.29e9F, 2, 9), - quark_t = new eQuarkDefinition("Top", "t", 3, 172.44e9F, 2, 13), - quark_d = new eQuarkDefinition("Down", "d", 1, 4.8e6F, -1, 5), - quark_s = new eQuarkDefinition("Strange", "s", 2, 95e6F, -1, 7), - quark_b = new eQuarkDefinition("Bottom", "b", 3, 4.65e9F, -1, 11), - quark_u_ = new eQuarkDefinition("AntiUp", "~u", -1, 2.3e6F, -2, 4), - quark_c_ = new eQuarkDefinition("AntiCharm", "~c", -2, 1.29e9F, -2, 10), - quark_t_ = new eQuarkDefinition("AntiTop", "~t", -3, 172.44e9F, -2, 14), - quark_d_ = new eQuarkDefinition("AntiDown", "~d", -1, 4.8e6F, 1, 6), - quark_s_ = new eQuarkDefinition("AntiStrange", "~s", -2, 95e6F, 1, 8), - quark_b_ = new eQuarkDefinition("AntiBottom", "~b", -3, 4.65e9F, 1, 12); + quark_u = new eQuarkDefinition("Up", "u", 1, 2.3e6D, 2, 3), + quark_c = new eQuarkDefinition("Charm", "c", 2, 1.29e9D, 2, 9), + quark_t = new eQuarkDefinition("Top", "t", 3, 172.44e9D, 2, 13), + quark_d = new eQuarkDefinition("Down", "d", 1, 4.8e6D, -1, 5), + quark_s = new eQuarkDefinition("Strange", "s", 2, 95e6D, -1, 7), + quark_b = new eQuarkDefinition("Bottom", "b", 3, 4.65e9D, -1, 11), + quark_u_ = new eQuarkDefinition("AntiUp", "~u", -1, 2.3e6D, -2, 4), + quark_c_ = new eQuarkDefinition("AntiCharm", "~c", -2, 1.29e9D, -2, 10), + quark_t_ = new eQuarkDefinition("AntiTop", "~t", -3, 172.44e9D, -2, 14), + quark_d_ = new eQuarkDefinition("AntiDown", "~d", -1, 4.8e6D, 1, 6), + quark_s_ = new eQuarkDefinition("AntiStrange", "~s", -2, 95e6D, 1, 8), + quark_b_ = new eQuarkDefinition("AntiBottom", "~b", -3, 4.65e9D, 1, 12); - private eQuarkDefinition(String name, String symbol, int type, float mass, int charge, int ID) { + private eQuarkDefinition(String name, String symbol, int type, double mass, int charge, int ID) { super(name, symbol, type, mass, charge, 0, ID); } public static void run() { quark_u.init(quark_u_, STABLE_RAW_LIFE_TIME, 3, -1, - new cElementalDecay(0.9F, quark_d, eLeptonDefinition.lepton_e_, eNeutrinoDefinition.lepton_Ve), - new cElementalDecay(0.050778116F, quark_s/*,lepton_m_,lepton_Vm*/), - new cElementalDecay(1.23201e-5F, quark_b/*,lepton_t_,lepton_Vt*/), + new cElementalDecay(0.9D, quark_d, eLeptonDefinition.lepton_e_, eNeutrinoDefinition.lepton_Ve), + new cElementalDecay(0.050778116D, quark_s/*,lepton_m_,lepton_Vm*/), + new cElementalDecay(1.23201e-5D, quark_b/*,lepton_t_,lepton_Vt*/), eBosonDefinition.deadEnd);//makes photons and don't care - quark_c.init(quark_c_, 0.5e-13F, 1, -1, - new cElementalDecay(0.9F, quark_s, eLeptonDefinition.lepton_e_, eNeutrinoDefinition.lepton_Ve), - new cElementalDecay(0.05071504F, quark_d, eLeptonDefinition.lepton_m_, eNeutrinoDefinition.lepton_Vm), - new cElementalDecay(0.00169744F, quark_b/*,lepton_t_,lepton_Vt*/), + quark_c.init(quark_c_, 0.5e-13D, 1, -1, + new cElementalDecay(0.9D, quark_s, eLeptonDefinition.lepton_e_, eNeutrinoDefinition.lepton_Ve), + new cElementalDecay(0.05071504D, quark_d, eLeptonDefinition.lepton_m_, eNeutrinoDefinition.lepton_Vm), + new cElementalDecay(0.00169744D, quark_b/*,lepton_t_,lepton_Vt*/), eBosonDefinition.deadEnd);//makes photons and don't care - quark_t.init(quark_t_, 2.5e-26F, 2, -1, - new cElementalDecay(0.9F, quark_b, eLeptonDefinition.lepton_e_, eNeutrinoDefinition.lepton_Ve), - new cElementalDecay(0.00163216F, quark_s, eLeptonDefinition.lepton_m_, eNeutrinoDefinition.lepton_Vm), - new cElementalDecay(7.51689e-5F, quark_d, eLeptonDefinition.lepton_t_, eNeutrinoDefinition.lepton_Vt), + quark_t.init(quark_t_, 2.5e-26D, 2, -1, + new cElementalDecay(0.9D, quark_b, eLeptonDefinition.lepton_e_, eNeutrinoDefinition.lepton_Ve), + new cElementalDecay(0.00163216D, quark_s, eLeptonDefinition.lepton_m_, eNeutrinoDefinition.lepton_Vm), + new cElementalDecay(7.51689e-5D, quark_d, eLeptonDefinition.lepton_t_, eNeutrinoDefinition.lepton_Vt), eBosonDefinition.deadEnd);//makes photons and don't care quark_d.init(quark_d_, STABLE_RAW_LIFE_TIME, 3, -1, - new cElementalDecay(0.9F, quark_u, eLeptonDefinition.lepton_e, eNeutrinoDefinition.lepton_Ve_), - new cElementalDecay(0.05071504F, quark_c/*,lepton_m,lepton_Vm_*/), - new cElementalDecay(7.51689e-5F, quark_t/*,lepton_t,lepton_Vt_*/), + new cElementalDecay(0.9D, quark_u, eLeptonDefinition.lepton_e, eNeutrinoDefinition.lepton_Ve_), + new cElementalDecay(0.05071504D, quark_c/*,lepton_m,lepton_Vm_*/), + new cElementalDecay(7.51689e-5D, quark_t/*,lepton_t,lepton_Vt_*/), eBosonDefinition.deadEnd);//makes photons and don't care - quark_s.init(quark_s_, 0.6e-9F, 1, -1, - new cElementalDecay(0.9F, quark_c, eLeptonDefinition.lepton_e, eNeutrinoDefinition.lepton_Ve_), - new cElementalDecay(0.050778116F, quark_u, eLeptonDefinition.lepton_m, eNeutrinoDefinition.lepton_Vm_), - new cElementalDecay(0.00163216F, quark_t/*,lepton_t,lepton_Vt_*/), + quark_s.init(quark_s_, 0.6e-9D, 1, -1, + new cElementalDecay(0.9D, quark_c, eLeptonDefinition.lepton_e, eNeutrinoDefinition.lepton_Ve_), + new cElementalDecay(0.050778116D, quark_u, eLeptonDefinition.lepton_m, eNeutrinoDefinition.lepton_Vm_), + new cElementalDecay(0.00163216D, quark_t/*,lepton_t,lepton_Vt_*/), eBosonDefinition.deadEnd);//makes photons and don't care - quark_b.init(quark_b_, 0.7e-13F, 2, -1, - new cElementalDecay(0.9F, quark_t, eLeptonDefinition.lepton_e, eNeutrinoDefinition.lepton_Ve_), - new cElementalDecay(0.00169744F, quark_c, eLeptonDefinition.lepton_m, eNeutrinoDefinition.lepton_Vm_), - new cElementalDecay(1.23201e-5F, quark_u, eLeptonDefinition.lepton_t, eNeutrinoDefinition.lepton_Vt_), + quark_b.init(quark_b_, 0.7e-13D, 2, -1, + new cElementalDecay(0.9D, quark_t, eLeptonDefinition.lepton_e, eNeutrinoDefinition.lepton_Ve_), + new cElementalDecay(0.00169744D, quark_c, eLeptonDefinition.lepton_m, eNeutrinoDefinition.lepton_Vm_), + new cElementalDecay(1.23201e-5D, quark_u, eLeptonDefinition.lepton_t, eNeutrinoDefinition.lepton_Vt_), eBosonDefinition.deadEnd);//makes photons and don't care quark_u_.init(quark_u, STABLE_RAW_LIFE_TIME, 3, -1, - new cElementalDecay(0.9F, quark_d_, eLeptonDefinition.lepton_e, eNeutrinoDefinition.lepton_Ve_), - new cElementalDecay(0.050778116F, quark_s_/*,lepton_m,lepton_Vm_*/), - new cElementalDecay(1.23201e-5F, quark_b_/*,lepton_t,lepton_Vt_*/), + new cElementalDecay(0.9D, quark_d_, eLeptonDefinition.lepton_e, eNeutrinoDefinition.lepton_Ve_), + new cElementalDecay(0.050778116D, quark_s_/*,lepton_m,lepton_Vm_*/), + new cElementalDecay(1.23201e-5D, quark_b_/*,lepton_t,lepton_Vt_*/), eBosonDefinition.deadEnd);//makes photons and don't care - quark_c_.init(quark_c, 0.5e-13F, 1, -1, + quark_c_.init(quark_c, 0.5e-13D, 1, -1, new cElementalDecay(0.9F, quark_s_, eLeptonDefinition.lepton_e, eNeutrinoDefinition.lepton_Ve_), new cElementalDecay(0.05071504F, quark_d_, eLeptonDefinition.lepton_m, eNeutrinoDefinition.lepton_Vm_), new cElementalDecay(0.00169744F, quark_b_/*,lepton_t,lepton_Vt_*/), diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java index 8f4e7969ee..e364e634bc 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java @@ -36,6 +36,7 @@ import net.minecraftforge.common.util.ForgeDirection; import java.util.HashMap; +import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; import static com.github.technus.tectech.mechanics.structure.StructureUtility.*; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; @@ -280,7 +281,7 @@ public class GT_MetaTileEntity_EM_collider extends GT_MetaTileEntity_MultiblockB } return STATUS_WRONG; } - return STATUS_UNUSED; + return STATUS_OK; }; private static final INameFunction MODE_NAME = (base_EM, p) -> { if (base_EM.isMaster()) { @@ -298,9 +299,9 @@ public class GT_MetaTileEntity_EM_collider extends GT_MetaTileEntity_MultiblockB //region structure //use multi A energy inputs, use less power the longer it runs - private static final IStructureDefinition STRUCTURE_DEFINITION= StructureDefinition + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition .builder() - .addShapeOldApi("main",new String[][]{ + .addShapeOldApi("main", new String[][]{ {"I0A0A0", "I00000", "I0A0A0",}, {"H0000000", "G001111100", "H0000000",}, {"F22223332222", "F41155555114", "F22223332222",}, @@ -323,23 +324,23 @@ public class GT_MetaTileEntity_EM_collider extends GT_MetaTileEntity_MultiblockB {"E20!!22222!!02", "E4155111115514", "E20!!22222!!02",}, {"F2222#$#2222", "F41155555114", "F2222#$#2222",}, }) - .addElement('0', ofBlock(sBlockCasingsTT,4)) - .addElement('1', ofBlock(sBlockCasingsTT,7)) - .addElement('2', defer(t->(int)t.eTier,(t,item)->2-(item.stackSize&1), - error(),ofBlock(sBlockCasingsTT,4),ofBlock(sBlockCasingsTT,5))) - .addElement('3', ofBlock(QuantumGlassBlock.INSTANCE,0)) - .addElement('4', defer(t->(int)t.eTier,(t,item)->2-(item.stackSize&1), - error(),ofBlock(sBlockCasingsTT,4),ofBlock(sBlockCasingsTT,6))) - .addElement('5', defer(t->(int)t.eTier,(t,item)->2-(item.stackSize&1), - error(),ofBlock(sBlockCasingsTT,8),ofBlock(sBlockCasingsTT,9))) + .addElement('0', ofBlock(sBlockCasingsTT, 4)) + .addElement('1', ofBlock(sBlockCasingsTT, 7)) + .addElement('2', defer(t -> (int) t.eTier, (t, item) -> 2 - (item.stackSize & 1), + error(), ofBlock(sBlockCasingsTT, 4), ofBlock(sBlockCasingsTT, 5))) + .addElement('3', ofBlock(QuantumGlassBlock.INSTANCE, 0)) + .addElement('4', defer(t -> (int) t.eTier, (t, item) -> 2 - (item.stackSize & 1), + error(), ofBlock(sBlockCasingsTT, 4), ofBlock(sBlockCasingsTT, 6))) + .addElement('5', defer(t -> (int) t.eTier, (t, item) -> 2 - (item.stackSize & 1), + error(), ofBlock(sBlockCasingsTT, 8), ofBlock(sBlockCasingsTT, 9))) .addElement('&', ofHatchAdderOptional(GT_MetaTileEntity_EM_collider::addClassicToMachineList, - textureOffset,1,sBlockCasingsTT,0)) + textureOffset, 1, sBlockCasingsTT, 0)) .addElement('!', ofHatchAdderOptional(GT_MetaTileEntity_EM_collider::addElementalInputToMachineList, - textureOffset + 4,2,sBlockCasingsTT,4)) + textureOffset + 4, 2, sBlockCasingsTT, 4)) .addElement('$', ofHatchAdderOptional(GT_MetaTileEntity_EM_collider::addElementalOutputToMachineList, - textureOffset + 4,3,sBlockCasingsTT,4)) + textureOffset + 4, 3, sBlockCasingsTT, 4)) .addElement('#', ofHatchAdderOptional(GT_MetaTileEntity_EM_collider::addElementalMufflerToMachineList, - textureOffset + 4,4,sBlockCasingsTT,4)) + textureOffset + 4, 4, sBlockCasingsTT, 4)) .build(); private static final String[] description = new String[]{ EnumChatFormatting.AQUA + translateToLocal("tt.keyphrase.Hint_Details") + ":", @@ -405,6 +406,39 @@ public class GT_MetaTileEntity_EM_collider extends GT_MetaTileEntity_MultiblockB return 0; } + protected double collide(GT_MetaTileEntity_EM_collider partner) { + if (partner.stack != null && stack != null) {//todo add single event mode as an option + boolean check = stack.definition.fusionMakesEnergy(stack.getEnergy()) && + partner.stack.definition.fusionMakesEnergy(partner.stack.getEnergy()); + + cElementalInstanceStack stack2 = partner.stack; + double preMass = stack2.getMass() + stack.getMass(); + //System.out.println("preMass = " + preMass); + + cElementalInstanceStackMap map = new cElementalInstanceStackMap(); + IColliderHandler colliderHandler; + if (stack2.definition.getClassType() > stack.definition.getClassType()) {//always bigger first + colliderHandler = FUSE_HANDLERS.get((stack2.definition.getClassType() << 16) | stack.definition.getClassType()); + if (handleRecipe(stack2, map, colliderHandler)) return 0; + } else { + colliderHandler = FUSE_HANDLERS.get((stack.definition.getClassType() << 16) | stack2.definition.getClassType()); + if (handleRecipe(stack2, map, colliderHandler)) return 0; + } + for (cElementalInstanceStack newStack : map.values()) { + check &= newStack.definition.fusionMakesEnergy(newStack.getEnergy()); + } + //System.out.println("outputEM[0].getMass() = " + outputEM[0].getMass()); + outputEM = new cElementalInstanceStackMap[]{map}; + + partner.stack = stack = null; + //System.out.println("check = " + check); + //System.out.println("preMass-map.getMass() = " + (preMass - map.getMass())); + return check ? preMass - map.getMass() : + Math.min(preMass - map.getMass(), 0); + } + return 0; + } + private boolean handleRecipe(cElementalInstanceStack stack2, cElementalInstanceStackMap map, IColliderHandler colliderHandler) { if (colliderHandler != null && eTier >= colliderHandler.getRequiredTier()) { colliderHandler.collide(stack2, stack, map); @@ -438,7 +472,9 @@ public class GT_MetaTileEntity_EM_collider extends GT_MetaTileEntity_MultiblockB private void makeEU(double massDiff) { plasmaEnergy += massDiff * MASS_TO_EU_INSTANT; - System.out.println("plasmaEnergy = " + plasmaEnergy); + if (DEBUG_MODE) { + System.out.println("plasmaEnergy = " + plasmaEnergy); + } } private cElementalInstanceStackMap tickStack() { @@ -476,7 +512,7 @@ public class GT_MetaTileEntity_EM_collider extends GT_MetaTileEntity_MultiblockB eTier = 0; return false; } - if (structureCheck_EM("main",11, 1, 18)) { + if (structureCheck_EM("main", 11, 1, 18)) { return true; } eTier = 0; @@ -541,7 +577,7 @@ public class GT_MetaTileEntity_EM_collider extends GT_MetaTileEntity_MultiblockB makeEU(fuse(partner)); break; case COLLIDE_MODE: - //collide(partner);//todo + collide(partner);//todo break; default: { outputEM = new cElementalInstanceStackMap[2]; @@ -675,7 +711,7 @@ public class GT_MetaTileEntity_EM_collider extends GT_MetaTileEntity_MultiblockB iGregTechTileEntity.getZCoord() + zDir, TT_Container_Casings.sHintCasingsTT, 12); } - structureBuild_EM("main",11, 1, 18,hintsOnly, stackSize); + structureBuild_EM("main", 11, 1, 18, hintsOnly, stackSize); } @Override diff --git a/src/main/java/com/github/technus/tectech/util/DoubleCount.java b/src/main/java/com/github/technus/tectech/util/DoubleCount.java new file mode 100644 index 0000000000..e7ef18be08 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/util/DoubleCount.java @@ -0,0 +1,113 @@ +package com.github.technus.tectech.util; + +import java.util.Arrays; + +import static java.lang.Math.max; +import static java.lang.Math.ulp; + +public class DoubleCount { + public static double[] distribute(double count,double... probabilities){ + if(probabilities==null){ + return null; + }else if(count==0){ + return new double[probabilities.length]; + }else { + switch (probabilities.length){ + default: { + int size=probabilities.length; + double[] output=new double[size]; + size--; + double remaining=count,previous=probabilities[size],probability,out,sum=0; + for (int i = size - 1; i >= 0; i--) { + probability=probabilities[i]; + remaining-=out=count*probability; + sum+=output[i]=out-ulp(out); + if(previouscount){ + throw new ArithmeticException("Too much outputted: "+ Arrays.toString(output)+" "+sum+" / "+count); + } + return output; + } + case 1: return new double[]{count}; + case 0: return probabilities;//empty array at hand... + } + } + } + + public static double div(double count,double divisor){ + if (divisor == 0) { + throw new ArithmeticException("Divide by 0"); + }else if(count==0 || divisor==1){ + return count; + }else if(divisor==-1){ + return -count; + } else { + double result = count / divisor; + if(result*count<0){ + return 0; + } + return result-ulp(result); + } + } + + public static double mul(double count,double multiplier){ + if(count==0 || multiplier==1){ + return count; + }else if(multiplier==-1){ + return -count; + } else { + double result = count * multiplier; + if(result*count<0){ + return 0; + } + return result-ulp(result); + } + } + + public static double sub(double count,double value){ + if(value==0){ + return count; + } + if(count==0){ + return -value; + } + if(value==count){ + return 0; + } + return value < 0 ? addInternal(count, -value) : subInternal(count, value); + } + + public static double add(double count,double value){ + if(value==0){ + return count; + } + if(count==0){ + return value; + } + return value < 0 ? subInternal(count, -value) : addInternal(count, value); + } + + private static double subInternal(double count,double value){ + double result = count - max(value,ulp(count)); + if (result+value>count || value>count-result){ + result-=ulp(result); + } + return result; + } + + private static double addInternal(double count,double value){ + double result = count + value; + if (result-value>count || result-count>value){ + result-=ulp(result); + } + return result; + } +} -- cgit From 69c8841a2f201cafcea26073d5d2da0613cc4dc1 Mon Sep 17 00:00:00 2001 From: Tec Date: Sat, 18 Jul 2020 13:01:56 +0200 Subject: Rework machines --- ...GT_MetaTileEntity_Hatch_ElementalContainer.java | 6 +- .../GT_MetaTileEntity_Hatch_OverflowElemental.java | 20 +++---- .../multi/GT_MetaTileEntity_EM_decay.java | 2 +- .../multi/GT_MetaTileEntity_EM_dequantizer.java | 4 +- .../multi/GT_MetaTileEntity_EM_quantizer.java | 4 +- .../multi/base/MultiblockControl.java | 68 +++++++++++----------- .../multi/em_machine/Behaviour_Centrifuge.java | 62 +++++++++++--------- 7 files changed, 87 insertions(+), 79 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ElementalContainer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ElementalContainer.java index d0b9411773..bf84663058 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ElementalContainer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ElementalContainer.java @@ -43,7 +43,7 @@ public abstract class GT_MetaTileEntity_Hatch_ElementalContainer extends GT_Meta protected cElementalInstanceStackMap content = new cElementalInstanceStackMap(); //float lifeTimeMult=1f; public int postEnergize = 0; - public float overflowMatter = 0f; + public double overflowMatter = 0f; public short id = -1; private byte deathDelay = 2; @@ -80,7 +80,7 @@ public abstract class GT_MetaTileEntity_Hatch_ElementalContainer extends GT_Meta super.saveNBTData(aNBT); aNBT.setInteger("postEnergize", postEnergize); //aNBT.setFloat("lifeTimeMult",lifeTimeMult); - aNBT.setFloat("overflowMatter", overflowMatter); + aNBT.setDouble("OverflowMatter", overflowMatter); aNBT.setTag("eM_Stacks", content.toNBT()); aNBT.setShort("eID", id); } @@ -90,7 +90,7 @@ public abstract class GT_MetaTileEntity_Hatch_ElementalContainer extends GT_Meta super.loadNBTData(aNBT); postEnergize = aNBT.getInteger("postEnergize"); //lifeTimeMult=aNBT.getFloat("lifeTimeMult"); - overflowMatter = aNBT.getFloat("overflowMatter"); + overflowMatter = aNBT.getFloat("overflowMatter")+aNBT.getDouble("OverflowMatter"); id = aNBT.getShort("eID"); try { content = cElementalInstanceStackMap.fromNBT(aNBT.getCompoundTag("eM_Stacks")); diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_OverflowElemental.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_OverflowElemental.java index ad7f1fe159..a5e6dc4d5d 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_OverflowElemental.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_OverflowElemental.java @@ -44,13 +44,13 @@ public class GT_MetaTileEntity_Hatch_OverflowElemental extends GT_MetaTileEntity private static Textures.BlockIcons.CustomIcon EM_T_ACTIVE; public static Textures.BlockIcons.CustomIcon MufflerEM; public static Textures.BlockIcons.CustomIcon MufflerEMidle; - private float overflowMatter; - public final float overflowMax; - private final float overflowDisperse; + private double overflowMatter; + public final double overflowMax; + private final double overflowDisperse; private String clientLocale = "en_US"; - public GT_MetaTileEntity_Hatch_OverflowElemental(int aID, String aName, String aNameRegional, int aTier, float max) { + public GT_MetaTileEntity_Hatch_OverflowElemental(int aID, String aName, String aNameRegional, int aTier, double max) { super(aID, aName, aNameRegional, aTier, 0, translateToLocal("gt.blockmachines.hatch.emmuffler.desc.0"));//Disposes excess elemental Matter overflowMatter = max / 2; overflowMax = max; @@ -58,7 +58,7 @@ public class GT_MetaTileEntity_Hatch_OverflowElemental extends GT_MetaTileEntity Util.setTier(aTier, this); } - public GT_MetaTileEntity_Hatch_OverflowElemental(String aName, int aTier, float max, String aDescription, ITexture[][][] aTextures) { + public GT_MetaTileEntity_Hatch_OverflowElemental(String aName, int aTier, double max, String aDescription, ITexture[][][] aTextures) { super(aName, aTier, 0, aDescription, aTextures); overflowMatter = max / 2; overflowMax = max; @@ -124,13 +124,13 @@ public class GT_MetaTileEntity_Hatch_OverflowElemental extends GT_MetaTileEntity @Override public void saveNBTData(NBTTagCompound aNBT) { super.saveNBTData(aNBT); - aNBT.setFloat("overflowMatter", overflowMatter); + aNBT.setDouble("OverflowMatter", overflowMatter); } @Override public void loadNBTData(NBTTagCompound aNBT) { super.loadNBTData(aNBT); - overflowMatter = aNBT.getFloat("overflowMatter"); + overflowMatter = aNBT.getFloat("overflowMatter")+aNBT.getDouble("OverflowMatter"); } @Override @@ -235,17 +235,17 @@ public class GT_MetaTileEntity_Hatch_OverflowElemental extends GT_MetaTileEntity } //Return - Should Explode - public boolean addOverflowMatter(float matter) { + public boolean addOverflowMatter(double matter) { overflowMatter += matter; return overflowMatter > overflowMax; } - public float getOverflowMatter() { + public double getOverflowMatter() { return overflowMatter; } //Return - Should Explode - public boolean setOverflowMatter(float overflowMatter) { + public boolean setOverflowMatter(double overflowMatter) { this.overflowMatter = overflowMatter; return overflowMatter > overflowMax; } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java index d8ddc2c5b5..b5dc211f3a 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java @@ -144,7 +144,7 @@ public class GT_MetaTileEntity_EM_decay extends GT_MetaTileEntity_MultiblockBase //System.out.println(stack.definition.getSymbol()+" "+stack.amount); } - float preMass = outputEM[0].getMass(); + double preMass = outputEM[0].getMass(); outputEM[0].tickContent(1, 0, 1); double energyDose = ((preMass - outputEM[0].getMass()) * URANIUM_MASS_TO_EU_PARTIAL); eAmpereFlow = (long) ampereFlow.get(); diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java index 1ba1389c80..11bc0fefd7 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java @@ -74,8 +74,8 @@ public class GT_MetaTileEntity_EM_dequantizer extends GT_MetaTileEntity_Multiblo private void startRecipe(iHasElementalDefinition from, long energy) { mMaxProgresstime = 20; mEfficiencyIncrease = 10000; - float mass = from.getMass(); - float euMult = Math.abs(mass / refMass); + double mass = from.getMass(); + double euMult = Math.abs(mass / refMass); eAmpereFlow = (int) Math.ceil(Math.sqrt(Math.sqrt(euMult))); if (mass > refUnstableMass || from.getDefinition().getRawTimeSpan(energy) < STABLE_RAW_LIFE_TIME) { mEUt = (int) -V[8]; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java index a04a960bf1..d6ab35cd4b 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_quantizer.java @@ -155,8 +155,8 @@ public class GT_MetaTileEntity_EM_quantizer extends GT_MetaTileEntity_Multiblock private void startRecipe(iHasElementalDefinition into) { mMaxProgresstime = 20; mEfficiencyIncrease = 10000; - float mass = into.getMass(); - float euMult = Math.abs(mass / refMass); + double mass = into.getMass(); + double euMult = Math.abs(mass / refMass); eAmpereFlow = (int) Math.ceil(Math.sqrt(Math.sqrt(euMult))); if (mass > refUnstableMass || into.getDefinition().getRawTimeSpan(DEFAULT_ENERGY_LEVEL) < STABLE_RAW_LIFE_TIME) { mEUt = (int) -V[8]; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/MultiblockControl.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/MultiblockControl.java index 41bc0e5a37..8429bf4e67 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/MultiblockControl.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/MultiblockControl.java @@ -5,68 +5,70 @@ package com.github.technus.tectech.thing.metaTileEntity.multi.base; */ public class MultiblockControl{ - private final int[] controls=new int[7]; private final boolean shouldExplode; - private final T values; + private final T value; + private final int eUt; + private final int amperes; + private final int requiredData; + private final int effIncrease; + private final int maxProgressTime; + private final int pollutionToAdd; + private final double excessMass; - public MultiblockControl(T values, int EUt, int amperes, int requiredData, int effIncrease, int maxProgressTime){ - this.values = values; - controls[0]=EUt; - controls[1]=amperes; - controls[2]=requiredData; - controls[3]=effIncrease; - controls[4]=maxProgressTime; - shouldExplode=false; + public MultiblockControl(T value, int eUt, int amperes, int requiredData, int effIncrease, int maxProgressTime, int pollutionToAdd, double excessMass,boolean shouldExplode){ + this.value = value; + this.eUt = eUt; + this.amperes = amperes; + this.requiredData = requiredData; + this.effIncrease = effIncrease; + this.maxProgressTime = maxProgressTime; + this.pollutionToAdd = pollutionToAdd; + this.excessMass = excessMass; + this.shouldExplode=shouldExplode; } - public MultiblockControl(T values, int EUt, int amperes, int requiredData, int effIncrease, int maxProgressTime, int pollutionToAdd, float excessMass){ - this.values = values; - controls[0]=EUt; - controls[1]=amperes; - controls[2]=requiredData; - controls[3]=effIncrease; - controls[4]=maxProgressTime; - controls[5]=pollutionToAdd; - controls[6]=Float.floatToIntBits(excessMass); - shouldExplode=false; + public MultiblockControl(T value, int eUt, int amperes, int requiredData, int effIncrease, int maxProgressTime, int pollutionToAdd, double excessMass){ + this(value, eUt, amperes, requiredData, effIncrease, maxProgressTime,pollutionToAdd,excessMass,false); } - public MultiblockControl(float excessMass){ - this.values = null; - controls[6]=Float.floatToIntBits(excessMass); - shouldExplode=true; + public MultiblockControl(T value, int eUt, int amperes, int requiredData, int effIncrease, int maxProgressTime){ + this(value,eUt,amperes,requiredData,effIncrease,maxProgressTime,0,0); + } + + public MultiblockControl(double excessMass){ + this(null,0,0,0,0,0,0,excessMass,true); } public T getValue() { - return values; + return value; } public int getEUT(){ - return controls[0]; + return eUt; } public int getAmperage(){ - return controls[1]; + return amperes; } public int getRequiredData(){ - return controls[2]; + return requiredData; } public int getEffIncrease(){ - return controls[3]; + return effIncrease; } public int getMaxProgressTime(){ - return controls[4]; + return maxProgressTime; } public int getPollutionToAdd(){ - return controls[5]; + return pollutionToAdd; } - public float getExcessMass(){ - return Float.intBitsToFloat(controls[6]); + public double getExcessMass(){ + return excessMass; } public boolean shouldExplode() { diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Centrifuge.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Centrifuge.java index 9612426598..c44e5a3d42 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Centrifuge.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Centrifuge.java @@ -8,6 +8,7 @@ import com.github.technus.tectech.thing.metaTileEntity.multi.base.INameFunction; import com.github.technus.tectech.thing.metaTileEntity.multi.base.IStatusFunction; import com.github.technus.tectech.thing.metaTileEntity.multi.base.MultiblockControl; import com.github.technus.tectech.thing.metaTileEntity.multi.base.Parameters; +import com.github.technus.tectech.util.DoubleCount; import java.util.Arrays; @@ -20,7 +21,11 @@ import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStat */ public class Behaviour_Centrifuge implements GT_MetaTileEntity_EM_machine.IBehaviour { private final byte tier; - private float radius, maxRPM, maxRCF, maxForce, maxCapacity; + private double maxRPM; + private final double radius; + private final double maxRCF; + private final double maxForce; + private final double maxCapacity; private Parameters.Group.ParameterIn settingRPM, settingFraction; private final static INameFunction rpmName= (gt_metaTileEntity_em_machine, iParameter) -> "RPM Setting"; private final IStatusFunction rpmStatus= (gt_metaTileEntity_em_machine, iParameter) -> { @@ -65,12 +70,12 @@ public class Behaviour_Centrifuge implements GT_MetaTileEntity_EM_machine.IBehav //6 to 12 recommended public Behaviour_Centrifuge(int desiredTier) { tier = (byte) desiredTier; - radius = 0.5f - (12 - tier) / 64f; - maxRCF = (float) (Math.pow(Math.E, tier) * 12); - maxRPM = (float) Math.sqrt(maxRCF / (0.001118 * radius)); - float maxSafeMass = dAtomDefinition.getSomethingHeavy().getMass() * (1 << tier); + radius = 0.5D - (12D - tier) / 64D; + maxRCF = Math.pow(Math.E, tier) * 12D; + maxRPM = Math.sqrt(maxRCF / (0.001118D * radius)); + double maxSafeMass = dAtomDefinition.getSomethingHeavy().getMass() * (1 << tier); maxForce = maxSafeMass * maxRCF;// (eV/c^2 * m/s) / g - maxCapacity = maxSafeMass * 4f * radius;// eV/c^2 + maxCapacity = maxSafeMass * 4D * radius;// eV/c^2 } private double getRCF(double RPM) { @@ -78,19 +83,19 @@ public class Behaviour_Centrifuge implements GT_MetaTileEntity_EM_machine.IBehav } private void addRandomly(cElementalInstanceStack me, cElementalInstanceStackMap[] toThis, int fractionCount) { - long amountPerFraction = me.amount / fractionCount; + double amountPerFraction = DoubleCount.div(me.amount,fractionCount); cElementalInstanceStack[] stacks = new cElementalInstanceStack[fractionCount]; for (int i = 0; i < fractionCount; i++) { stacks[i] = me.clone(); stacks[i].amount = amountPerFraction; toThis[i].putReplace(stacks[i]); } - int remainingAmount = (int) (me.amount % fractionCount); - while (remainingAmount > 0) { - int amountToAdd = TecTech.RANDOM.nextInt(remainingAmount) + 1; - stacks[TecTech.RANDOM.nextInt(fractionCount)].amount += amountToAdd; - remainingAmount -= amountToAdd; - } + //int remainingAmount = (int) (me.amount % fractionCount); + //while (remainingAmount > 0) { + // int amountToAdd = TecTech.RANDOM.nextInt(remainingAmount) + 1; + // stacks[TecTech.RANDOM.nextInt(fractionCount)].amount += amountToAdd; + // remainingAmount -= amountToAdd; + //} } @Override @@ -116,15 +121,16 @@ public class Behaviour_Centrifuge implements GT_MetaTileEntity_EM_machine.IBehav for (cElementalInstanceStack stack : stacks) { inputMass += Math.abs(stack.getMass()); } - float excessMass = 0; + double excessMass = 0; while (inputMass > maxCapacity) { cElementalInstanceStack randomStack = stacks[TecTech.RANDOM.nextInt(stacks.length)]; - int amountToRemove = TecTech.RANDOM.nextInt((int) randomStack.getAmount()) + 1; - randomStack.amount -= amountToRemove;//mutates the parent InstanceStackMap + double amountToRemove = TecTech.RANDOM.nextDouble()/10D * randomStack.getAmount(); + randomStack.amount=DoubleCount.sub(randomStack.amount,amountToRemove);//mutates the parent InstanceStackMap if (randomStack.amount <= 0) { input.remove(randomStack.definition); + stacks = input.values(); } - float mass = Math.abs(randomStack.getDefinition().getMass()) * amountToRemove; + double mass = Math.abs(randomStack.getDefinition().getMass()) * amountToRemove; excessMass += mass; inputMass -= mass; } @@ -147,7 +153,7 @@ public class Behaviour_Centrifuge implements GT_MetaTileEntity_EM_machine.IBehav TecTech.LOGGER.info("mixingFactor "+mixingFactor); } - int mEut = (int) (Math.pow(settingRPM.get() / maxRPM, 3f) * V[tier]); + int mEut = (int) (Math.pow(settingRPM.get() / maxRPM, 3D) * V[tier]); mEut = Math.max(mEut, 512); mEut = -mEut; int mTicks = (int) (20 * (inputMass / maxCapacity) * (fractionCount - 1)); @@ -158,8 +164,8 @@ public class Behaviour_Centrifuge implements GT_MetaTileEntity_EM_machine.IBehav stacks = input.takeAllToNewMap().values();//cleanup stacks if (stacks.length > 1) { Arrays.sort(stacks, (o1, o2) -> { - float m1 = o1.definition.getMass(); - float m2 = o2.definition.getMass(); + double m1 = o1.definition.getMass(); + double m2 = o2.definition.getMass(); if (m1 < m2) return -1; if (m1 > m2) return 1; return o1.compareTo(o2); @@ -169,17 +175,17 @@ public class Behaviour_Centrifuge implements GT_MetaTileEntity_EM_machine.IBehav for (cElementalInstanceStack stack : stacks) { double tempMass=Math.abs(stack.getMass()); if(tempMass!=0) { - long amount = stack.amount; - stack.amount *= mixingFactor; + double amount = stack.amount; + stack.amount =DoubleCount.mul(stack.amount,mixingFactor); addRandomly(stack, outputs, fractionCount); - stack.amount = amount - stack.amount; + stack.amount = DoubleCount.sub(amount,stack.amount); absMassPerOutput += tempMass; } } //if(DEBUG_MODE){ // TecTech.LOGGER.info("absMass "+absMassPerOutput); //} - absMassPerOutput /= fractionCount; + absMassPerOutput =DoubleCount.div(absMassPerOutput,fractionCount); if(DEBUG_MODE){ TecTech.LOGGER.info("absMassPerOutput "+absMassPerOutput); } @@ -190,7 +196,7 @@ public class Behaviour_Centrifuge implements GT_MetaTileEntity_EM_machine.IBehav for (int stackNo = 0; stackNo < stacks.length; stackNo++) { if (stacks[stackNo] != null) { double stackMass = Math.abs(stacks[stackNo].getMass()); - long amount = (long) (remaining/Math.abs(stacks[stackNo].definition.getMass())); + double amount = DoubleCount.div(remaining,Math.abs(stacks[stackNo].definition.getMass())); //if(DEBUG_MODE){ // TecTech.LOGGER.info("stackMass "+stackMass); // TecTech.LOGGER.info("defMass "+stacks[stackNo].definition.getMass()); @@ -201,15 +207,15 @@ public class Behaviour_Centrifuge implements GT_MetaTileEntity_EM_machine.IBehav addRandomly(stacks[stackNo], outputs, fractionCount); stacks[stackNo] = null; } else if (amount >= stacks[stackNo].amount) { - remaining -= stackMass; + remaining=DoubleCount.sub(remaining,stackMass); outputs[fraction].putUnify(stacks[stackNo]); stacks[stackNo] = null; } else if (amount > 0) { - remaining -= amount * stacks[stackNo].definition.getMass(); + remaining=DoubleCount.sub(remaining,DoubleCount.mul(amount,stacks[stackNo].definition.getMass())); cElementalInstanceStack clone = stacks[stackNo].clone(); clone.amount = amount; outputs[fraction].putUnify(clone); - stacks[stackNo].amount-=amount; + stacks[stackNo].amount=DoubleCount.sub(stacks[stackNo].amount,amount); //if(DEBUG_MODE){ // TecTech.LOGGER.info("remainingAfter "+remaining); // TecTech.LOGGER.info("amountCloneAfter "+clone.amount+"/"+stacks[stackNo].amount); -- cgit From f482265e5978d03e6566e1f6543f60b405f2f40c Mon Sep 17 00:00:00 2001 From: Tec Date: Sat, 18 Jul 2020 13:09:00 +0200 Subject: Implement cleanup --- .../mechanics/elementalMatter/core/cElementalInstanceStackMap.java | 2 +- .../hatch/GT_MetaTileEntity_Hatch_ElementalContainer.java | 4 ++++ .../thing/metaTileEntity/multi/em_machine/Behaviour_Recycler.java | 6 +++--- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalInstanceStackMap.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalInstanceStackMap.java index 9544d8d7e5..ae76f5dc1c 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalInstanceStackMap.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalInstanceStackMap.java @@ -552,7 +552,7 @@ public final class cElementalInstanceStackMap implements Comparable entry:map.entrySet()){ - if(entry.getValue().amount<=0) { + if(entry.getValue().amount<1) { map.remove(entry.getKey()); } } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ElementalContainer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ElementalContainer.java index bf84663058..69247d9e1a 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ElementalContainer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ElementalContainer.java @@ -81,6 +81,7 @@ public abstract class GT_MetaTileEntity_Hatch_ElementalContainer extends GT_Meta aNBT.setInteger("postEnergize", postEnergize); //aNBT.setFloat("lifeTimeMult",lifeTimeMult); aNBT.setDouble("OverflowMatter", overflowMatter); + content.cleanUp(); aNBT.setTag("eM_Stacks", content.toNBT()); aNBT.setShort("eID", id); } @@ -109,8 +110,10 @@ public abstract class GT_MetaTileEntity_Hatch_ElementalContainer extends GT_Meta if (aBaseMetaTileEntity.isServerSide()) { byte Tick = (byte) (aTick % 20); if (DECAY_AT == Tick) { + content.cleanUp(); purgeOverflow(); content.tickContentByOneSecond(1, postEnergize);//Hatches don't life time mult things + content.cleanUp(); purgeOverflow(); } else if (OVERFLOW_AT == Tick) { if (overflowMatter <= 0) { @@ -151,6 +154,7 @@ public abstract class GT_MetaTileEntity_Hatch_ElementalContainer extends GT_Meta } } else if (MOVE_AT == Tick) { if (content.hasStacks()) { + content.cleanUp(); moveAround(aBaseMetaTileEntity); } getBaseMetaTileEntity().setActive(content.hasStacks()); diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Recycler.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Recycler.java index b81dd885a5..c86c06b2a0 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Recycler.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Recycler.java @@ -11,10 +11,10 @@ import static com.github.technus.tectech.util.CommonValues.V; */ public class Behaviour_Recycler implements GT_MetaTileEntity_EM_machine.IBehaviour { private final int tier; - private final float coeff; + private final double coeff; public Behaviour_Recycler(int tier){ this.tier=tier; - coeff=(float)(1/Math.pow(2,tier-4)); + coeff=(1D/Math.pow(2D,tier-4)); } @Override @@ -27,7 +27,7 @@ public class Behaviour_Recycler implements GT_MetaTileEntity_EM_machine.IBehavio @Override public MultiblockControl process(cElementalInstanceStackMap[] inputs, GT_MetaTileEntity_EM_machine te, Parameters parameters) { - float mass=0; + double mass=0; for (cElementalInstanceStackMap input : inputs) { if (input != null) { mass += input.getMass(); -- cgit From a45c43ea42bdd0911c2c05667695441f9e0e68a5 Mon Sep 17 00:00:00 2001 From: Tec Date: Sat, 18 Jul 2020 13:12:33 +0200 Subject: Fix cleanup method --- .../mechanics/elementalMatter/core/cElementalInstanceStackMap.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalInstanceStackMap.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalInstanceStackMap.java index ae76f5dc1c..dccc0f87ae 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalInstanceStackMap.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalInstanceStackMap.java @@ -551,10 +551,6 @@ public final class cElementalInstanceStackMap implements Comparable entry:map.entrySet()){ - if(entry.getValue().amount<1) { - map.remove(entry.getKey()); - } - } + map.entrySet().removeIf(entry -> entry.getValue().amount < 1); } } -- cgit From ea07f135b704822d7ad26f20bdb2928d6cbb69e9 Mon Sep 17 00:00:00 2001 From: Tec Date: Sat, 18 Jul 2020 13:21:46 +0200 Subject: On demand static import --- .../elementalMatter/core/cElementalDecay.java | 5 +++-- .../core/cElementalInstanceStackMap.java | 10 +++++----- .../core/cElementalMutableDefinitionStackMap.java | 6 +++--- .../elementalMatter/core/cElementalStackMap.java | 9 +++++---- .../core/stacks/cElementalDefinitionStack.java | 6 +++--- .../core/stacks/cElementalInstanceStack.java | 14 +++++++------- .../multi/em_machine/Behaviour_Centrifuge.java | 22 +++++++++++----------- 7 files changed, 37 insertions(+), 35 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalDecay.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalDecay.java index 3472f15cec..e00bf2d264 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalDecay.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalDecay.java @@ -3,7 +3,8 @@ package com.github.technus.tectech.mechanics.elementalMatter.core; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalDefinitionStack; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; import com.github.technus.tectech.mechanics.elementalMatter.core.templates.iElementalDefinition; -import com.github.technus.tectech.util.DoubleCount; + +import static com.github.technus.tectech.util.DoubleCount.add; /** * Created by danie_000 on 22.10.2016. @@ -57,7 +58,7 @@ public final class cElementalDecay { //Deny decay code is in instance! double qtty = 0D; for (cElementalDefinitionStack stack : outputStacks.values()) { - qtty= DoubleCount.add(qtty,stack.amount); + qtty= add(qtty,stack.amount); } if (qtty <= 0D) { return decayResult; diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalInstanceStackMap.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalInstanceStackMap.java index dccc0f87ae..a712dc2c39 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalInstanceStackMap.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalInstanceStackMap.java @@ -4,13 +4,14 @@ import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElement import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.iHasElementalDefinition; import com.github.technus.tectech.mechanics.elementalMatter.core.templates.iElementalDefinition; -import com.github.technus.tectech.util.DoubleCount; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; import java.util.*; import static com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.cPrimitiveDefinition.nbtE__; +import static com.github.technus.tectech.util.DoubleCount.add; +import static com.github.technus.tectech.util.DoubleCount.sub; /** * Created by danie_000 on 22.01.2017. @@ -132,7 +133,7 @@ public final class cElementalInstanceStackMap implements Comparable= instance.amount; } else { - double diff = DoubleCount.sub(target.amount,instance.amount); + double diff = sub(target.amount,instance.amount); if (diff > 0) { target.amount = diff; return true; @@ -152,7 +153,7 @@ public final class cElementalInstanceStackMap implements Comparable= stack.getAmount(); } else { - double diff = DoubleCount.sub(target.amount,stack.getAmount()); + double diff = sub(target.amount,stack.getAmount()); if (diff > 0) { target.amount = diff; return true; @@ -381,11 +382,10 @@ public final class cElementalInstanceStackMap implements Comparable= instance.amount; } else { - double diff = DoubleCount.sub(target.amount,instance.amount); + double diff = sub(target.amount,instance.amount); if (diff > 0) { map.put(target.definition, new cElementalDefinitionStack(target.definition, diff)); return true; @@ -121,7 +121,7 @@ public final class cElementalMutableDefinitionStackMap extends cElementalStackMa if (testOnly) { return target.amount >= stack.getAmount(); } else { - double diff = DoubleCount.sub(target.amount,stack.getAmount()); + double diff = sub(target.amount,stack.getAmount()); if (diff > 0) { map.put(target.definition, new cElementalDefinitionStack(target.definition, diff)); return true; diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalStackMap.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalStackMap.java index 3e5a7f7b33..f8e7aa39e4 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalStackMap.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalStackMap.java @@ -9,6 +9,8 @@ import java.util.Collection; import java.util.Set; import java.util.TreeMap; +import static com.github.technus.tectech.util.DoubleCount.add; + /** * Created by Tec on 12.05.2017. */ @@ -65,11 +67,10 @@ abstract class cElementalStackMap implements Comparable { return var.toArray(new iElementalDefinition[0]); } - @Deprecated - public long getCountOfAllAmounts(){ - long sum=0; + public double getCountOfAllAmounts(){ + double sum=0; for(cElementalDefinitionStack stack:map.values()){ - sum+=stack.amount; + sum= add(sum,stack.amount); } return sum; } diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/stacks/cElementalDefinitionStack.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/stacks/cElementalDefinitionStack.java index 2371b1b986..a2d22c30ed 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/stacks/cElementalDefinitionStack.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/stacks/cElementalDefinitionStack.java @@ -2,10 +2,10 @@ package com.github.technus.tectech.mechanics.elementalMatter.core.stacks; import com.github.technus.tectech.mechanics.elementalMatter.core.templates.cElementalDefinition; import com.github.technus.tectech.mechanics.elementalMatter.core.templates.iElementalDefinition; -import com.github.technus.tectech.util.DoubleCount; import net.minecraft.nbt.NBTTagCompound; import static com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.cPrimitiveDefinition.null__; +import static com.github.technus.tectech.util.DoubleCount.add; /** * Created by danie_000 on 20.11.2016. @@ -61,7 +61,7 @@ public final class cElementalDefinitionStack implements iHasElementalDefinition if(amount==0) { return this; } - return new cElementalDefinitionStack(definition, DoubleCount.add(amount,this.amount)); + return new cElementalDefinitionStack(definition, add(amount,this.amount)); } public cElementalDefinitionStack addAmountIntoNewInstance(cElementalDefinitionStack... other) { @@ -70,7 +70,7 @@ public final class cElementalDefinitionStack implements iHasElementalDefinition } double l = 0; for (cElementalDefinitionStack stack : other) { - l=DoubleCount.add(l,stack.amount); + l= add(l,stack.amount); } return addAmountIntoNewInstance(l); } diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/stacks/cElementalInstanceStack.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/stacks/cElementalInstanceStack.java index fb4f0fed33..2a441150f7 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/stacks/cElementalInstanceStack.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/stacks/cElementalInstanceStack.java @@ -6,7 +6,6 @@ import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalDefin import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.templates.cElementalDefinition; import com.github.technus.tectech.mechanics.elementalMatter.core.templates.iElementalDefinition; -import com.github.technus.tectech.util.DoubleCount; import com.github.technus.tectech.util.Util; import net.minecraft.nbt.NBTTagCompound; @@ -15,6 +14,7 @@ import java.util.ArrayList; import static com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.cPrimitiveDefinition.null__; import static com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.eBosonDefinition.deadEnd; import static com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_scanner.*; +import static com.github.technus.tectech.util.DoubleCount.*; import static java.lang.Math.ulp; /** @@ -190,8 +190,8 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { if(definition.usesMultipleDecayCalls(energy)){ double amountTemp=amount; long decayCnt=(long) Math.min(Math.max(amount/DECAY_CALL_PER,MIN_MULTIPLE_DECAY_CALLS),MAX_MULTIPLE_DECAY_CALLS); - double amountPer= DoubleCount.div(amount,decayCnt); - amount=DoubleCount.sub(amount,amountPer*(--decayCnt)); + double amountPer= div(amount,decayCnt); + amount= sub(amount,amountPer*(--decayCnt)); cElementalInstanceStackMap output=decayMechanics(lifeTimeMult,apparentAge,newEnergyLevel); if(output==null){ amount=amountTemp; @@ -234,7 +234,7 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { //Use to get direct decay output providing correct decay array private cElementalInstanceStackMap exponentialDecayCompute(cElementalDecay[] decays, double lifeTimeMult, double newProductsAge, long newEnergyLevel) { double decayInverseRatio=Math.pow(2D,1D/* 1 second *//lifeTime); - double newAmount=DoubleCount.div(amount,decayInverseRatio+ulp(decayInverseRatio)); + double newAmount= div(amount,decayInverseRatio+ulp(decayInverseRatio)); //if(definition.getSymbol().startsWith("U ")) { // System.out.println("newAmount = " + newAmount); // System.out.println("amountRemaining = " + amountRemaining); @@ -253,7 +253,7 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { //split to non decaying and decaying part double amount=this.amount; - this.amount=DoubleCount.sub(this.amount,newAmount); + this.amount= sub(this.amount,newAmount); cElementalInstanceStackMap products=decayCompute(decays,lifeTimeMult,newProductsAge,newEnergyLevel); this.amount=newAmount; products.putUnify(clone()); @@ -305,7 +305,7 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { for (int i = 0; i < probabilities.length; i++) { probabilities[i]=decays[i].probability; } - double[] qttyOfDecay = DoubleCount.distribute(this.amount, probabilities); + double[] qttyOfDecay = distribute(this.amount, probabilities); //long amountRemaining = this.amount, amount = this.amount; //float remainingProbability = 1D; // @@ -406,7 +406,7 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { for (cElementalInstanceStack instance : instances) { if (instance != null && compareTo(instance) == 0) { - amount=DoubleCount.add(amount,instance.amount); + amount= add(amount,instance.amount); energyTotal += instance.energy * instance.amount; if(instance.energy>maxEnergy){ maxEnergy=instance.energy; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Centrifuge.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Centrifuge.java index c44e5a3d42..4b0842be7b 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Centrifuge.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Centrifuge.java @@ -8,13 +8,13 @@ import com.github.technus.tectech.thing.metaTileEntity.multi.base.INameFunction; import com.github.technus.tectech.thing.metaTileEntity.multi.base.IStatusFunction; import com.github.technus.tectech.thing.metaTileEntity.multi.base.MultiblockControl; import com.github.technus.tectech.thing.metaTileEntity.multi.base.Parameters; -import com.github.technus.tectech.util.DoubleCount; import java.util.Arrays; -import static com.github.technus.tectech.util.CommonValues.V; import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.*; +import static com.github.technus.tectech.util.CommonValues.V; +import static com.github.technus.tectech.util.DoubleCount.*; /** * Created by danie_000 on 24.12.2017. @@ -83,7 +83,7 @@ public class Behaviour_Centrifuge implements GT_MetaTileEntity_EM_machine.IBehav } private void addRandomly(cElementalInstanceStack me, cElementalInstanceStackMap[] toThis, int fractionCount) { - double amountPerFraction = DoubleCount.div(me.amount,fractionCount); + double amountPerFraction = div(me.amount,fractionCount); cElementalInstanceStack[] stacks = new cElementalInstanceStack[fractionCount]; for (int i = 0; i < fractionCount; i++) { stacks[i] = me.clone(); @@ -125,7 +125,7 @@ public class Behaviour_Centrifuge implements GT_MetaTileEntity_EM_machine.IBehav while (inputMass > maxCapacity) { cElementalInstanceStack randomStack = stacks[TecTech.RANDOM.nextInt(stacks.length)]; double amountToRemove = TecTech.RANDOM.nextDouble()/10D * randomStack.getAmount(); - randomStack.amount=DoubleCount.sub(randomStack.amount,amountToRemove);//mutates the parent InstanceStackMap + randomStack.amount= sub(randomStack.amount,amountToRemove);//mutates the parent InstanceStackMap if (randomStack.amount <= 0) { input.remove(randomStack.definition); stacks = input.values(); @@ -176,16 +176,16 @@ public class Behaviour_Centrifuge implements GT_MetaTileEntity_EM_machine.IBehav double tempMass=Math.abs(stack.getMass()); if(tempMass!=0) { double amount = stack.amount; - stack.amount =DoubleCount.mul(stack.amount,mixingFactor); + stack.amount = mul(stack.amount,mixingFactor); addRandomly(stack, outputs, fractionCount); - stack.amount = DoubleCount.sub(amount,stack.amount); + stack.amount = sub(amount,stack.amount); absMassPerOutput += tempMass; } } //if(DEBUG_MODE){ // TecTech.LOGGER.info("absMass "+absMassPerOutput); //} - absMassPerOutput =DoubleCount.div(absMassPerOutput,fractionCount); + absMassPerOutput = div(absMassPerOutput,fractionCount); if(DEBUG_MODE){ TecTech.LOGGER.info("absMassPerOutput "+absMassPerOutput); } @@ -196,7 +196,7 @@ public class Behaviour_Centrifuge implements GT_MetaTileEntity_EM_machine.IBehav for (int stackNo = 0; stackNo < stacks.length; stackNo++) { if (stacks[stackNo] != null) { double stackMass = Math.abs(stacks[stackNo].getMass()); - double amount = DoubleCount.div(remaining,Math.abs(stacks[stackNo].definition.getMass())); + double amount = div(remaining,Math.abs(stacks[stackNo].definition.getMass())); //if(DEBUG_MODE){ // TecTech.LOGGER.info("stackMass "+stackMass); // TecTech.LOGGER.info("defMass "+stacks[stackNo].definition.getMass()); @@ -207,15 +207,15 @@ public class Behaviour_Centrifuge implements GT_MetaTileEntity_EM_machine.IBehav addRandomly(stacks[stackNo], outputs, fractionCount); stacks[stackNo] = null; } else if (amount >= stacks[stackNo].amount) { - remaining=DoubleCount.sub(remaining,stackMass); + remaining= sub(remaining,stackMass); outputs[fraction].putUnify(stacks[stackNo]); stacks[stackNo] = null; } else if (amount > 0) { - remaining=DoubleCount.sub(remaining,DoubleCount.mul(amount,stacks[stackNo].definition.getMass())); + remaining= sub(remaining, mul(amount,stacks[stackNo].definition.getMass())); cElementalInstanceStack clone = stacks[stackNo].clone(); clone.amount = amount; outputs[fraction].putUnify(clone); - stacks[stackNo].amount=DoubleCount.sub(stacks[stackNo].amount,amount); + stacks[stackNo].amount= sub(stacks[stackNo].amount,amount); //if(DEBUG_MODE){ // TecTech.LOGGER.info("remainingAfter "+remaining); // TecTech.LOGGER.info("amountCloneAfter "+clone.amount+"/"+stacks[stackNo].amount); -- cgit From f2cbb5c88aff3b3f0f3908601328c53ee652f9dd Mon Sep 17 00:00:00 2001 From: basdxz Date: Sat, 18 Jul 2020 12:35:36 +0100 Subject: Created Global Tesla List --- .../tectech/thing/cover/GT_Cover_TM_TeslaCoil.java | 17 ++++++++++++-- .../cover/GT_Cover_TM_TeslaCoil_Ultimate.java | 2 +- .../multi/GT_MetaTileEntity_TM_teslaCoil.java | 20 +++++++++++++--- .../single/GT_MetaTileEntity_TeslaCoil.java | 27 +++++++++++++++++++++- 4 files changed, 59 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil.java b/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil.java index 721f730960..8be875ff4f 100644 --- a/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil.java @@ -1,16 +1,25 @@ package com.github.technus.tectech.thing.cover; import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.util.GT_CoverBehavior; import gregtech.api.util.GT_Utility; import net.minecraft.entity.player.EntityPlayer; +import static com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_TM_teslaCoil.teslaNodeSet; import static ic2.api.info.Info.DMG_ELECTRIC; public class GT_Cover_TM_TeslaCoil extends GT_CoverBehavior { public GT_Cover_TM_TeslaCoil() { } + public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer) { + if (aTileEntity.getEUCapacity() > 0) { + teslaNodeSet.add(aTileEntity.getIGregTechTileEntityOffset(0, 0, 0)); + } + return super.doCoverThings(aSide, aInputRedstone, aCoverID, aCoverVariable, aTileEntity, aTimer); + } + public String getDescription(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { return "Do not attempt to use screwdriver!"; } @@ -20,9 +29,13 @@ public class GT_Cover_TM_TeslaCoil extends GT_CoverBehavior { } public int onCoverScrewdriverclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if(aTileEntity.getStoredEU() > 0 && !GT_Utility.isWearingFullElectroHazmat(aPlayer)){ + if (aTileEntity.getStoredEU() > 0 && !GT_Utility.isWearingFullElectroHazmat(aPlayer)) { aPlayer.attackEntityFrom(DMG_ELECTRIC, 20); } return aCoverVariable; } -} \ No newline at end of file + + public int getTickRate(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return 200; + } +} diff --git a/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil_Ultimate.java b/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil_Ultimate.java index db7c751fc6..2b5db1f5c9 100644 --- a/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil_Ultimate.java +++ b/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil_Ultimate.java @@ -26,4 +26,4 @@ public class GT_Cover_TM_TeslaCoil_Ultimate extends GT_Cover_TM_TeslaCoil { public boolean letsFluidOut(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity) { return true; } -} \ No newline at end of file +} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java index 09f6d597ad..7d12302477 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java @@ -5,8 +5,8 @@ import com.github.technus.tectech.loader.NetworkDispatcher; import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.mechanics.spark.RendererMessage; import com.github.technus.tectech.mechanics.spark.ThaumSpark; -import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; +import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; import com.github.technus.tectech.thing.cover.GT_Cover_TM_TeslaCoil; import com.github.technus.tectech.thing.cover.GT_Cover_TM_TeslaCoil_Ultimate; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Capacitor; @@ -47,7 +47,6 @@ import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBloc import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.*; import static com.github.technus.tectech.util.CommonValues.V; import static com.github.technus.tectech.util.Util.entriesSortedByValues; -import static com.github.technus.tectech.util.Util.map; import static gregtech.api.enums.GT_Values.E; import static java.lang.Math.max; import static java.lang.Math.min; @@ -74,8 +73,9 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock private FluidStack[] mOutputFluidsQueue; //Used to buffer the fluid outputs, so the tesla takes a second to 'cool' any plasma it would output as a gas + public static final HashSet teslaNodeSet = new HashSet<>(); //Targets for power transmission //TODO Make this fill more efficently and globally private final HashSet sparkList = new HashSet<>(); //Thaumcraft lighting coordinate pairs, so we can send them in bursts and save on lag - private final Map eTeslaMap = new HashMap<>(); //Targets for power transmission //TODO Make this fill more efficently and globally + private final Map eTeslaMap = new HashMap<>(); //Targets for power transmission private final ArrayList eCapacitorHatches = new ArrayList<>(); //Capacitor hatches which determine the max voltage tier and count of amps private int scanTime = 0; //Scan timer used for tesla search intervals //TODO Replace with something that fetches from a global map @@ -519,6 +519,11 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock @Override public void onRemoval() { super.onRemoval(); + IGregTechTileEntity aBaseMetaTileEntity = this.getBaseMetaTileEntity(); + if (aBaseMetaTileEntity.isClientSide()) { + return; + } + teslaNodeSet.remove(aBaseMetaTileEntity); for (GT_MetaTileEntity_Hatch_Capacitor cap : eCapacitorHatches) { if (GT_MetaTileEntity_MultiBlockBase.isValidMetaTileEntity(cap)) { cap.getBaseMetaTileEntity().setActive(false); @@ -592,6 +597,7 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock public void loadNBTData(NBTTagCompound aNBT) { super.loadNBTData(aNBT); energyCapacity = aNBT.getLong("eEnergyCapacity"); + teslaNodeSet.add(this.getBaseMetaTileEntity()); } @Override @@ -607,6 +613,14 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock energyFractionDisplay.set(0); } + @Override + public void onFirstTick_EM(IGregTechTileEntity aBaseMetaTileEntity) { + super.onFirstTick_EM(aBaseMetaTileEntity); + if (!aBaseMetaTileEntity.isClientSide()) { + teslaNodeSet.add(aBaseMetaTileEntity); + } + } + @Override public boolean onRunningTick(ItemStack aStack) { IGregTechTileEntity mte = getBaseMetaTileEntity(); diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java index 0f73750d48..47625b999f 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java @@ -17,6 +17,7 @@ import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicBatteryBuffer; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.reflect.FieldUtils; @@ -26,6 +27,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Map; +import static com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_TM_teslaCoil.teslaNodeSet; import static com.github.technus.tectech.util.CommonValues.V; import static com.github.technus.tectech.util.Util.entriesSortedByValues; import static com.github.technus.tectech.util.Util.map; @@ -38,7 +40,7 @@ import static net.minecraft.util.StatCollector.translateToLocalFormatted; public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryBuffer { private final static int perBlockLoss = TecTech.configTecTech.TESLA_SINGLE_LOSS_PER_BLOCK;//Default is 1 private final static float overDriveLoss = TecTech.configTecTech.TESLA_SINGLE_OVERDRIVE_LOSS_FACTOR;//Default is 0.25F - + public Map eTeslaMap = new HashMap<>();//Tesla Map to map them tesla bois! private final static HashSet sparkList = new HashSet<>(); private byte sparkCount = 0; @@ -229,6 +231,29 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB return new long[]{outputVoltageInjectable, outputVoltageConsumption}; } + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + super.onFirstTick(aBaseMetaTileEntity); + if (!aBaseMetaTileEntity.isClientSide()) { + teslaNodeSet.add(aBaseMetaTileEntity); + } + } + + @Override + public void onRemoval() { + super.onRemoval(); + IGregTechTileEntity aBaseMetaTileEntity = this.getBaseMetaTileEntity(); + if (!aBaseMetaTileEntity.isClientSide()) { + teslaNodeSet.remove(aBaseMetaTileEntity); + } + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + teslaNodeSet.add(this.getBaseMetaTileEntity()); + } + @Override public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { super.onPostTick(aBaseMetaTileEntity, aTick); -- cgit From e30e92732ae6ef0117db8c9be7e0f8b0eeab5e0b Mon Sep 17 00:00:00 2001 From: Tec Date: Sat, 18 Jul 2020 17:02:45 +0200 Subject: Up atom counts by AVOGADRO_CONSTANT for more smooth compute --- .../tectech/compatibility/gtpp/GtppAtomLoader.java | 53 ++--- .../entity/projectiles/projectileEM.java | 2 +- .../transformations/aFluidDequantizationInfo.java | 8 +- .../transformations/aFluidQuantizationInfo.java | 8 +- .../transformations/aItemDequantizationInfo.java | 2 +- .../transformations/aItemQuantizationInfo.java | 2 +- .../aOredictDequantizationInfo.java | 19 +- .../transformations/aOredictQuantizationInfo.java | 25 +-- .../core/transformations/bTransformationInfo.java | 22 +-- .../core/transformations/iExchangeInfo.java | 6 +- .../definitions/complex/dAtomDefinition.java | 220 ++++++++++----------- .../definitions/complex/dHadronDefinition.java | 9 +- ...GT_MetaTileEntity_Hatch_ElementalContainer.java | 11 +- .../multi/GT_MetaTileEntity_EM_collider.java | 3 +- .../multi/GT_MetaTileEntity_EM_decay.java | 3 +- .../multi/GT_MetaTileEntity_EM_dequantizer.java | 53 ++--- .../base/GT_MetaTileEntity_MultiblockBase_EM.java | 22 ++- .../multi/em_machine/Behaviour_Centrifuge.java | 3 +- .../Behaviour_ElectromagneticSeparator.java | 47 +++-- 19 files changed, 246 insertions(+), 272 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/compatibility/gtpp/GtppAtomLoader.java b/src/main/java/com/github/technus/tectech/compatibility/gtpp/GtppAtomLoader.java index ad24f72cb0..333747d632 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/gtpp/GtppAtomLoader.java +++ b/src/main/java/com/github/technus/tectech/compatibility/gtpp/GtppAtomLoader.java @@ -6,6 +6,7 @@ import net.minecraftforge.fluids.FluidStack; import java.lang.reflect.Method; +import static com.github.technus.tectech.mechanics.elementalMatter.core.transformations.bTransformationInfo.AVOGADRO_CONSTANT_144; import static com.github.technus.tectech.mechanics.elementalMatter.definitions.complex.dAtomDefinition.*; public class GtppAtomLoader implements Runnable{ @@ -57,34 +58,34 @@ public class GtppAtomLoader implements Runnable{ } //endregion - transformation.addFluid(new cElementalDefinitionStack(getFirstStableIsotope(10), 144), getFluid("NEON",144)); + TRANSFORMATION_INFO.addFluid(new cElementalDefinitionStack(getFirstStableIsotope(10), AVOGADRO_CONSTANT_144), getFluid("NEON",144)); generate("GERMANIUM",true,true); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(32), 144), OrePrefixes.dust, getUnlocalizedName("GERMANIUM"),1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(34), 144), OrePrefixes.dust, getUnlocalizedName("SELENIUM"),1); - transformation.addFluid(new cElementalDefinitionStack(getFirstStableIsotope(35), 144), getFluid("BROMINE",144)); - transformation.addFluid(new cElementalDefinitionStack(getFirstStableIsotope(36), 144), getFluid("KRYPTON",144)); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(40), 144),OrePrefixes.dust, getUnlocalizedName("ZIRCONIUM"),1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(43), 144),OrePrefixes.dust, getUnlocalizedName("TECHNETIUM"),1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(44), 144),OrePrefixes.dust, getUnlocalizedName("RUTHENIUM"),1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(45), 144),OrePrefixes.dust, getUnlocalizedName("RHODIUM"),1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(53), 144),OrePrefixes.dust, getUnlocalizedName("IODINE"),1); - transformation.addFluid(new cElementalDefinitionStack(getFirstStableIsotope(54), 144),getFluid("XENON",144)); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(72), 144),OrePrefixes.dust, getUnlocalizedName("HAFNIUM"),1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(75), 144),OrePrefixes.dust, getUnlocalizedName("RHENIUM"),1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(81), 144),OrePrefixes.dust, getUnlocalizedName("THALLIUM"),1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(32), AVOGADRO_CONSTANT_144), OrePrefixes.dust, getUnlocalizedName("GERMANIUM"),1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(34), AVOGADRO_CONSTANT_144), OrePrefixes.dust, getUnlocalizedName("SELENIUM"),1); + TRANSFORMATION_INFO.addFluid(new cElementalDefinitionStack(getFirstStableIsotope(35), AVOGADRO_CONSTANT_144), getFluid("BROMINE",144)); + TRANSFORMATION_INFO.addFluid(new cElementalDefinitionStack(getFirstStableIsotope(36), AVOGADRO_CONSTANT_144), getFluid("KRYPTON",144)); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(40), AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("ZIRCONIUM"),1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(43), AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("TECHNETIUM"),1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(44), AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("RUTHENIUM"),1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(45), AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("RHODIUM"),1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(53), AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("IODINE"),1); + TRANSFORMATION_INFO.addFluid(new cElementalDefinitionStack(getFirstStableIsotope(54), AVOGADRO_CONSTANT_144),getFluid("XENON",144)); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(72), AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("HAFNIUM"),1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(75), AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("RHENIUM"),1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(81), AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("THALLIUM"),1); - transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(84),144),OrePrefixes.dust, getUnlocalizedName("POLONIUM"),1); - transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(85),144),OrePrefixes.dust, getUnlocalizedName("ASTATINE"),1); - transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(87),144),OrePrefixes.dust, getUnlocalizedName("FRANCIUM"),1); - transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(88),144),OrePrefixes.dust, getUnlocalizedName("RADIUM"),1); - transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(89),144),OrePrefixes.dust, getUnlocalizedName("ACTINIUM"),1); - transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(91),144),OrePrefixes.dust, getUnlocalizedName("PROTACTINIUM"),1); - transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(93),144),OrePrefixes.dust, getUnlocalizedName("NEPTUNIUM"),1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(84),AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("POLONIUM"),1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(85),AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("ASTATINE"),1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(87),AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("FRANCIUM"),1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(88),AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("RADIUM"),1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(89),AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("ACTINIUM"),1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(91),AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("PROTACTINIUM"),1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(93),AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("NEPTUNIUM"),1); - transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(96),144),OrePrefixes.dust, getUnlocalizedName("CURIUM"),1); - transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(97),144),OrePrefixes.dust, getUnlocalizedName("BERKELIUM"),1); - transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(98),144),OrePrefixes.dust, getUnlocalizedName("CALIFORNIUM"),1); - transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(99),144),OrePrefixes.dust, getUnlocalizedName("EINSTEINIUM"),1); - transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(100),144),OrePrefixes.dust, getUnlocalizedName("FERMIUM"),1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(96),AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("CURIUM"),1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(97),AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("BERKELIUM"),1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(98),AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("CALIFORNIUM"),1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(99),AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("EINSTEINIUM"),1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(100),AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("FERMIUM"),1); } } diff --git a/src/main/java/com/github/technus/tectech/compatibility/openmodularturrets/entity/projectiles/projectileEM.java b/src/main/java/com/github/technus/tectech/compatibility/openmodularturrets/entity/projectiles/projectileEM.java index e8163833ee..702ed77315 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/openmodularturrets/entity/projectiles/projectileEM.java +++ b/src/main/java/com/github/technus/tectech/compatibility/openmodularturrets/entity/projectiles/projectileEM.java @@ -59,7 +59,7 @@ public class projectileEM extends LaserProjectile { avalableEM.clear(); } else { cElementalInstanceStack consumeFromThis=avalableEM.get(TecTech.RANDOM.nextInt(avalableEM.size())); - massFactor =consumeFromThis.definition.getMass()/ dHadronDefinition.hadron_n_.getMass(); + massFactor =(float) (consumeFromThis.definition.getMass()/ dHadronDefinition.hadron_n_.getMass()); if(consumeFromThis.definition.getType()>1 || consumeFromThis.definition.getType()<-1) { exotic = true; diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/aFluidDequantizationInfo.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/aFluidDequantizationInfo.java index 057d9cdb36..3d8b7a881f 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/aFluidDequantizationInfo.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/aFluidDequantizationInfo.java @@ -7,7 +7,7 @@ import net.minecraftforge.fluids.FluidStack; /** * Created by Tec on 23.05.2017. */ -public class aFluidDequantizationInfo implements iExchangeInfo { +public class aFluidDequantizationInfo implements iExchangeInfo { private final iHasElementalDefinition in; private final FluidStack out; @@ -16,12 +16,6 @@ public class aFluidDequantizationInfo implements iExchangeInfo { out=fluidStackOut; } - @Deprecated - public aFluidDequantizationInfo(iHasElementalDefinition emIn ,int fluidID,int fluidAmount) { - in = emIn; - out = new FluidStack(fluidID, fluidAmount); - } - public aFluidDequantizationInfo(iHasElementalDefinition emIn, Fluid fluid, int fluidAmount){ in=emIn; out=new FluidStack(fluid,fluidAmount); diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/aFluidQuantizationInfo.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/aFluidQuantizationInfo.java index 57ce67bf6d..563b87f8ee 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/aFluidQuantizationInfo.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/aFluidQuantizationInfo.java @@ -7,7 +7,7 @@ import net.minecraftforge.fluids.FluidStack; /** * Created by Tec on 23.05.2017. */ -public class aFluidQuantizationInfo implements iExchangeInfo { +public class aFluidQuantizationInfo implements iExchangeInfo { private final FluidStack in; private final iHasElementalDefinition out; @@ -16,12 +16,6 @@ public class aFluidQuantizationInfo implements iExchangeInfo { out=emOut; } - @Deprecated - public aFluidQuantizationInfo(int fluidID,int fluidAmount, iHasElementalDefinition emOut){ - in=new FluidStack(fluidID,fluidAmount); - out=emOut; - } - public aFluidQuantizationInfo(Fluid fluid, int fluidAmount, iHasElementalDefinition emOut){ in=new FluidStack(fluid,fluidAmount); out=emOut; diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/aItemDequantizationInfo.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/aItemDequantizationInfo.java index b764f59863..8b42c61d6c 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/aItemDequantizationInfo.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/aItemDequantizationInfo.java @@ -9,7 +9,7 @@ import net.minecraft.item.ItemStack; /** * Created by Tec on 23.05.2017. */ -public class aItemDequantizationInfo implements iExchangeInfo { +public class aItemDequantizationInfo implements iExchangeInfo { private final iHasElementalDefinition in; private final ItemStack out; diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/aItemQuantizationInfo.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/aItemQuantizationInfo.java index 80179e1eb8..8f33f5096d 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/aItemQuantizationInfo.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/aItemQuantizationInfo.java @@ -11,7 +11,7 @@ import net.minecraftforge.oredict.OreDictionary; /** * Created by Tec on 23.05.2017. */ -public class aItemQuantizationInfo implements iExchangeInfo { +public class aItemQuantizationInfo implements iExchangeInfo { private final ItemStack in; private final boolean skipNBT; private final iHasElementalDefinition out; diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/aOredictDequantizationInfo.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/aOredictDequantizationInfo.java index 51b1a6806d..bbf94682b4 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/aOredictDequantizationInfo.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/aOredictDequantizationInfo.java @@ -3,37 +3,30 @@ package com.github.technus.tectech.mechanics.elementalMatter.core.transformation import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.iHasElementalDefinition; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; -import net.minecraftforge.oredict.OreDictionary; /** * Created by Tec on 23.05.2017. */ -public class aOredictDequantizationInfo implements iExchangeInfo { +public class aOredictDequantizationInfo implements iExchangeInfo { private final iHasElementalDefinition in; - public final int out; + public final String out; public final int amount; - public aOredictDequantizationInfo(iHasElementalDefinition emIn, int id, int qty) { - in = emIn; - out = id; - amount = qty; - } - public aOredictDequantizationInfo(iHasElementalDefinition emIn, String name, int qty) { in = emIn; - out = OreDictionary.getOreID(name); + out =name; amount = qty; } public aOredictDequantizationInfo(iHasElementalDefinition emIn, OrePrefixes prefix, Materials material, int qty) { in = emIn; - out = OreDictionary.getOreID(prefix.name() + material.mName); + out = prefix.name() + material.mName; amount = qty; } public aOredictDequantizationInfo(iHasElementalDefinition emIn, OrePrefixes prefix, String materialName, int qty) { in = emIn; - out = OreDictionary.getOreID(prefix.name() + materialName); + out = prefix.name() + materialName; amount = qty; } @@ -43,7 +36,7 @@ public class aOredictDequantizationInfo implements iExchangeInfo { } @Override - public Integer output() { + public String output() { return out; } diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/aOredictQuantizationInfo.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/aOredictQuantizationInfo.java index 99e8589060..964d317b80 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/aOredictQuantizationInfo.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/aOredictQuantizationInfo.java @@ -3,42 +3,35 @@ package com.github.technus.tectech.mechanics.elementalMatter.core.transformation import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.iHasElementalDefinition; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; -import net.minecraftforge.oredict.OreDictionary; /** * Created by Tec on 23.05.2017. */ -public class aOredictQuantizationInfo implements iExchangeInfo { - public final int in; +public class aOredictQuantizationInfo implements iExchangeInfo { + public final String in; public final int amount; private final iHasElementalDefinition out; - public aOredictQuantizationInfo(int id, int qty, iHasElementalDefinition emOut){ - in=id; - amount=qty; - out=emOut; - } - public aOredictQuantizationInfo(String name, int qty, iHasElementalDefinition emOut){ - in=OreDictionary.getOreID(name); + in=name; amount=qty; out=emOut; } - public aOredictQuantizationInfo( OrePrefixes prefix, Materials material, int qty, iHasElementalDefinition emOut){ - in=OreDictionary.getOreID(prefix.name() + material.mName); + public aOredictQuantizationInfo(OrePrefixes prefix, Materials material, int qty, iHasElementalDefinition emOut){ + in=prefix.name() + material.mName; amount=qty; out=emOut; } - public aOredictQuantizationInfo( OrePrefixes prefix, String materialName, int qty, iHasElementalDefinition emOut){ - in=OreDictionary.getOreID(prefix.name() + materialName); + public aOredictQuantizationInfo(OrePrefixes prefix, String materialName, int qty, iHasElementalDefinition emOut){ + in=prefix.name() + materialName; amount=qty; out=emOut; } @Override - public Integer input() { + public String input() { return in; } @@ -49,7 +42,7 @@ public class aOredictQuantizationInfo implements iExchangeInfo { @Override public int hashCode() { - return in; + return in.hashCode(); } @Override diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/bTransformationInfo.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/bTransformationInfo.java index c23894d6b1..24ae8d0481 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/bTransformationInfo.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/bTransformationInfo.java @@ -17,13 +17,17 @@ import static com.github.technus.tectech.thing.item.DebugElementalInstanceContai * Created by Tec on 26.05.2017. */ public class bTransformationInfo { + public static final double AVOGADRO_CONSTANT =6.02214076e23D; + public static final double AVOGADRO_CONSTANT_144 =AVOGADRO_CONSTANT*144D; + public static final HashMap fluidQuantization=new HashMap<>(32); + public static final HashMap itemQuantization=new HashMap<>(32); + public static final HashMap oredictQuantization=new HashMap<>(32); + public HashMap fluidDequantization; - public static final HashMap itemQuantization=new HashMap<>(32); public HashMap itemDequantization; - public static final HashMap oredictQuantization=new HashMap<>(32); public HashMap oredictDequantization; public bTransformationInfo(int fluidCap,int itemCap, int oreCap){ @@ -45,13 +49,6 @@ public class bTransformationInfo { STACKS_REGISTERED.add(em.getDefinition().getAnti()); } - public void addFluid(iHasElementalDefinition em ,int fluidID,int fluidAmount) { - fluidQuantization.put(fluidID,new aFluidQuantizationInfo(fluidID,fluidAmount,em)); - fluidDequantization.put(em.getDefinition(),new aFluidDequantizationInfo(em,fluidID,fluidAmount)); - STACKS_REGISTERED.add(em.getDefinition()); - STACKS_REGISTERED.add(em.getDefinition().getAnti()); - } - public void addFluid(iHasElementalDefinition em, Fluid fluid, int fluidAmount){ fluidQuantization.put(fluid.getID(),new aFluidQuantizationInfo(fluid,fluidAmount,em)); fluidDequantization.put(em.getDefinition(),new aFluidDequantizationInfo(em,fluid,fluidAmount)); @@ -77,13 +74,6 @@ public class bTransformationInfo { STACKS_REGISTERED.add(em.getDefinition().getAnti()); } - public void addOredict(iHasElementalDefinition em, int id, int qty){ - oredictQuantization.put(id,new aOredictQuantizationInfo(id,qty,em)); - oredictDequantization.put(em.getDefinition(),new aOredictDequantizationInfo(em,id,qty)); - STACKS_REGISTERED.add(em.getDefinition()); - STACKS_REGISTERED.add(em.getDefinition().getAnti()); - } - public void addOredict(iHasElementalDefinition em, String name, int qty){ oredictQuantization.put(OreDictionary.getOreID(name),new aOredictQuantizationInfo(name,qty,em)); oredictDequantization.put(em.getDefinition(),new aOredictDequantizationInfo(em,name,qty)); diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/iExchangeInfo.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/iExchangeInfo.java index f4e77bfe2b..2e8ef92073 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/iExchangeInfo.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/iExchangeInfo.java @@ -3,9 +3,9 @@ package com.github.technus.tectech.mechanics.elementalMatter.core.transformation /** * Created by Tec on 23.05.2017. */ -public interface iExchangeInfo { - Object output();//what should be given - ItemStack,FluidStack,AspectStack, (EM definitionStack->)EM instance stack - etc. +public interface iExchangeInfo { + OUT output();//what should be given - ItemStack,FluidStack,AspectStack, (EM definitionStack->)EM instance stack - etc. //This must return new Object! - if obj is immutable don't care that much (applies to defStacks) - Object input();//same as above but for input + IN input();//same as above but for input } diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dAtomDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dAtomDefinition.java index e2a3e9e542..b1801b9b25 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dAtomDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dAtomDefinition.java @@ -25,6 +25,7 @@ import net.minecraft.nbt.NBTTagCompound; import java.util.*; +import static com.github.technus.tectech.mechanics.elementalMatter.core.transformations.bTransformationInfo.AVOGADRO_CONSTANT_144; import static com.github.technus.tectech.util.XSTR.XSTR_INSTANCE; import static com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.definitions.dComplexAspectDefinition.getNbtTagCompound; import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; @@ -41,7 +42,7 @@ public final class dAtomDefinition extends cElementalDefinition { private static final byte BYTE_OFFSET=32; private final int hash; - public static final bTransformationInfo transformation=new bTransformationInfo(16,0,64); + public static final bTransformationInfo TRANSFORMATION_INFO = new bTransformationInfo(16,0,64); public static double refMass, refUnstableMass; private static final byte nbtType = (byte) 'a'; @@ -1319,17 +1320,17 @@ public final class dAtomDefinition extends cElementalDefinition { @Override public aFluidDequantizationInfo someAmountIntoFluidStack() { - return transformation.fluidDequantization.get(this); + return TRANSFORMATION_INFO.fluidDequantization.get(this); } @Override public aItemDequantizationInfo someAmountIntoItemsStack() { - return null; + return TRANSFORMATION_INFO.itemDequantization.get(this); } @Override public aOredictDequantizationInfo someAmountIntoOredictStack() { - return transformation.oredictDequantization.get(this); + return TRANSFORMATION_INFO.oredictDequantization.get(this); } private static final class Nomenclature { @@ -1473,122 +1474,121 @@ public final class dAtomDefinition extends cElementalDefinition { public static void setTransformation(){ /*----STABLE ATOMS----**/ - refMass = getFirstStableIsotope(1).getMass() * 144D; - - transformation.addFluid(new cElementalDefinitionStack(getFirstStableIsotope(1), 144),Materials.Hydrogen.mGas.getID(),144); - transformation.addFluid(new cElementalDefinitionStack(getFirstStableIsotope(2), 144),Materials.Helium.mGas.getID(), 144); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(3), 144), dust, Materials.Lithium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(4), 144), dust, Materials.Beryllium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(5), 144), dust, Materials.Boron,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(6), 144), dust, Materials.Carbon,1); - transformation.addFluid(new cElementalDefinitionStack(getFirstStableIsotope(7), 144),Materials.Nitrogen.mGas.getID(), 144); - transformation.addFluid(new cElementalDefinitionStack(getFirstStableIsotope(8), 144),Materials.Oxygen.mGas.getID(), 144); - transformation.addFluid(new cElementalDefinitionStack(getFirstStableIsotope(9), 144),Materials.Fluorine.mGas.getID(), 144); - //transformation.addFluid(new cElementalDefinitionStack(getFirstStableIsotope(10), 144),Materials.Neon.mGas.getID(), 144); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(11), 144), dust, Materials.Sodium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(12), 144), dust, Materials.Magnesium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(13), 144), dust, Materials.Aluminium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(14), 144), dust, Materials.Silicon,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(15), 144), dust, Materials.Phosphorus,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(16), 144), dust, Materials.Sulfur,1); - transformation.addFluid(new cElementalDefinitionStack(getFirstStableIsotope(17), 144),Materials.Chlorine.mGas.getID(), 144); - transformation.addFluid(new cElementalDefinitionStack(getFirstStableIsotope(18), 144),Materials.Argon.mGas.getID(), 144); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(19), 144), dust, Materials.Potassium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(20), 144), dust, Materials.Calcium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(21), 144), dust, Materials.Scandium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(22), 144), dust, Materials.Titanium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(23), 144), dust, Materials.Vanadium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(24), 144), dust, Materials.Chrome,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(25), 144), dust, Materials.Manganese,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(26), 144), dust, Materials.Iron,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(27), 144), dust, Materials.Cobalt,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(28), 144), dust, Materials.Nickel,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(29), 144), dust, Materials.Copper,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(30), 144), dust, Materials.Zinc,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(31), 144), dust, Materials.Gallium,1); - //transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(32), 144),OrePrefixes.dust, Materials.Germanium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(33), 144), dust, Materials.Arsenic,1); - //transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(34), 144),OrePrefixes.dust, Materials.Selenium,1); - //transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(35), 144),OrePrefixes.dust, Materials.Bromine,1); - //transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(36), 144),OrePrefixes.dust, Materials.Krypton,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(37), 144), dust, Materials.Rubidium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(38), 144), dust, Materials.Strontium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(39), 144), dust, Materials.Yttrium,1); - //transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(40), 144),OrePrefixes.dust, Materials.Zirconium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(41), 144), dust, Materials.Niobium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(42), 144), dust, Materials.Molybdenum,1); - //transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(43), 144),OrePrefixes.dust, Materials.Technetium,1); - //transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(44), 144),OrePrefixes.dust, Materials.Ruthenium,1); - //transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(45), 144),OrePrefixes.dust, Materials.Rhodium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(46), 144), dust, Materials.Palladium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(47), 144), dust, Materials.Silver,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(48), 144), dust, Materials.Cadmium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(49), 144), dust, Materials.Indium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(50), 144), dust, Materials.Tin,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(51), 144), dust, Materials.Antimony,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(52), 144), dust, Materials.Tellurium,1); - //transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(53), 144),OrePrefixes.dust, Materials.Iodine,1); - //transformation.addFluid(new cElementalDefinitionStack(getFirstStableIsotope(54), 144),Materials.Xenon.mGas.getID(), 144); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(55), 144), dust, Materials.Caesium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(56), 144), dust, Materials.Barium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(57), 144), dust, Materials.Lanthanum,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(58), 144), dust, Materials.Cerium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(59), 144), dust, Materials.Praseodymium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(60), 144), dust, Materials.Neodymium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(61), 144), dust, Materials.Promethium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(62), 144), dust, Materials.Samarium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(63), 144), dust, Materials.Europium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(64), 144), dust, Materials.Gadolinium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(65), 144), dust, Materials.Terbium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(66), 144), dust, Materials.Dysprosium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(67), 144), dust, Materials.Holmium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(68), 144), dust, Materials.Erbium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(69), 144), dust, Materials.Thulium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(70), 144), dust, Materials.Ytterbium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(71), 144), dust, Materials.Lutetium,1); - //transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(72), 144),OrePrefixes.dust, Materials.Hafnum,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(73), 144), dust, Materials.Tantalum,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(74), 144), dust, Materials.Tungsten,1); - //transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(75), 144),OrePrefixes.dust, Materials.Rhenium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(76), 144), dust, Materials.Osmium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(77), 144), dust, Materials.Iridium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(78), 144), dust, Materials.Platinum,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(79), 144), dust, Materials.Gold,1); - transformation.addFluid(new cElementalDefinitionStack(getFirstStableIsotope(80), 144),Materials.Mercury.mFluid.getID(), 144); - //transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(81), 144),OrePrefixes.dust, Materials.Thallium,1); - transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(82), 144), dust, Materials.Lead,1); + refMass = getFirstStableIsotope(1).getMass() * AVOGADRO_CONSTANT_144; + + TRANSFORMATION_INFO.addFluid(new cElementalDefinitionStack(getFirstStableIsotope(1), AVOGADRO_CONSTANT_144),Materials.Hydrogen.mGas,144); + TRANSFORMATION_INFO.addFluid(new cElementalDefinitionStack(getFirstStableIsotope(2), AVOGADRO_CONSTANT_144),Materials.Helium.mGas, 144); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(3), AVOGADRO_CONSTANT_144), dust, Materials.Lithium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(4), AVOGADRO_CONSTANT_144), dust, Materials.Beryllium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(5), AVOGADRO_CONSTANT_144), dust, Materials.Boron,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(6), AVOGADRO_CONSTANT_144), dust, Materials.Carbon,1); + TRANSFORMATION_INFO.addFluid(new cElementalDefinitionStack(getFirstStableIsotope(7), AVOGADRO_CONSTANT_144),Materials.Nitrogen.mGas, 144); + TRANSFORMATION_INFO.addFluid(new cElementalDefinitionStack(getFirstStableIsotope(8), AVOGADRO_CONSTANT_144),Materials.Oxygen.mGas, 144); + TRANSFORMATION_INFO.addFluid(new cElementalDefinitionStack(getFirstStableIsotope(9), AVOGADRO_CONSTANT_144),Materials.Fluorine.mGas, 144); + //transformation.addFluid(new cElementalDefinitionStack(getFirstStableIsotope(10), AVOGADRO_CONSTANT_144),Materials.Neon.mGas.getID(), 144); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(11), AVOGADRO_CONSTANT_144), dust, Materials.Sodium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(12), AVOGADRO_CONSTANT_144), dust, Materials.Magnesium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(13), AVOGADRO_CONSTANT_144), dust, Materials.Aluminium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(14), AVOGADRO_CONSTANT_144), dust, Materials.Silicon,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(15), AVOGADRO_CONSTANT_144), dust, Materials.Phosphorus,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(16), AVOGADRO_CONSTANT_144), dust, Materials.Sulfur,1); + TRANSFORMATION_INFO.addFluid(new cElementalDefinitionStack(getFirstStableIsotope(17), AVOGADRO_CONSTANT_144),Materials.Argon.mGas, 144); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(19), AVOGADRO_CONSTANT_144), dust, Materials.Potassium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(20), AVOGADRO_CONSTANT_144), dust, Materials.Calcium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(21), AVOGADRO_CONSTANT_144), dust, Materials.Scandium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(22), AVOGADRO_CONSTANT_144), dust, Materials.Titanium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(23), AVOGADRO_CONSTANT_144), dust, Materials.Vanadium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(24), AVOGADRO_CONSTANT_144), dust, Materials.Chrome,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(25), AVOGADRO_CONSTANT_144), dust, Materials.Manganese,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(26), AVOGADRO_CONSTANT_144), dust, Materials.Iron,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(27), AVOGADRO_CONSTANT_144), dust, Materials.Cobalt,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(28), AVOGADRO_CONSTANT_144), dust, Materials.Nickel,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(29), AVOGADRO_CONSTANT_144), dust, Materials.Copper,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(30), AVOGADRO_CONSTANT_144), dust, Materials.Zinc,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(31), AVOGADRO_CONSTANT_144), dust, Materials.Gallium,1); + //transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(32), AVOGADRO_CONSTANT_144),OrePrefixes.dust, Materials.Germanium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(33), AVOGADRO_CONSTANT_144), dust, Materials.Arsenic,1); + //transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(34), AVOGADRO_CONSTANT_144),OrePrefixes.dust, Materials.Selenium,1); + //transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(35), AVOGADRO_CONSTANT_144),OrePrefixes.dust, Materials.Bromine,1); + //transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(36), AVOGADRO_CONSTANT_144),OrePrefixes.dust, Materials.Krypton,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(37), AVOGADRO_CONSTANT_144), dust, Materials.Rubidium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(38), AVOGADRO_CONSTANT_144), dust, Materials.Strontium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(39), AVOGADRO_CONSTANT_144), dust, Materials.Yttrium,1); + //transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(40), AVOGADRO_CONSTANT_144),OrePrefixes.dust, Materials.Zirconium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(41), AVOGADRO_CONSTANT_144), dust, Materials.Niobium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(42), AVOGADRO_CONSTANT_144), dust, Materials.Molybdenum,1); + //transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(43), AVOGADRO_CONSTANT_144),OrePrefixes.dust, Materials.Technetium,1); + //transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(44), AVOGADRO_CONSTANT_144),OrePrefixes.dust, Materials.Ruthenium,1); + //transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(45), AVOGADRO_CONSTANT_144),OrePrefixes.dust, Materials.Rhodium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(46), AVOGADRO_CONSTANT_144), dust, Materials.Palladium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(47), AVOGADRO_CONSTANT_144), dust, Materials.Silver,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(48), AVOGADRO_CONSTANT_144), dust, Materials.Cadmium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(49), AVOGADRO_CONSTANT_144), dust, Materials.Indium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(50), AVOGADRO_CONSTANT_144), dust, Materials.Tin,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(51), AVOGADRO_CONSTANT_144), dust, Materials.Antimony,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(52), AVOGADRO_CONSTANT_144), dust, Materials.Tellurium,1); + //transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(53), AVOGADRO_CONSTANT_144),OrePrefixes.dust, Materials.Iodine,1); + //transformation.addFluid(new cElementalDefinitionStack(getFirstStableIsotope(54), AVOGADRO_CONSTANT_144),Materials.Xenon.mGas.getID(), 144); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(55), AVOGADRO_CONSTANT_144), dust, Materials.Caesium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(56), AVOGADRO_CONSTANT_144), dust, Materials.Barium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(57), AVOGADRO_CONSTANT_144), dust, Materials.Lanthanum,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(58), AVOGADRO_CONSTANT_144), dust, Materials.Cerium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(59), AVOGADRO_CONSTANT_144), dust, Materials.Praseodymium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(60), AVOGADRO_CONSTANT_144), dust, Materials.Neodymium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(61), AVOGADRO_CONSTANT_144), dust, Materials.Promethium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(62), AVOGADRO_CONSTANT_144), dust, Materials.Samarium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(63), AVOGADRO_CONSTANT_144), dust, Materials.Europium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(64), AVOGADRO_CONSTANT_144), dust, Materials.Gadolinium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(65), AVOGADRO_CONSTANT_144), dust, Materials.Terbium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(66), AVOGADRO_CONSTANT_144), dust, Materials.Dysprosium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(67), AVOGADRO_CONSTANT_144), dust, Materials.Holmium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(68), AVOGADRO_CONSTANT_144), dust, Materials.Erbium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(69), AVOGADRO_CONSTANT_144), dust, Materials.Thulium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(70), AVOGADRO_CONSTANT_144), dust, Materials.Ytterbium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(71), AVOGADRO_CONSTANT_144), dust, Materials.Lutetium,1); + //transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(72), AVOGADRO_CONSTANT_144),OrePrefixes.dust, Materials.Hafnum,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(73), AVOGADRO_CONSTANT_144), dust, Materials.Tantalum,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(74), AVOGADRO_CONSTANT_144), dust, Materials.Tungsten,1); + //transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(75), AVOGADRO_CONSTANT_144),OrePrefixes.dust, Materials.Rhenium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(76), AVOGADRO_CONSTANT_144), dust, Materials.Osmium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(77), AVOGADRO_CONSTANT_144), dust, Materials.Iridium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(78), AVOGADRO_CONSTANT_144), dust, Materials.Platinum,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(79), AVOGADRO_CONSTANT_144), dust, Materials.Gold,1); + TRANSFORMATION_INFO.addFluid(new cElementalDefinitionStack(getFirstStableIsotope(80), AVOGADRO_CONSTANT_144),Materials.Mercury.mFluid, 144); + //transformation.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(81), AVOGADRO_CONSTANT_144),OrePrefixes.dust, Materials.Thallium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(82), AVOGADRO_CONSTANT_144), dust, Materials.Lead,1); /*----UNSTABLE ATOMS----**/ - refUnstableMass = getFirstStableIsotope(82).getMass() * 144D; - - transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(83), 144), dust, Materials.Bismuth,1); - //transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(84),144),OrePrefixes.dust, Materials.Polonium,1); - //transformation.addFluid(new cElementalDefinitionStack(getBestUnstableIsotope(85),144),Materials.Astatine.mPlasma.getID(), 144); - transformation.addFluid(new cElementalDefinitionStack(getBestUnstableIsotope(86),144),Materials.Radon.mGas.getID(), 144); - //transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(87),144),OrePrefixes.dust, Materials.Francium,1); - //transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(88),144),OrePrefixes.dust, Materials.Radium,1); - //transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(89),144),OrePrefixes.dust, Materials.Actinium,1); - transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(90),144), dust, Materials.Thorium,1); - //transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(91),144),OrePrefixes.dust, Materials.Protactinium,1); - ////transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(92),144), dust, Materials.Uranium,1); - //transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(93),144),OrePrefixes.dust, Materials.Neptunium,1); - ////transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(94),144), dust, Materials.Plutonium,1); - transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(95),144), dust, Materials.Americium,1); + refUnstableMass = getFirstStableIsotope(82).getMass() * AVOGADRO_CONSTANT_144; + + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(83), AVOGADRO_CONSTANT_144), dust, Materials.Bismuth,1); + //transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(84),AVOGADRO_CONSTANT_144),OrePrefixes.dust, Materials.Polonium,1); + //transformation.addFluid(new cElementalDefinitionStack(getBestUnstableIsotope(85),AVOGADRO_CONSTANT_144),Materials.Astatine.mPlasma.getID(), 144); + TRANSFORMATION_INFO.addFluid(new cElementalDefinitionStack(getBestUnstableIsotope(86),AVOGADRO_CONSTANT_144),Materials.Radon.mGas, 144); + //transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(87),AVOGADRO_CONSTANT_144),OrePrefixes.dust, Materials.Francium,1); + //transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(88),AVOGADRO_CONSTANT_144),OrePrefixes.dust, Materials.Radium,1); + //transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(89),AVOGADRO_CONSTANT_144),OrePrefixes.dust, Materials.Actinium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(90),AVOGADRO_CONSTANT_144), dust, Materials.Thorium,1); + //transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(91),AVOGADRO_CONSTANT_144),OrePrefixes.dust, Materials.Protactinium,1); + ////transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(92),AVOGADRO_CONSTANT_144), dust, Materials.Uranium,1); + //transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(93),AVOGADRO_CONSTANT_144),OrePrefixes.dust, Materials.Neptunium,1); + ////transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(94),AVOGADRO_CONSTANT_144), dust, Materials.Plutonium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(95),AVOGADRO_CONSTANT_144), dust, Materials.Americium,1); try { dAtomDefinition temp; - transformation.addFluid(new cElementalDefinitionStack(deuterium.definition, 144),Materials.Deuterium.mGas.getID(), 144); + TRANSFORMATION_INFO.addFluid(new cElementalDefinitionStack(deuterium.definition, AVOGADRO_CONSTANT_144),Materials.Deuterium.mGas, 144); - transformation.addFluid(new cElementalDefinitionStack(tritium.definition, 144),Materials.Tritium.mGas.getID(), 144); + TRANSFORMATION_INFO.addFluid(new cElementalDefinitionStack(tritium.definition, AVOGADRO_CONSTANT_144),Materials.Tritium.mGas, 144); - transformation.addFluid(new cElementalDefinitionStack(helium_3.definition, 144),Materials.Helium_3.mGas.getID(), 144); + TRANSFORMATION_INFO.addFluid(new cElementalDefinitionStack(helium_3.definition, AVOGADRO_CONSTANT_144),Materials.Helium_3.mGas, 144); temp=new dAtomDefinition( new cElementalDefinitionStack(eLeptonDefinition.lepton_e, 92), new cElementalDefinitionStack(dHadronDefinition.hadron_p, 92), new cElementalDefinitionStack(dHadronDefinition.hadron_n, 146) ); - transformation.addOredict(new cElementalDefinitionStack(temp, 144), dust, Materials.Uranium/*238*/,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(temp, AVOGADRO_CONSTANT_144), dust, Materials.Uranium/*238*/,1); double tempMass=temp.getMass(); @@ -1597,7 +1597,7 @@ public final class dAtomDefinition extends cElementalDefinition { new cElementalDefinitionStack(dHadronDefinition.hadron_p, 92), new cElementalDefinitionStack(dHadronDefinition.hadron_n, 143) ); - transformation.addOredict(new cElementalDefinitionStack(temp, 144), dust, Materials.Uranium235,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(temp, AVOGADRO_CONSTANT_144), dust, Materials.Uranium235,1); TecTech.LOGGER.info("Diff Mass U : "+(tempMass-temp.getMass())); @@ -1606,14 +1606,14 @@ public final class dAtomDefinition extends cElementalDefinition { new cElementalDefinitionStack(dHadronDefinition.hadron_p, 94), new cElementalDefinitionStack(dHadronDefinition.hadron_n, 145) ); - transformation.addOredict(new cElementalDefinitionStack(temp, 144), dust, Materials.Plutonium/*239*/,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(temp, AVOGADRO_CONSTANT_144), dust, Materials.Plutonium/*239*/,1); somethingHeavy=new dAtomDefinition( new cElementalDefinitionStack(eLeptonDefinition.lepton_e, 94), new cElementalDefinitionStack(dHadronDefinition.hadron_p, 94), new cElementalDefinitionStack(dHadronDefinition.hadron_n, 147) ); - transformation.addOredict(new cElementalDefinitionStack(somethingHeavy, 144), dust, Materials.Plutonium241,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(somethingHeavy, AVOGADRO_CONSTANT_144), dust, Materials.Plutonium241,1); TecTech.LOGGER.info("Diff Mass Pu: "+(somethingHeavy.getMass()-temp.getMass())); diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dHadronDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dHadronDefinition.java index ce5e4a50aa..6b5f41f1c1 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dHadronDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dHadronDefinition.java @@ -1,7 +1,6 @@ package com.github.technus.tectech.mechanics.elementalMatter.definitions.complex; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.util.Util; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalDecay; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalDefinitionStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalMutableDefinitionStackMap; @@ -13,6 +12,7 @@ import com.github.technus.tectech.mechanics.elementalMatter.core.transformations import com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.eBosonDefinition; import com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.eQuarkDefinition; import com.github.technus.tectech.thing.item.DebugElementalInstanceContainer_EM; +import com.github.technus.tectech.util.Util; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; import net.minecraft.nbt.NBTTagCompound; @@ -24,7 +24,8 @@ import java.util.Map; import static com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.definitions.dComplexAspectDefinition.getNbtTagCompound; import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; -import static com.github.technus.tectech.mechanics.elementalMatter.definitions.complex.dAtomDefinition.transformation; +import static com.github.technus.tectech.mechanics.elementalMatter.core.transformations.bTransformationInfo.AVOGADRO_CONSTANT_144; +import static com.github.technus.tectech.mechanics.elementalMatter.definitions.complex.dAtomDefinition.TRANSFORMATION_INFO; import static com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.eBosonDefinition.boson_Y__; import static com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_scanner.*; import static gregtech.api.enums.OrePrefixes.dust; @@ -464,8 +465,8 @@ public final class dHadronDefinition extends cElementalDefinition {//TODO Optimi public static void setTransformations(){ //Added to atom map, but should be in its own - cElementalDefinitionStack neutrons=new cElementalDefinitionStack(hadron_n, 100000); - transformation.oredictDequantization.put(neutrons.definition,new aOredictDequantizationInfo(neutrons, dust, Materials.Neutronium,1)); + cElementalDefinitionStack neutrons=new cElementalDefinitionStack(hadron_n, 1000*AVOGADRO_CONSTANT_144); + TRANSFORMATION_INFO.oredictDequantization.put(neutrons.definition,new aOredictDequantizationInfo(neutrons, dust, Materials.Neutronium,1)); bTransformationInfo.oredictQuantization.put( OreDictionary.getOreID(OrePrefixes.ingotHot.name()+Materials.Neutronium.mName), new aOredictQuantizationInfo(OrePrefixes.ingotHot,Materials.Neutronium,1 ,neutrons) diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ElementalContainer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ElementalContainer.java index 69247d9e1a..139b203551 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ElementalContainer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ElementalContainer.java @@ -1,11 +1,11 @@ package com.github.technus.tectech.thing.metaTileEntity.hatch; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.util.Util; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.iElementalInstanceContainer; import com.github.technus.tectech.mechanics.elementalMatter.core.tElementalException; import com.github.technus.tectech.mechanics.pipe.IConnectsToElementalPipe; +import com.github.technus.tectech.util.Util; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Dyes; @@ -23,8 +23,9 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraftforge.fluids.FluidStack; import org.apache.commons.lang3.reflect.FieldUtils; -import static com.github.technus.tectech.util.CommonValues.*; import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; +import static com.github.technus.tectech.mechanics.elementalMatter.core.transformations.bTransformationInfo.AVOGADRO_CONSTANT_144; +import static com.github.technus.tectech.util.CommonValues.*; import static gregtech.api.enums.Dyes.MACHINE_METAL; import static gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase.isValidMetaTileEntity; import static net.minecraft.util.StatCollector.translateToLocal; @@ -207,11 +208,11 @@ public abstract class GT_MetaTileEntity_Hatch_ElementalContainer extends GT_Meta } public int getMaxStacksCount() { - return mTier * 2; + return mTier * 16; } - public int getMaxStackSize() { - return mTier * (mTier - 7) * 1000; + public double getMaxStackSize() { + return mTier * (mTier - 7) * 64D * AVOGADRO_CONSTANT_144; } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java index e364e634bc..825b07f289 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java @@ -37,6 +37,7 @@ import net.minecraftforge.common.util.ForgeDirection; import java.util.HashMap; import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; +import static com.github.technus.tectech.mechanics.elementalMatter.core.transformations.bTransformationInfo.AVOGADRO_CONSTANT; import static com.github.technus.tectech.mechanics.structure.StructureUtility.*; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; @@ -367,7 +368,7 @@ public class GT_MetaTileEntity_EM_collider extends GT_MetaTileEntity_MultiblockB } public static void setValues(int heliumPlasmaValue) { - double MASS_TO_EU_PARTIAL = heliumPlasmaValue / 1.75893000478707E07;//mass diff + double MASS_TO_EU_PARTIAL = heliumPlasmaValue / (1.75893000478707E07*AVOGADRO_CONSTANT);//mass diff MASS_TO_EU_INSTANT = MASS_TO_EU_PARTIAL * 20; STARTUP_COST = -heliumPlasmaValue * 10000; KEEPUP_COST = -heliumPlasmaValue; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java index b5dc211f3a..a46c407325 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java @@ -31,6 +31,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import org.apache.commons.lang3.reflect.FieldUtils; +import static com.github.technus.tectech.mechanics.elementalMatter.core.transformations.bTransformationInfo.AVOGADRO_CONSTANT; import static com.github.technus.tectech.mechanics.structure.Structure.adders; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; @@ -49,7 +50,7 @@ public class GT_MetaTileEntity_EM_decay extends GT_MetaTileEntity_MultiblockBase private static Textures.BlockIcons.CustomIcon ScreenOFF; private static Textures.BlockIcons.CustomIcon ScreenON; - public static final double URANIUM_INGOT_MASS_DIFF = 1.6114516E10; + public static final double URANIUM_INGOT_MASS_DIFF = 1.6114516E10*AVOGADRO_CONSTANT; private static final double URANIUM_MASS_TO_EU_PARTIAL = ConfigUtil.getFloat(MainConfig.get(), "balance/energy/generator/nuclear") * 3_000_000.0 / URANIUM_INGOT_MASS_DIFF; public static final double URANIUM_MASS_TO_EU_INSTANT = URANIUM_MASS_TO_EU_PARTIAL * 20; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java index 11bc0fefd7..9814092710 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dequantizer.java @@ -4,10 +4,11 @@ import com.github.technus.tectech.mechanics.constructable.IConstructable; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.iHasElementalDefinition; +import com.github.technus.tectech.mechanics.elementalMatter.core.transformations.aFluidDequantizationInfo; +import com.github.technus.tectech.mechanics.elementalMatter.core.transformations.aItemDequantizationInfo; import com.github.technus.tectech.mechanics.elementalMatter.core.transformations.aOredictDequantizationInfo; -import com.github.technus.tectech.mechanics.elementalMatter.core.transformations.iExchangeInfo; -import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; import com.github.technus.tectech.mechanics.structure.Structure; +import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputElemental; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; @@ -99,32 +100,36 @@ public class GT_MetaTileEntity_EM_dequantizer extends GT_MetaTileEntity_Multiblo for (GT_MetaTileEntity_Hatch_InputElemental in : eInputHatches) { cElementalInstanceStackMap map = in.getContainerHandler(); for (cElementalInstanceStack stack : map.values()) { - iExchangeInfo info = stack.getDefinition().someAmountIntoFluidStack(); - if (info != null) { - if (map.removeAllAmounts(false, (iHasElementalDefinition) info.input())) { - mOutputFluids = new FluidStack[]{(FluidStack) info.output()}; - startRecipe((iHasElementalDefinition) info.input(), stack.getEnergy()); - return true; + { + aFluidDequantizationInfo info = stack.getDefinition().someAmountIntoFluidStack(); + if (info != null) { + if (map.removeAllAmounts(false, info.input())) { + mOutputFluids = new FluidStack[]{info.output()}; + startRecipe(info.input(), stack.getEnergy()); + return true; + } } } - - info = stack.getDefinition().someAmountIntoItemsStack(); - if (info != null) { - if (map.removeAllAmounts(false, (iHasElementalDefinition) info.input())) { - mOutputItems = new ItemStack[]{(ItemStack) info.output()}; - startRecipe((iHasElementalDefinition) info.input(), stack.getEnergy()); - return true; + { + aItemDequantizationInfo info = stack.getDefinition().someAmountIntoItemsStack(); + if (info != null) { + if (map.removeAllAmounts(false, info.input())) { + mOutputItems = new ItemStack[]{info.output()}; + startRecipe(info.input(), stack.getEnergy()); + return true; + } } } - - info = stack.getDefinition().someAmountIntoOredictStack(); - if (info != null) { - if (map.removeAllAmounts(false, (iHasElementalDefinition) info.input())) { - ArrayList items = OreDictionary.getOres(((aOredictDequantizationInfo) info).out); - if (items != null && !items.isEmpty()) { - mOutputItems = new ItemStack[]{items.get(0)}; - startRecipe((iHasElementalDefinition) info.input(), stack.getEnergy()); - return true; + { + aOredictDequantizationInfo info = stack.getDefinition().someAmountIntoOredictStack(); + if (info != null) { + if (map.removeAllAmounts(false, info.input())) { + ArrayList items = OreDictionary.getOres(info.out); + if (items != null && !items.isEmpty()) { + mOutputItems = new ItemStack[]{items.get(0)}; + startRecipe(info.input(), stack.getEnergy()); + return true; + } } } } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java index 28c90b58d0..9e508f9e7e 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java @@ -14,9 +14,9 @@ import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInsta import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalDefinitionStack; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; import com.github.technus.tectech.mechanics.elementalMatter.core.tElementalException; -import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; import com.github.technus.tectech.mechanics.structure.IStructureDefinition; import com.github.technus.tectech.mechanics.structure.Structure; +import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; import com.github.technus.tectech.thing.metaTileEntity.hatch.*; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import com.github.technus.tectech.util.Util; @@ -49,7 +49,9 @@ import java.util.ArrayList; import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.util.CommonValues.*; +import static com.github.technus.tectech.util.DoubleCount.div; import static com.github.technus.tectech.util.Util.getTier; +import static java.lang.Math.min; /** * Created by danie_000 on 27.10.2016. @@ -1374,12 +1376,12 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt if (voider.overflowMax < voider.getOverflowMatter()) { continue; } - float remaining = voider.overflowMax - voider.getOverflowMatter(); + double remaining = voider.overflowMax - voider.getOverflowMatter(); for (GT_MetaTileEntity_Hatch_InputElemental in : eInputHatches) { for (cElementalInstanceStack instance : in.getContainerHandler().values()) { - long qty = (long) Math.floor(remaining / instance.definition.getMass()); + double qty = div(remaining,instance.definition.getMass()); if (qty > 0) { - qty = Math.min(qty, instance.amount); + qty = min(qty, instance.amount); if (voider.addOverflowMatter(instance.definition.getMass() * qty)) { voider.setOverflowMatter(voider.overflowMax); } @@ -1389,9 +1391,9 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt } for (GT_MetaTileEntity_Hatch_OutputElemental out : eOutputHatches) { for (cElementalInstanceStack instance : out.getContainerHandler().values()) { - long qty = (long) Math.floor(remaining / instance.definition.getMass()); + double qty = div(remaining,instance.definition.getMass()); if (qty > 0) { - qty = Math.min(qty, instance.amount); + qty = min(qty, instance.amount); if (voider.addOverflowMatter(instance.definition.getMass() * qty)) { voider.setOverflowMatter(voider.overflowMax); } @@ -1496,7 +1498,7 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt mEfficiencyIncrease = 0; if (aBaseMetaTileEntity.isAllowedToWork()) { if (checkRecipe(mInventory[1])) { - mEfficiency = Math.max(0, Math.min(mEfficiency + mEfficiencyIncrease, getMaxEfficiency(mInventory[1]) - (getIdealStatus() - getRepairStatus()) * 1000)); + mEfficiency = Math.max(0, min(mEfficiency + mEfficiencyIncrease, getMaxEfficiency(mInventory[1]) - (getIdealStatus() - getRepairStatus()) * 1000)); } else { afterRecipeCheckFailed(); } @@ -1511,7 +1513,7 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt } else if (RECIPE_AT == Tick || aBaseMetaTileEntity.hasWorkJustBeenEnabled()) { if (aBaseMetaTileEntity.isAllowedToWork()) { if (checkRecipe(mInventory[1])) { - mEfficiency = Math.max(0, Math.min(mEfficiency + mEfficiencyIncrease, getMaxEfficiency(mInventory[1]) - (getIdealStatus() - getRepairStatus()) * 1000)); + mEfficiency = Math.max(0, min(mEfficiency + mEfficiencyIncrease, getMaxEfficiency(mInventory[1]) - (getIdealStatus() - getRepairStatus()) * 1000)); } else { afterRecipeCheckFailed(); } @@ -1684,7 +1686,7 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt } } } - setEUVar(Math.min(getEUVar() + euVar, maxEUStore())); + setEUVar(min(getEUVar() + euVar, maxEUStore())); return false; } @@ -1863,7 +1865,7 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt cleanMassEM_EM(target.getMass()); } - public void cleanMassEM_EM(float mass) { + public void cleanMassEM_EM(double mass) { if (mass > 0) { if (eMufflerHatches.size() < 1) { TecTech.anomalyHandler.addAnomaly(getBaseMetaTileEntity(), mass); diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Centrifuge.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Centrifuge.java index 4b0842be7b..1ed1278bce 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Centrifuge.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_Centrifuge.java @@ -12,6 +12,7 @@ import com.github.technus.tectech.thing.metaTileEntity.multi.base.Parameters; import java.util.Arrays; import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; +import static com.github.technus.tectech.mechanics.elementalMatter.core.transformations.bTransformationInfo.AVOGADRO_CONSTANT_144; import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.*; import static com.github.technus.tectech.util.CommonValues.V; import static com.github.technus.tectech.util.DoubleCount.*; @@ -75,7 +76,7 @@ public class Behaviour_Centrifuge implements GT_MetaTileEntity_EM_machine.IBehav maxRPM = Math.sqrt(maxRCF / (0.001118D * radius)); double maxSafeMass = dAtomDefinition.getSomethingHeavy().getMass() * (1 << tier); maxForce = maxSafeMass * maxRCF;// (eV/c^2 * m/s) / g - maxCapacity = maxSafeMass * 4D * radius;// eV/c^2 + maxCapacity = maxSafeMass * AVOGADRO_CONSTANT_144 * radius;// eV/c^2 } private double getRCF(double RPM) { diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_ElectromagneticSeparator.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_ElectromagneticSeparator.java index c79087d051..558ae03e67 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_ElectromagneticSeparator.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_ElectromagneticSeparator.java @@ -9,8 +9,11 @@ import com.github.technus.tectech.thing.metaTileEntity.multi.base.IStatusFunctio import com.github.technus.tectech.thing.metaTileEntity.multi.base.MultiblockControl; import com.github.technus.tectech.thing.metaTileEntity.multi.base.Parameters; +import static com.github.technus.tectech.mechanics.elementalMatter.core.transformations.bTransformationInfo.AVOGADRO_CONSTANT_144; import static com.github.technus.tectech.util.CommonValues.V; import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.*; +import static com.github.technus.tectech.util.DoubleCount.mul; +import static com.github.technus.tectech.util.DoubleCount.sub; /** * Created by danie_000 on 24.12.2017. @@ -19,8 +22,8 @@ public class Behaviour_ElectromagneticSeparator implements GT_MetaTileEntity_EM_ private final byte tier; private int ticks; private byte precisionFull,precisionMinimal; - private float maxCapacity; - private long maxCharge; + private double maxCapacity; + private double maxCharge; private int offsetMax; private Parameters.Group.ParameterIn fullSetting,minimalSetting,offsetSetting; private final static INameFunction fullName= (gt_metaTileEntity_em_machine, iParameter) -> "Full Precision Input [e/3]"; @@ -85,8 +88,8 @@ public class Behaviour_ElectromagneticSeparator implements GT_MetaTileEntity_EM_ public Behaviour_ElectromagneticSeparator(int desiredTier){ tier=(byte) desiredTier; ticks =Math.max(20,(1<<(12-desiredTier))*20); - maxCapacity= dAtomDefinition.getSomethingHeavy().getMass()*(2< maxCapacity) { cElementalInstanceStack randomStack = stacks[TecTech.RANDOM.nextInt(stacks.length)]; - int amountToRemove = TecTech.RANDOM.nextInt((int) randomStack.getAmount()) + 1; - randomStack.amount -= amountToRemove;//mutates the parent InstanceStackMap + double amountToRemove = TecTech.RANDOM.nextDouble()/10D * randomStack.getAmount(); + randomStack.amount= sub(randomStack.amount,amountToRemove);//mutates the parent InstanceStackMap if (randomStack.amount <= 0) { input.remove(randomStack.definition); } - float mass = Math.abs(randomStack.getDefinition().getMass()) * amountToRemove; + double mass = Math.abs(randomStack.getDefinition().getMass()) * amountToRemove; excessMass += mass; inputMass -= mass; } - long totalCharge=Math.abs(input.getCharge()); + double totalCharge=Math.abs(input.getCharge()); if (totalCharge>maxCharge) return new MultiblockControl<>(excessMass);//AND THEN IT EXPLODES - int mEut=(int)(((double)totalCharge/(double) maxCharge)*V[tier]); + int mEut=(int)((totalCharge/ maxCharge)*V[tier]); mEut = Math.max(mEut, 512); int mTicks=(int)(ticks*(inputMass/maxCapacity)); mTicks=Math.max(mTicks,20); @@ -192,24 +195,18 @@ public class Behaviour_ElectromagneticSeparator implements GT_MetaTileEntity_EM_ }else if(charge<=-precisionFullIn){ outputs[0].putReplace(stack); }else{ - long amount=(long)(stack.amount*((Math.abs(charge)-precisionMinimalIn+1)/levelsCountPlus1));//todo check - if(amount>=stack.amount){ - if(charge>0){ - outputs[2].putReplace(stack); - }else { - outputs[0].putReplace(stack); - } - }else { - cElementalInstanceStack clone=stack.clone(); - clone.amount-=amount; + double amount=mul(stack.amount,(Math.abs(charge)-precisionMinimalIn+1D)/levelsCountPlus1);//todo check + if (amount < stack.amount) { + cElementalInstanceStack clone = stack.clone(); + clone.amount = sub(clone.amount, amount); outputs[1].putReplace(clone); - stack.amount=amount; - if(charge>0){ - outputs[2].putReplace(stack); - }else { - outputs[0].putReplace(stack); - } + stack.amount = amount; + } + if(charge>0){ + outputs[2].putReplace(stack); + }else { + outputs[0].putReplace(stack); } } } -- cgit From 20104da170a9698e5e7ec491bdc62a3e6cc82461 Mon Sep 17 00:00:00 2001 From: Tec Date: Sat, 18 Jul 2020 17:11:52 +0200 Subject: Adjust debug containers --- .../tectech/thing/item/DebugElementalInstanceContainer_EM.java | 8 +++++--- .../thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java | 1 + 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/thing/item/DebugElementalInstanceContainer_EM.java b/src/main/java/com/github/technus/tectech/thing/item/DebugElementalInstanceContainer_EM.java index b23a580bbf..1c63008ec3 100644 --- a/src/main/java/com/github/technus/tectech/thing/item/DebugElementalInstanceContainer_EM.java +++ b/src/main/java/com/github/technus/tectech/thing/item/DebugElementalInstanceContainer_EM.java @@ -31,6 +31,8 @@ import java.util.TreeSet; import static com.github.technus.tectech.Reference.MODID; import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; import static com.github.technus.tectech.loader.gui.CreativeTabTecTech.creativeTabTecTech; +import static com.github.technus.tectech.mechanics.elementalMatter.core.transformations.bTransformationInfo.AVOGADRO_CONSTANT; +import static com.github.technus.tectech.mechanics.elementalMatter.core.transformations.bTransformationInfo.AVOGADRO_CONSTANT_144; import static cpw.mods.fml.relauncher.Side.CLIENT; import static net.minecraft.util.StatCollector.translateToLocal; @@ -141,9 +143,9 @@ public final class DebugElementalInstanceContainer_EM extends Item implements IE that.setTagCompound(new NBTTagCompound()); list.add(that); for(iElementalDefinition defintion: STACKS_REGISTERED){ - list.add(setContent(new ItemStack(this).setStackDisplayName(defintion.getName()+" x"+1),new cElementalInstanceStackMap(new cElementalInstanceStack(defintion,1)))); - list.add(setContent(new ItemStack(this).setStackDisplayName(defintion.getName()+" x"+144),new cElementalInstanceStackMap(new cElementalInstanceStack(defintion,144)))); - list.add(setContent(new ItemStack(this).setStackDisplayName(defintion.getName()+" x"+1000),new cElementalInstanceStackMap(new cElementalInstanceStack(defintion,1000)))); + list.add(setContent(new ItemStack(this).setStackDisplayName(defintion.getName()+" x"+AVOGADRO_CONSTANT),new cElementalInstanceStackMap(new cElementalInstanceStack(defintion,1)))); + list.add(setContent(new ItemStack(this).setStackDisplayName(defintion.getName()+" x"+AVOGADRO_CONSTANT_144),new cElementalInstanceStackMap(new cElementalInstanceStack(defintion,144)))); + list.add(setContent(new ItemStack(this).setStackDisplayName(defintion.getName()+" x"+AVOGADRO_CONSTANT*1000),new cElementalInstanceStackMap(new cElementalInstanceStack(defintion,1000)))); } } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java index 24fbb9e423..06476fb62e 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java @@ -35,6 +35,7 @@ public class GT_MetaTileEntity_EM_bhg extends GT_MetaTileEntity_MultiblockBase_E private static Textures.BlockIcons.CustomIcon ScreenOFF; private static Textures.BlockIcons.CustomIcon ScreenON; + //todo CHECK VALUES private static final double NEUTRONIUM_BLOCK_MASS = 4.1E17; private static final double NEUTRONIUM_BLOCK_ATOM_COUNT = 2.4478671E44; private static final double NEUTRONIUM_BLOCK_TO_EU_INSTANT = URANIUM_MASS_TO_EU_INSTANT * NEUTRONIUM_BLOCK_MASS / (URANIUM_INGOT_MASS_DIFF * 1.78266191e-36);//~ 5.314e40 -- cgit From 5c68b296e1b499ca83d78f24837768ac3a75df62 Mon Sep 17 00:00:00 2001 From: Tec Date: Sat, 18 Jul 2020 17:14:38 +0200 Subject: Change amounts --- .../tectech/thing/item/DebugElementalInstanceContainer_EM.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/thing/item/DebugElementalInstanceContainer_EM.java b/src/main/java/com/github/technus/tectech/thing/item/DebugElementalInstanceContainer_EM.java index 1c63008ec3..8e9266f060 100644 --- a/src/main/java/com/github/technus/tectech/thing/item/DebugElementalInstanceContainer_EM.java +++ b/src/main/java/com/github/technus/tectech/thing/item/DebugElementalInstanceContainer_EM.java @@ -143,9 +143,9 @@ public final class DebugElementalInstanceContainer_EM extends Item implements IE that.setTagCompound(new NBTTagCompound()); list.add(that); for(iElementalDefinition defintion: STACKS_REGISTERED){ - list.add(setContent(new ItemStack(this).setStackDisplayName(defintion.getName()+" x"+AVOGADRO_CONSTANT),new cElementalInstanceStackMap(new cElementalInstanceStack(defintion,1)))); - list.add(setContent(new ItemStack(this).setStackDisplayName(defintion.getName()+" x"+AVOGADRO_CONSTANT_144),new cElementalInstanceStackMap(new cElementalInstanceStack(defintion,144)))); - list.add(setContent(new ItemStack(this).setStackDisplayName(defintion.getName()+" x"+AVOGADRO_CONSTANT*1000),new cElementalInstanceStackMap(new cElementalInstanceStack(defintion,1000)))); + list.add(setContent(new ItemStack(this).setStackDisplayName(defintion.getName()+" x"+AVOGADRO_CONSTANT),new cElementalInstanceStackMap(new cElementalInstanceStack(defintion,AVOGADRO_CONSTANT)))); + list.add(setContent(new ItemStack(this).setStackDisplayName(defintion.getName()+" x"+AVOGADRO_CONSTANT_144),new cElementalInstanceStackMap(new cElementalInstanceStack(defintion,AVOGADRO_CONSTANT_144)))); + list.add(setContent(new ItemStack(this).setStackDisplayName(defintion.getName()+" x"+AVOGADRO_CONSTANT*1000),new cElementalInstanceStackMap(new cElementalInstanceStack(defintion,AVOGADRO_CONSTANT*1000)))); } } -- cgit From 11e50eb56f6750d6bdfe15b986eef55e27452211 Mon Sep 17 00:00:00 2001 From: Tec Date: Sat, 18 Jul 2020 22:49:35 +0200 Subject: Implement big float, transition to molarity --- .../java/ch/obermuhlner/math/big/BigComplex.java | 556 ++++++ .../ch/obermuhlner/math/big/BigComplexMath.java | 413 +++++ .../ch/obermuhlner/math/big/BigDecimalMath.java | 1671 +++++++++++++++++ .../java/ch/obermuhlner/math/big/BigFloat.java | 1947 ++++++++++++++++++++ .../java/ch/obermuhlner/math/big/BigRational.java | 1103 +++++++++++ .../math/big/DefaultBigDecimalMath.java | 736 ++++++++ .../math/big/internal/AsinCalculator.java | 46 + .../math/big/internal/AtanhCalculator.java | 40 + .../math/big/internal/CosCalculator.java | 48 + .../math/big/internal/CoshCalculator.java | 43 + .../math/big/internal/ExpCalculator.java | 42 + .../math/big/internal/PowerIterator.java | 28 + .../math/big/internal/PowerNIterator.java | 33 + .../math/big/internal/PowerTwoNIterator.java | 33 + .../big/internal/PowerTwoNMinusOneIterator.java | 35 + .../big/internal/PowerTwoNPlusOneIterator.java | 33 + .../math/big/internal/SeriesCalculator.java | 127 ++ .../math/big/internal/SinCalculator.java | 49 + .../math/big/internal/SinhCalculator.java | 44 + .../math/big/stream/BigDecimalStream.java | 219 +++ .../math/big/stream/BigFloatStream.java | 214 +++ .../tectech/compatibility/gtpp/GtppAtomLoader.java | 24 +- .../core/cElementalInstanceStackMap.java | 18 +- .../core/stacks/cElementalInstanceStack.java | 53 +- .../core/templates/cElementalDefinition.java | 5 + .../core/transformations/bTransformationInfo.java | 5 +- .../definitions/complex/dAtomDefinition.java | 6 +- .../definitions/complex/dHadronDefinition.java | 2 +- .../item/DebugElementalInstanceContainer_EM.java | 8 +- ...GT_MetaTileEntity_Hatch_ElementalContainer.java | 2 +- .../multi/GT_MetaTileEntity_EM_collider.java | 2 +- .../multi/GT_MetaTileEntity_EM_decay.java | 2 +- .../Behaviour_ElectromagneticSeparator.java | 2 +- 33 files changed, 7540 insertions(+), 49 deletions(-) create mode 100644 src/main/java/ch/obermuhlner/math/big/BigComplex.java create mode 100644 src/main/java/ch/obermuhlner/math/big/BigComplexMath.java create mode 100644 src/main/java/ch/obermuhlner/math/big/BigDecimalMath.java create mode 100644 src/main/java/ch/obermuhlner/math/big/BigFloat.java create mode 100644 src/main/java/ch/obermuhlner/math/big/BigRational.java create mode 100644 src/main/java/ch/obermuhlner/math/big/DefaultBigDecimalMath.java create mode 100644 src/main/java/ch/obermuhlner/math/big/internal/AsinCalculator.java create mode 100644 src/main/java/ch/obermuhlner/math/big/internal/AtanhCalculator.java create mode 100644 src/main/java/ch/obermuhlner/math/big/internal/CosCalculator.java create mode 100644 src/main/java/ch/obermuhlner/math/big/internal/CoshCalculator.java create mode 100644 src/main/java/ch/obermuhlner/math/big/internal/ExpCalculator.java create mode 100644 src/main/java/ch/obermuhlner/math/big/internal/PowerIterator.java create mode 100644 src/main/java/ch/obermuhlner/math/big/internal/PowerNIterator.java create mode 100644 src/main/java/ch/obermuhlner/math/big/internal/PowerTwoNIterator.java create mode 100644 src/main/java/ch/obermuhlner/math/big/internal/PowerTwoNMinusOneIterator.java create mode 100644 src/main/java/ch/obermuhlner/math/big/internal/PowerTwoNPlusOneIterator.java create mode 100644 src/main/java/ch/obermuhlner/math/big/internal/SeriesCalculator.java create mode 100644 src/main/java/ch/obermuhlner/math/big/internal/SinCalculator.java create mode 100644 src/main/java/ch/obermuhlner/math/big/internal/SinhCalculator.java create mode 100644 src/main/java/ch/obermuhlner/math/big/stream/BigDecimalStream.java create mode 100644 src/main/java/ch/obermuhlner/math/big/stream/BigFloatStream.java diff --git a/src/main/java/ch/obermuhlner/math/big/BigComplex.java b/src/main/java/ch/obermuhlner/math/big/BigComplex.java new file mode 100644 index 0000000000..a4620ff53b --- /dev/null +++ b/src/main/java/ch/obermuhlner/math/big/BigComplex.java @@ -0,0 +1,556 @@ +package ch.obermuhlner.math.big; + +import java.math.BigDecimal; +import java.math.MathContext; +import java.util.Objects; + +/** + * Represents a complex number consisting of a real and an imaginary {@link BigDecimal} part in the form {@code a + bi}. + * + *

It generally follows the design of {@link BigDecimal} with some convenience improvements like overloaded operator methods.

+ * + *

The biggest difference to {@link BigDecimal} is that {@link BigComplex#equals(Object) BigComplex.equals(Object)} implements the mathematical equality + * and not the strict technical equality. + * This was a difficult decision because it means that {@code BigComplex} behaves slightly different than {@link BigDecimal} + * but considering that the strange equality of {@link BigDecimal} is a major source of bugs we + * decided it was worth the slight inconsistency. + * If you need the strict equality use {@link BigComplex#strictEquals(Object)}`.

+ * + *

This class is immutable and therefore inherently thread safe.

+ */ +public final class BigComplex { + + /** + * Zero represented as complex number. + */ + public static final BigComplex ZERO = new BigComplex(BigDecimal.ZERO, BigDecimal.ZERO); + + /** + * Real 1 represented as complex number. + */ + public static final BigComplex ONE = new BigComplex(BigDecimal.ONE, BigDecimal.ZERO); + + /** + * Imaginary 1 represented as complex number. + */ + public static final BigComplex I = new BigComplex(BigDecimal.ZERO, BigDecimal.ONE); + + /** + * The real {@link BigDecimal} part of this complex number. + */ + public final BigDecimal re; + + /** + * The imaginary {@link BigDecimal} part of this complex number. + */ + public final BigDecimal im; + + private BigComplex(BigDecimal re, BigDecimal im) { + this.re = re; + this.im = im; + } + + /** + * Calculates the addition of the given complex value to this complex number. + * + *

This methods does not modify this instance.

+ * + * @param value the {@link BigComplex} value to add + * @return the calculated {@link BigComplex} result + */ + public BigComplex add(BigComplex value) { + return valueOf( + re.add(value.re), + im.add(value.im)); + } + + /** + * Calculates the addition of the given complex value to this complex number using the specified {@link MathContext}. + * + *

This methods does not modify this instance.

+ * + * @param value the {@link BigComplex} value to add + * @param mathContext the {@link MathContext} used to calculate the result + * @return the calculated {@link BigComplex} result + */ + public BigComplex add(BigComplex value, MathContext mathContext) { + return valueOf( + re.add(value.re, mathContext), + im.add(value.im, mathContext)); + } + + /** + * Calculates the addition of the given real {@link BigDecimal} value to this complex number using the specified {@link MathContext}. + * + *

This methods does not modify this instance.

+ * + * @param value the real {@link BigDecimal} value to add + * @param mathContext the {@link MathContext} used to calculate the result + * @return the calculated {@link BigComplex} result + */ + public BigComplex add(BigDecimal value, MathContext mathContext) { + return valueOf( + re.add(value, mathContext), + im); + } + + /** + * Calculates the addition of the given real {@link BigDecimal} value to this complex number. + * + *

This methods does not modify this instance.

+ * + * @param value the real {@link BigDecimal} value to add + * @return the calculated {@link BigComplex} result + */ + public BigComplex add(BigDecimal value) { + return valueOf( + re.add(value), + im); + } + + /** + * Calculates the addition of the given real {@code double} value to this complex number. + * + *

This methods does not modify this instance.

+ * + * @param value the real {@code double} value to add + * @return the calculated {@link BigComplex} result + */ + public BigComplex add(double value) { + return add(BigDecimal.valueOf(value)); + } + + /** + * Calculates the subtraction of the given complex value from this complex number. + * + *

This methods does not modify this instance.

+ * + * @param value the {@link BigComplex} value to subtract + * @return the calculated {@link BigComplex} result + */ + public BigComplex subtract(BigComplex value) { + return valueOf( + re.subtract(value.re), + im.subtract(value.im)); + } + + /** + * Calculates the subtraction of the given complex value from this complex number using the specified {@link MathContext}. + * + *

This methods does not modify this instance.

+ * + * @param value the {@link BigComplex} value to subtract + * @param mathContext the {@link MathContext} used to calculate the result + * @return the calculated {@link BigComplex} result + */ + public BigComplex subtract(BigComplex value, MathContext mathContext) { + return valueOf( + re.subtract(value.re, mathContext), + im.subtract(value.im, mathContext)); + } + + /** + * Calculates the subtraction of the given real {@link BigDecimal} value from this complex number using the specified {@link MathContext}. + * + *

This methods does not modify this instance.

+ * + * @param value the real {@link BigDecimal} value to add + * @param mathContext the {@link MathContext} used to calculate the result + * @return the calculated {@link BigComplex} result + */ + public BigComplex subtract(BigDecimal value, MathContext mathContext) { + return valueOf( + re.subtract(value, mathContext), + im); + } + + /** + * Calculates the subtraction of the given real {@link BigDecimal} value from this complex number. + * + *

This methods does not modify this instance.

+ * + * @param value the real {@link BigDecimal} value to subtract + * @return the calculated {@link BigComplex} result + */ + public BigComplex subtract(BigDecimal value) { + return valueOf( + re.subtract(value), + im); + } + + /** + * Calculates the subtraction of the given real {@code double} value from this complex number. + * + *

This methods does not modify this instance.

+ * + * @param value the real {@code double} value to subtract + * @return the calculated {@link BigComplex} result + */ + public BigComplex subtract(double value) { + return subtract(BigDecimal.valueOf(value)); + } + + /** + * Calculates the multiplication of the given complex value to this complex number. + * + *

This methods does not modify this instance.

+ * + * @param value the {@link BigComplex} value to multiply + * @return the calculated {@link BigComplex} result + */ + public BigComplex multiply(BigComplex value) { + return valueOf( + re.multiply(value.re).subtract(im.multiply(value.im)), + re.multiply(value.im).add(im.multiply(value.re))); + } + + /** + * Calculates the multiplication of the given complex value with this complex number using the specified {@link MathContext}. + * + *

This methods does not modify this instance.

+ * + * @param value the {@link BigComplex} value to multiply + * @param mathContext the {@link MathContext} used to calculate the result + * @return the calculated {@link BigComplex} result + */ + public BigComplex multiply(BigComplex value, MathContext mathContext) { + return valueOf( + re.multiply(value.re, mathContext).subtract(im.multiply(value.im, mathContext), mathContext), + re.multiply(value.im, mathContext).add(im.multiply(value.re, mathContext), mathContext)); + } + + /** + * Calculates the multiplication of the given real {@link BigDecimal} value with this complex number using the specified {@link MathContext}. + * + *

This methods does not modify this instance.

+ * + * @param value the real {@link BigDecimal} value to multiply + * @param mathContext the {@link MathContext} used to calculate the result + * @return the calculated {@link BigComplex} result + */ + public BigComplex multiply(BigDecimal value, MathContext mathContext) { + return valueOf( + re.multiply(value, mathContext), + im.multiply(value, mathContext)); + } + + /** + * Calculates the multiplication of the given real {@link BigDecimal} value with this complex number. + * + *

This methods does not modify this instance.

+ * + * @param value the real {@link BigDecimal} value to multiply + * @return the calculated {@link BigComplex} result + */ + public BigComplex multiply(BigDecimal value) { + return valueOf( + re.multiply(value), + im.multiply(value)); + } + + /** + * Calculates the multiplication of the given real {@code double} value with this complex number. + * + *

This methods does not modify this instance.

+ * + * @param value the real {@code double} value to multiply + * @return the calculated {@link BigComplex} result + */ + public BigComplex multiply(double value) { + return multiply(BigDecimal.valueOf(value)); + } + + /** + * Calculates this complex number divided by the given complex value using the specified {@link MathContext}. + * + *

This methods does not modify this instance.

+ * + * @param value the {@link BigComplex} value to divide by + * @param mathContext the {@link MathContext} used to calculate the result + * @return the calculated {@link BigComplex} result + */ + public BigComplex divide(BigComplex value, MathContext mathContext) { + return multiply(value.reciprocal(mathContext), mathContext); + } + + /** + * Calculates this complex number divided by the given real {@link BigDecimal} value using the specified {@link MathContext}. + * + *

This methods does not modify this instance.

+ * + * @param value the {@link BigDecimal} value to divide by + * @param mathContext the {@link MathContext} used to calculate the result + * @return the calculated {@link BigComplex} result + */ + public BigComplex divide(BigDecimal value, MathContext mathContext) { + return valueOf( + re.divide(value, mathContext), + im.divide(value, mathContext)); + } + + /** + * Calculates this complex number divided by the given real {@code double} value using the specified {@link MathContext}. + * + *

This methods does not modify this instance.

+ * + * @param value the {@code double} value to divide by + * @param mathContext the {@link MathContext} used to calculate the result + * @return the calculated {@link BigComplex} result + */ + public BigComplex divide(double value, MathContext mathContext) { + return divide(BigDecimal.valueOf(value), mathContext); + } + + /** + * Calculates the reciprocal of this complex number using the specified {@link MathContext}. + * + *

This methods does not modify this instance.

+ * + * @param mathContext the {@link MathContext} used to calculate the result + * @return the calculated {@link BigComplex} result + */ + public BigComplex reciprocal(MathContext mathContext) { + BigDecimal scale = absSquare(mathContext); + return valueOf( + re.divide(scale, mathContext), + im.negate().divide(scale, mathContext)); + } + + /** + * Calculates the conjugate {@code a - bi} of this complex number. + * + *

This methods does not modify this instance.

+ * + * @return the calculated {@link BigComplex} result + */ + public BigComplex conjugate() { + return valueOf(re, im.negate()); + } + + /** + * Calculates the negation {@code -a - bi} of this complex number. + * + *

This methods does not modify this instance.

+ * + * @return the calculated {@link BigComplex} result + */ + public BigComplex negate() { + return valueOf(re.negate(), im.negate()); + } + + /** + * Calculates the absolute value (also known as magnitude, length or radius) of this complex number. + * + *

This method is slower than {@link #absSquare(MathContext)} since it needs to calculate the {@link BigDecimalMath#sqrt(BigDecimal, MathContext)}.

+ * + *

This methods does not modify this instance.

+ * + * @param mathContext the {@link MathContext} used to calculate the result + * @return the calculated {@link BigComplex} result + * @see #absSquare(MathContext) + */ + public BigDecimal abs(MathContext mathContext) { + return BigDecimalMath.sqrt(absSquare(mathContext), mathContext); + } + + /** + * Calculates the angle in radians (also known as argument) of this complex number. + * + *

This methods does not modify this instance.

+ * + * @param mathContext the {@link MathContext} used to calculate the result + * @return the calculated {@link BigComplex} result + */ + public BigDecimal angle(MathContext mathContext) { + return BigDecimalMath.atan2(im, re, mathContext); + } + + /** + * Calculates the square of the absolute value of this complex number. + * + *

This method is faster than {@link #abs(MathContext)} since it does not need to calculate the {@link BigDecimalMath#sqrt(BigDecimal, MathContext)}.

+ * + *

This methods does not modify this instance.

+ * + * @param mathContext the {@link MathContext} used to calculate the result + * @return the calculated {@link BigComplex} result + * @see #abs(MathContext) + */ + public BigDecimal absSquare(MathContext mathContext) { + return re.multiply(re, mathContext).add(im.multiply(im, mathContext), mathContext); + } + + /** + * Returns whether this complex number only has a real part (the imaginary part is 0). + * + * @return {@code true} if this complex number only has a real part, {@code false} if the imaginary part is not 0 + */ + public boolean isReal() { + return im.signum() == 0; + } + + /** + * Returns the real part of this complex number as {@link BigComplex} number. + * + * @return the real part as as {@link BigComplex} number + */ + public BigComplex re() { + return valueOf(re, BigDecimal.ZERO); + } + + /** + * Returns the imaginary part of this complex number as {@link BigComplex} number. + * + * @return the imaginary part as as {@link BigComplex} number + */ + public BigComplex im() { + return valueOf(BigDecimal.ZERO, im); + } + + /** + * Returns this complex nuber rounded to the specified precision. + * + *

This methods does not modify this instance.

+ * + * @param mathContext the {@link MathContext} used to calculate the result + * @return the rounded {@link BigComplex} result + */ + public BigComplex round(MathContext mathContext) { + return valueOf(re.round(mathContext), im.round(mathContext)); + } + + @Override + public int hashCode() { + return Objects.hash(re, im); + } + + /** + * {@inheritDoc} + * + *

Contrary to {@link BigDecimal#equals(Object)} this method implements mathematical equality + * (by calling {@link BigDecimal#compareTo(BigDecimal)} on the real and imaginary parts) + * instead of strict equality.

+ * + * @see #strictEquals(Object) + */ + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + BigComplex other = (BigComplex) obj; + + return re.compareTo(other.re) == 0 && im.compareTo(other.im) == 0; + } + + /** + * Returns whether the real and imaginary parts of this complex number are strictly equal. + * + *

This method uses the strict equality as defined by {@link BigDecimal#equals(Object)} on the real and imaginary parts.

+ *

Please note that {@link #equals(Object) BigComplex.equals(Object)} implements mathematical equality instead + * (by calling {@link BigDecimal#compareTo(BigDecimal) on the real and imaginary parts}).

+ * + * @param obj the object to compare for strict equality + * @return {@code true} if the specified object is strictly equal to this complex number + * @see #equals(Object) + */ + public boolean strictEquals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + BigComplex other = (BigComplex) obj; + + return re.equals(other.re) && im.equals(other.im); + } + + @Override + public String toString() { + if (im.signum() >= 0) { + return "(" + re + " + " + im + " i)"; + } else { + return "(" + re + " - " + im.negate() + " i)"; + } + } + + /** + * Returns a complex number with the specified real {@link BigDecimal} part. + * + * @param real the real {@link BigDecimal} part + * @return the complex number + */ + public static BigComplex valueOf(BigDecimal real) { + return valueOf(real, BigDecimal.ZERO); + } + + /** + * Returns a complex number with the specified real {@code double} part. + * + * @param real the real {@code double} part + * @return the complex number + */ + public static BigComplex valueOf(double real) { + return valueOf(BigDecimal.valueOf(real), BigDecimal.ZERO); + } + + /** + * Returns a complex number with the specified real and imaginary {@code double} parts. + * + * @param real the real {@code double} part + * @param imaginary the imaginary {@code double} part + * @return the complex number + */ + public static BigComplex valueOf(double real, double imaginary) { + return valueOf(BigDecimal.valueOf(real), BigDecimal.valueOf(imaginary)); + } + + /** + * Returns a complex number with the specified real and imaginary {@link BigDecimal} parts. + * + * @param real the real {@link BigDecimal} part + * @param imaginary the imaginary {@link BigDecimal} part + * @return the complex number + */ + public static BigComplex valueOf(BigDecimal real, BigDecimal imaginary) { + if (real.signum() == 0) { + if (imaginary.signum() == 0) { + return ZERO; + } + if (imaginary.compareTo(BigDecimal.ONE) == 0) { + return I; + } + } + if (imaginary.signum() == 0 && real.compareTo(BigDecimal.ONE) == 0) { + return ONE; + } + + return new BigComplex(real, imaginary); + } + + /** + * Returns a complex number with the specified polar {@link BigDecimal} radius and angle using the specified {@link MathContext}. + * + * @param radius the {@link BigDecimal} radius of the polar representation + * @param angle the {@link BigDecimal} angle in radians of the polar representation + * @param mathContext the {@link MathContext} used to calculate the result + * @return the complex number + */ + public static BigComplex valueOfPolar(BigDecimal radius, BigDecimal angle, MathContext mathContext) { + if (radius.signum() == 0) { + return ZERO; + } + + return valueOf( + radius.multiply(BigDecimalMath.cos(angle, mathContext), mathContext), + radius.multiply(BigDecimalMath.sin(angle, mathContext), mathContext)); + } + + public static BigComplex valueOfPolar(double radius, double angle, MathContext mathContext) { + return valueOfPolar(BigDecimal.valueOf(radius), BigDecimal.valueOf(angle), mathContext); + } +} diff --git a/src/main/java/ch/obermuhlner/math/big/BigComplexMath.java b/src/main/java/ch/obermuhlner/math/big/BigComplexMath.java new file mode 100644 index 0000000000..a73d9bccdd --- /dev/null +++ b/src/main/java/ch/obermuhlner/math/big/BigComplexMath.java @@ -0,0 +1,413 @@ +package ch.obermuhlner.math.big; + +import java.math.BigDecimal; +import java.math.MathContext; +import java.util.List; + +import static ch.obermuhlner.math.big.BigComplex.I; + +/** + * Provides advanced functions operating on {@link BigComplex}s. + */ +public class BigComplexMath { + + private static final BigDecimal TWO = BigDecimal.valueOf(2); + + /** + * Calculates the reciprocal of the given complex number using the specified {@link MathContext}. + * + * @param x the complex number to calculate the reciprocal + * @param mathContext the {@link MathContext} used to calculate the result + * @return the calculated {@link BigComplex} result + * @see BigComplex#reciprocal(MathContext) + */ + public static BigComplex reciprocal(BigComplex x, MathContext mathContext) { + return x.reciprocal(mathContext); + } + + /** + * Calculates the conjugate of the given complex number using the specified {@link MathContext}. + * + * @param x the complex number to calculate the conjugate + * @return the calculated {@link BigComplex} result + * @see BigComplex#conjugate() + */ + public static BigComplex conjugate(BigComplex x) { + return x.conjugate(); + } + + /** + * Calculates the absolute value (also known as magnitude, length or radius) of the given complex number using the specified {@link MathContext}. + * + * @param x the complex number to calculate the absolute value + * @param mathContext the {@link MathContext} used to calculate the result + * @return the calculated {@link BigComplex} result + * @see BigComplex#abs(MathContext) + */ + public static BigDecimal abs(BigComplex x, MathContext mathContext) { + return x.abs(mathContext); + } + + /** + * Calculates the square of the absolute value (also known as magnitude, length or radius) of the given complex number using the specified {@link MathContext}. + * + * @param x the complex number to calculate the square of the absolute value + * @param mathContext the {@link MathContext} used to calculate the result + * @return the calculated {@link BigComplex} result + * @see BigComplex#absSquare(MathContext) + */ + public static BigDecimal absSquare(BigComplex x, MathContext mathContext) { + return x.absSquare(mathContext); + } + + /** + * Calculates the angle in radians of the given complex number using the specified {@link MathContext}. + * + * @param x the complex number to calculate the angle + * @param mathContext the {@link MathContext} used to calculate the result + * @return the calculated {@link BigComplex} angle in radians + * @see BigComplex#angle(MathContext) + */ + public static BigDecimal angle(BigComplex x, MathContext mathContext) { + return x.angle(mathContext); + } + + /** + * Calculates the factorial of the specified {@link BigComplex}. + * + *

This implementation uses + * Spouge's approximation + * to calculate the factorial for non-integer values.

+ * + *

This involves calculating a series of constants that depend on the desired precision. + * Since this constant calculation is quite expensive (especially for higher precisions), + * the constants for a specific precision will be cached + * and subsequent calls to this method with the same precision will be much faster.

+ * + *

It is therefore recommended to do one call to this method with the standard precision of your application during the startup phase + * and to avoid calling it with many different precisions.

+ * + *

See: Wikipedia: Factorial - Extension of factorial to non-integer values of argument

+ * + * @param x the {@link BigComplex} + * @param mathContext the {@link MathContext} used for the result + * @return the factorial {@link BigComplex} + * @throws ArithmeticException if x is a negative integer value (-1, -2, -3, ...) + * @see BigDecimalMath#factorial(BigDecimal, MathContext) + * @see #gamma(BigComplex, MathContext) + */ + public static BigComplex factorial(BigComplex x, MathContext mathContext) { + if (x.isReal() && BigDecimalMath.isIntValue(x.re)) { + return BigComplex.valueOf(BigDecimalMath.factorial(x.re.intValueExact()).round(mathContext)); + } + + // https://en.wikipedia.org/wiki/Spouge%27s_approximation + MathContext mc = new MathContext(mathContext.getPrecision() * 2, mathContext.getRoundingMode()); + + int a = mathContext.getPrecision() * 13 / 10; + List constants = BigDecimalMath.getSpougeFactorialConstants(a); + + BigDecimal bigA = BigDecimal.valueOf(a); + + boolean negative = false; + BigComplex factor = BigComplex.valueOf(constants.get(0)); + for (int k = 1; k < a; k++) { + BigDecimal bigK = BigDecimal.valueOf(k); + factor = factor.add(BigComplex.valueOf(constants.get(k)).divide(x.add(bigK), mc), mc); + negative = !negative; + } + + BigComplex result = pow(x.add(bigA, mc), x.add(BigDecimal.valueOf(0.5), mc), mc); + result = result.multiply(exp(x.negate().subtract(bigA, mc), mc), mc); + result = result.multiply(factor, mc); + + return result.round(mathContext); + } + + /** + * Calculates the gamma function of the specified {@link BigComplex}. + * + *

This implementation uses {@link #factorial(BigComplex, MathContext)} internally, + * therefore the performance implications described there apply also for this method. + * + *

See: Wikipedia: Gamma function

+ * + * @param x the {@link BigComplex} + * @param mathContext the {@link MathContext} used for the result + * @return the gamma {@link BigComplex} + * @throws ArithmeticException if x-1 is a negative integer value (-1, -2, -3, ...) + * @see BigDecimalMath#gamma(BigDecimal, MathContext) + * @see #factorial(BigComplex, MathContext) + */ + public static BigComplex gamma(BigComplex x, MathContext mathContext) { + return factorial(x.subtract(BigComplex.ONE), mathContext); + } + + + /** + * Calculates the natural exponent of {@link BigComplex} x (ex) in the complex domain. + * + *

See: Wikipedia: Exponent (Complex plane)

+ * + * @param x the {@link BigComplex} to calculate the exponent for + * @param mathContext the {@link MathContext} used for the result + * @return the calculated exponent {@link BigComplex} with the precision specified in the mathContext + */ + public static BigComplex exp(BigComplex x, MathContext mathContext) { + MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); + + BigDecimal expRe = BigDecimalMath.exp(x.re, mc); + return BigComplex.valueOf( + expRe.multiply(BigDecimalMath.cos(x.im, mc), mc).round(mathContext), + expRe.multiply(BigDecimalMath.sin(x.im, mc), mc)).round(mathContext); + } + + /** + * Calculates the sine (sinus) of {@link BigComplex} x in the complex domain. + * + *

See: Wikipedia: Sine (Sine with a complex argument)

+ * + * @param x the {@link BigComplex} to calculate the sine for + * @param mathContext the {@link MathContext} used for the result + * @return the calculated sine {@link BigComplex} with the precision specified in the mathContext + */ + public static BigComplex sin(BigComplex x, MathContext mathContext) { + MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); + + return BigComplex.valueOf( + BigDecimalMath.sin(x.re, mc).multiply(BigDecimalMath.cosh(x.im, mc), mc).round(mathContext), + BigDecimalMath.cos(x.re, mc).multiply(BigDecimalMath.sinh(x.im, mc), mc).round(mathContext)); + } + + /** + * Calculates the cosine (cosinus) of {@link BigComplex} x in the complex domain. + * + * @param x the {@link BigComplex} to calculate the cosine for + * @param mathContext the {@link MathContext} used for the result + * @return the calculated cosine {@link BigComplex} with the precision specified in the mathContext + */ + public static BigComplex cos(BigComplex x, MathContext mathContext) { + MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); + + return BigComplex.valueOf( + BigDecimalMath.cos(x.re, mc).multiply(BigDecimalMath.cosh(x.im, mc), mc).round(mathContext), + BigDecimalMath.sin(x.re, mc).multiply(BigDecimalMath.sinh(x.im, mc), mc).negate().round(mathContext)); + } + + // + // http://scipp.ucsc.edu/~haber/archives/physics116A10/arc_10.pdf + + /** + * Calculates the tangens of {@link BigComplex} x in the complex domain. + * + * @param x the {@link BigComplex} to calculate the tangens for + * @param mathContext the {@link MathContext} used for the result + * @return the calculated tangens {@link BigComplex} with the precision specified in the mathContext + */ + public static BigComplex tan(BigComplex x, MathContext mathContext) { + MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); + + return sin(x, mc).divide(cos(x, mc), mc).round(mathContext); + } + + /** + * Calculates the arc tangens (inverted tangens) of {@link BigComplex} x in the complex domain. + * + *

See: Wikipedia: Inverse trigonometric functions (Extension to complex plane)

+ * + * @param x the {@link BigComplex} to calculate the arc tangens for + * @param mathContext the {@link MathContext} used for the result + * @return the calculated arc tangens {@link BigComplex} with the precision specified in the mathContext + */ + public static BigComplex atan(BigComplex x, MathContext mathContext) { + MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); + + return log(I.subtract(x, mc).divide(I.add(x, mc), mc), mc).divide(I, mc).divide(TWO, mc).round(mathContext); + } + + /** + * Calculates the arc cotangens (inverted cotangens) of {@link BigComplex} x in the complex domain. + * + *

See: Wikipedia: Inverse trigonometric functions (Extension to complex plane)

+ * + * @param x the {@link BigComplex} to calculate the arc cotangens for + * @param mathContext the {@link MathContext} used for the result + * @return the calculated arc cotangens {@link BigComplex} with the precision specified in the mathContext + */ + public static BigComplex acot(BigComplex x, MathContext mathContext) { + MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); + + return log(x.add(I, mc).divide(x.subtract(I, mc), mc), mc).divide(I, mc).divide(TWO, mc).round(mathContext); + } + + /** + * Calculates the arc sine (inverted sine) of {@link BigComplex} x in the complex domain. + * + *

See: Wikipedia: Inverse trigonometric functions (Extension to complex plane)

+ * + * @param x the {@link BigComplex} to calculate the arc sine for + * @param mathContext the {@link MathContext} used for the result + * @return the calculated arc sine {@link BigComplex} with the precision specified in the mathContext + */ + public static BigComplex asin(BigComplex x, MathContext mathContext) { + MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); + + return I.negate().multiply(log(I.multiply(x, mc).add(sqrt(BigComplex.ONE.subtract(x.multiply(x, mc), mc), mc), mc), mc), mc).round(mathContext); + } + + /** + * Calculates the arc cosine (inverted cosine) of {@link BigComplex} x in the complex domain. + * + *

See: Wikipedia: Inverse trigonometric functions (Extension to complex plane)

+ * + * @param x the {@link BigComplex} to calculate the arc cosine for + * @param mathContext the {@link MathContext} used for the result + * @return the calculated arc cosine {@link BigComplex} with the precision specified in the mathContext + */ + public static BigComplex acos(BigComplex x, MathContext mathContext) { + MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); + + return I.negate().multiply(log(x.add(sqrt(x.multiply(x, mc).subtract(BigComplex.ONE, mc), mc), mc), mc), mc).round(mathContext); + } + + /** + * Calculates the square root of {@link BigComplex} x in the complex domain (sqrt x). + * + *

See Wikipedia: Square root (Square root of an imaginary number)

+ * + * @param x the {@link BigComplex} to calculate the square root for + * @param mathContext the {@link MathContext} used for the result + * @return the calculated square root {@link BigComplex} with the precision specified in the mathContext + */ + public static BigComplex sqrt(BigComplex x, MathContext mathContext) { + // https://math.stackexchange.com/questions/44406/how-do-i-get-the-square-root-of-a-complex-number + MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); + + BigDecimal magnitude = x.abs(mc); + + BigComplex a = x.add(magnitude, mc); + return a.divide(a.abs(mc), mc).multiply(BigDecimalMath.sqrt(magnitude, mc), mc).round(mathContext); + } + + /** + * Calculates the natural logarithm of {@link BigComplex} x in the complex domain. + * + *

See: Wikipedia: Complex logarithm

+ * + * @param x the {@link BigComplex} to calculate the natural logarithm for + * @param mathContext the {@link MathContext} used for the result + * @return the calculated natural logarithm {@link BigComplex} with the precision specified in the mathContext + */ + public static BigComplex log(BigComplex x, MathContext mathContext) { + // https://en.wikipedia.org/wiki/Complex_logarithm + MathContext mc1 = new MathContext(mathContext.getPrecision() + 20, mathContext.getRoundingMode()); + MathContext mc2 = new MathContext(mathContext.getPrecision() + 5, mathContext.getRoundingMode()); + + return BigComplex.valueOf( + BigDecimalMath.log(x.abs(mc1), mc1).round(mathContext), + x.angle(mc2)).round(mathContext); + } + + /** + * Calculates {@link BigComplex} x to the power of long y (xy). + * + *

The implementation tries to minimize the number of multiplications of {@link BigComplex x} (using squares whenever possible).

+ * + *

See: Wikipedia: Exponentiation - efficient computation

+ * + * @param x the {@link BigComplex} value to take to the power + * @param y the long value to serve as exponent + * @param mathContext the {@link MathContext} used for the result + * @return the calculated x to the power of y with the precision specified in the mathContext + */ + public static BigComplex pow(BigComplex x, long y, MathContext mathContext) { + MathContext mc = new MathContext(mathContext.getPrecision() + 10, mathContext.getRoundingMode()); + + if (y < 0) { + return BigComplex.ONE.divide(pow(x, -y, mc), mc).round(mathContext); + } + + BigComplex result = BigComplex.ONE; + while (y > 0) { + if ((y & 1) == 1) { + // odd exponent -> multiply result with x + result = result.multiply(x, mc); + y -= 1; + } + + if (y > 0) { + // even exponent -> square x + x = x.multiply(x, mc); + } + + y >>= 1; + } + + return result.round(mathContext); + } + + /** + * Calculates {@link BigComplex} x to the power of {@link BigDecimal} y (xy). + * + * @param x the {@link BigComplex} value to take to the power + * @param y the {@link BigDecimal} value to serve as exponent + * @param mathContext the {@link MathContext} used for the result + * @return the calculated x to the power of y with the precision specified in the mathContext + */ + public static BigComplex pow(BigComplex x, BigDecimal y, MathContext mathContext) { + MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); + + BigDecimal angleTimesN = x.angle(mc).multiply(y, mc); + return BigComplex.valueOf( + BigDecimalMath.cos(angleTimesN, mc), + BigDecimalMath.sin(angleTimesN, mc)).multiply(BigDecimalMath.pow(x.abs(mc), y, mc), mc).round(mathContext); + } + + /** + * Calculates {@link BigComplex} x to the power of {@link BigComplex} y (xy). + * + * @param x the {@link BigComplex} value to take to the power + * @param y the {@link BigComplex} value to serve as exponent + * @param mathContext the {@link MathContext} used for the result + * @return the calculated x to the power of y with the precision specified in the mathContext + */ + public static BigComplex pow(BigComplex x, BigComplex y, MathContext mathContext) { + MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); + + return exp(y.multiply(log(x, mc), mc), mc).round(mathContext); + } + + /** + * Calculates the {@link BigDecimal} n'th root of {@link BigComplex} x (nsqrt x). + * + *

See Wikipedia: Square root

+ * @param x the {@link BigComplex} value to calculate the n'th root + * @param n the {@link BigDecimal} defining the root + * @param mathContext the {@link MathContext} used for the result + * + * @return the calculated n'th root of x with the precision specified in the mathContext + */ + public static BigComplex root(BigComplex x, BigDecimal n, MathContext mathContext) { + MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); + + return pow(x, BigDecimal.ONE.divide(n, mc), mc).round(mathContext); + } + + /** + * Calculates the {@link BigComplex} n'th root of {@link BigComplex} x (nsqrt x). + * + *

See Wikipedia: Square root

+ * @param x the {@link BigComplex} value to calculate the n'th root + * @param n the {@link BigComplex} defining the root + * @param mathContext the {@link MathContext} used for the result + * + * @return the calculated n'th root of x with the precision specified in the mathContext + */ + public static BigComplex root(BigComplex x, BigComplex n, MathContext mathContext) { + MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); + + return pow(x, BigComplex.ONE.divide(n, mc), mc).round(mathContext); + } + + // TODO add root() for the k'th root - https://math.stackexchange.com/questions/322481/principal-nth-root-of-a-complex-number +} diff --git a/src/main/java/ch/obermuhlner/math/big/BigDecimalMath.java b/src/main/java/ch/obermuhlner/math/big/BigDecimalMath.java new file mode 100644 index 0000000000..552331f3b4 --- /dev/null +++ b/src/main/java/ch/obermuhlner/math/big/BigDecimalMath.java @@ -0,0 +1,1671 @@ +package ch.obermuhlner.math.big; + +import static java.math.BigDecimal.ONE; +import static java.math.BigDecimal.TEN; +import static java.math.BigDecimal.ZERO; +import static java.math.BigDecimal.valueOf; + +import java.math.BigDecimal; +import java.math.MathContext; +import java.util.*; + +import ch.obermuhlner.math.big.internal.AsinCalculator; +import ch.obermuhlner.math.big.internal.CosCalculator; +import ch.obermuhlner.math.big.internal.CoshCalculator; +import ch.obermuhlner.math.big.internal.ExpCalculator; +import ch.obermuhlner.math.big.internal.SinCalculator; +import ch.obermuhlner.math.big.internal.SinhCalculator; + +/** + * Provides advanced functions operating on {@link BigDecimal}s. + */ +public class BigDecimalMath { + + private static final BigDecimal TWO = valueOf(2); + private static final BigDecimal THREE = valueOf(3); + private static final BigDecimal MINUS_ONE = valueOf(-1); + private static final BigDecimal ONE_HALF = valueOf(0.5); + + private static final BigDecimal DOUBLE_MAX_VALUE = BigDecimal.valueOf(Double.MAX_VALUE); + + private static volatile BigDecimal log2Cache; + private static final Object log2CacheLock = new Object(); + + private static volatile BigDecimal log3Cache; + private static final Object log3CacheLock = new Object(); + + private static volatile BigDecimal log10Cache; + private static final Object log10CacheLock = new Object(); + + private static volatile BigDecimal piCache; + private static final Object piCacheLock = new Object(); + + private static volatile BigDecimal eCache; + private static final Object eCacheLock = new Object(); + + private static final BigDecimal ROUGHLY_TWO_PI = new BigDecimal("3.141592653589793").multiply(TWO); + + private static final int EXPECTED_INITIAL_PRECISION = 15; + + private static BigDecimal[] factorialCache = new BigDecimal[100]; + + static { + BigDecimal result = ONE; + factorialCache[0] = result; + for (int i = 1; i < factorialCache.length; i++) { + result = result.multiply(valueOf(i)); + factorialCache[i] = result; + } + } + + private static final Map> spougeFactorialConstantsCache = new HashMap<>(); + private static final Object spougeFactorialConstantsCacheLock = new Object(); + + private BigDecimalMath() { + // prevent instances + } + + /** + * Creates a {@link BigDecimal} from the specified String representation. + * + *

This method is equivalent to the String constructor {@link BigDecimal#BigDecimal(String)} + * but has been optimized for large strings (several thousand digits).

+ * + * @param string the String representation + * @return the created {@link BigDecimal} + * @throws NumberFormatException if string is not a valid representation of a {@link BigDecimal} + * @see BigDecimal#BigDecimal(String) + * @see #toBigDecimal(String, MathContext) + */ + public static BigDecimal toBigDecimal(String string) { + return toBigDecimal(string, MathContext.UNLIMITED); + } + + /** + * Creates a {@link BigDecimal} from the specified String representation. + * + *

This method is equivalent to the String constructor {@link BigDecimal#BigDecimal(String, MathContext)} + * but has been optimized for large strings (several thousand digits).

+ * + * @param string the string representation + * @param mathContext the {@link MathContext} used for the result + * @return the created {@link BigDecimal} + * @throws NumberFormatException if string is not a valid representation of a {@link BigDecimal} + * @throws ArithmeticException if the result is inexact but the rounding mode is {@code UNNECESSARY} + * @see BigDecimal#BigDecimal(String, MathContext) + * @see #toBigDecimal(String) + */ + public static BigDecimal toBigDecimal(String string, MathContext mathContext) { + int len = string.length(); + if (len < 600) { + return new BigDecimal(string, mathContext); + } + + int splitLength = len / (len >= 10000 ? 8 : 5); + return toBigDecimal(string, mathContext, splitLength); + } + + static BigDecimal toBigDecimal(String string, MathContext mathContext, int splitLength) { + int len = string.length(); + + if (len < splitLength) { + return new BigDecimal(string, mathContext); + } + + char[] chars = string.toCharArray(); + + boolean numberHasSign = false; + boolean negative = false; + int numberIndex = 0; + int dotIndex = -1; + int expIndex = -1; + boolean expHasSign = false; + int scale = 0; + + for (int i = 0; i < len; i++) { + char c = chars[i]; + switch (c) { + case '+': + if (expIndex >= 0) { + if (expHasSign) { + throw new NumberFormatException("Multiple signs in exponent"); + } + expHasSign = true; + } else { + if (numberHasSign) { + throw new NumberFormatException("Multiple signs in number"); + } + numberHasSign = true; + numberIndex = i + 1; + } + break; + case '-': + if (expIndex >= 0) { + if (expHasSign) { + throw new NumberFormatException("Multiple signs in exponent"); + } + expHasSign = true; + } else { + if (numberHasSign) { + throw new NumberFormatException("Multiple signs in number"); + } + numberHasSign = true; + negative = true; + numberIndex = i + 1; + } + break; + case 'e': + case 'E': + if (expIndex >= 0) { + throw new NumberFormatException("Multiple exponent markers"); + } + expIndex = i; + break; + case '.': + if (dotIndex >= 0) { + throw new NumberFormatException("Multiple decimal points"); + } + dotIndex = i; + break; + default: + if (dotIndex >= 0 && expIndex == -1) { + scale++; + } + } + } + + int numberEndIndex; + int exp = 0; + if (expIndex >= 0) { + numberEndIndex = expIndex; + String expString = new String(chars, expIndex + 1, len - expIndex - 1); + exp = Integer.parseInt(expString); + scale = adjustScale(scale, exp); + } else { + numberEndIndex = len; + } + + BigDecimal result; + + if (dotIndex >= 0) { + int leftLength = dotIndex - numberIndex; + BigDecimal bigDecimalLeft = toBigDecimalRecursive(chars, numberIndex, leftLength, exp, splitLength); + int rightLength = numberEndIndex - dotIndex - 1; + BigDecimal bigDecimalRight = toBigDecimalRecursive(chars, dotIndex + 1, rightLength, exp-rightLength, splitLength); + result = bigDecimalLeft.add(bigDecimalRight); + } else { + result = toBigDecimalRecursive(chars, numberIndex, numberEndIndex - numberIndex, exp, splitLength); + } + + if (scale != 0) { + result = result.setScale(scale); + } + + if (negative) { + result = result.negate(); + } + + if (mathContext.getPrecision() != 0) { + result = result.round(mathContext); + } + + return result; + } + + private static int adjustScale(int scale, long exp) { + long adjustedScale = scale - exp; + if (adjustedScale > Integer.MAX_VALUE || adjustedScale < Integer.MIN_VALUE) + throw new NumberFormatException("Scale out of range: " + adjustedScale + " while adjusting scale " + scale + " to exponent " + exp); + return (int) adjustedScale; + } + + private static BigDecimal toBigDecimalRecursive(char[] chars, int offset, int length, int scale, int splitLength) { + if (length > splitLength) { + int mid = length / 2; + BigDecimal bigDecimalLeft = toBigDecimalRecursive(chars, offset, mid, scale + length - mid, splitLength); + BigDecimal bigDecimalRight = toBigDecimalRecursive(chars, offset + mid, length - mid, scale, splitLength); + return bigDecimalLeft.add(bigDecimalRight); + } + if (length == 0) { + return BigDecimal.ZERO; + } + return new BigDecimal(chars, offset, length).movePointRight(scale); + } + + /** + * Returns whether the specified {@link BigDecimal} value can be represented as int. + * + *

If this returns true you can call {@link BigDecimal#intValueExact()} without fear of an {@link ArithmeticException}.

+ * + * @param value the {@link BigDecimal} to check + * @return true if the value can be represented as int value + */ + public static boolean isIntValue(BigDecimal value) { + // TODO impl isIntValue() without exceptions + try { + value.intValueExact(); + return true; + } catch (ArithmeticException ex) { + // ignored + } + return false; + } + + /** + * Returns whether the specified {@link BigDecimal} value can be represented as long. + * + *

If this returns true you can call {@link BigDecimal#longValueExact()} without fear of an {@link ArithmeticException}.

+ * + * @param value the {@link BigDecimal} to check + * @return true if the value can be represented as long value + */ + public static boolean isLongValue(BigDecimal value) { + // TODO impl isLongValue() without exceptions + try { + value.longValueExact(); + return true; + } catch (ArithmeticException ex) { + // ignored + } + return false; + } + + /** + * Returns whether the specified {@link BigDecimal} value can be represented as double. + * + *

If this returns true you can call {@link BigDecimal#doubleValue()} + * without fear of getting {@link Double#POSITIVE_INFINITY} or {@link Double#NEGATIVE_INFINITY} as result.

+ * + *

Example: BigDecimalMath.isDoubleValue(new BigDecimal("1E309")) returns false, + * because new BigDecimal("1E309").doubleValue() returns Infinity.

+ * + *

Note: This method does not check for possible loss of precision.

+ * + *

For example BigDecimalMath.isDoubleValue(new BigDecimal("1.23400000000000000000000000000000001")) will return true, + * because new BigDecimal("1.23400000000000000000000000000000001").doubleValue() returns a valid double value, + * although it loses precision and returns 1.234.

+ * + *

BigDecimalMath.isDoubleValue(new BigDecimal("1E-325")) will return true + * although this value is smaller than {@link Double#MIN_VALUE} (and therefore outside the range of values that can be represented as double) + * because new BigDecimal("1E-325").doubleValue() returns 0 which is a legal value with loss of precision.

+ * + * @param value the {@link BigDecimal} to check + * @return true if the value can be represented as double value + */ + public static boolean isDoubleValue(BigDecimal value) { + if (value.compareTo(DOUBLE_MAX_VALUE) > 0) { + return false; + } + if (value.compareTo(DOUBLE_MAX_VALUE.negate()) < 0) { + return false; + } + + return true; + } + + /** + * Returns the mantissa of the specified {@link BigDecimal} written as mantissa * 10exponent. + * + *

The mantissa is defined as having exactly 1 digit before the decimal point.

+ * + * @param value the {@link BigDecimal} + * @return the mantissa + * @see #exponent(BigDecimal) + */ + public static BigDecimal mantissa(BigDecimal value) { + int exponent = exponent(value); + if (exponent == 0) { + return value; + } + + return value.movePointLeft(exponent); + } + + /** + * Returns the exponent of the specified {@link BigDecimal} written as mantissa * 10exponent. + * + *

The mantissa is defined as having exactly 1 digit before the decimal point.

+ * + * @param value the {@link BigDecimal} + * @return the exponent + * @see #mantissa(BigDecimal) + */ + public static int exponent(BigDecimal value) { + return value.precision() - value.scale() - 1; + } + + /** + * Returns the number of significant digits of the specified {@link BigDecimal}. + * + *

The result contains the number of all digits before the decimal point and + * all digits after the decimal point excluding trailing zeroes.

+ * + *

Examples:

+ *
    + *
  • significantDigits(new BigDecimal("12300.00")) returns 5
  • + *
  • significantDigits(new BigDecimal("1.23000")) returns 3
  • + *
  • significantDigits(new BigDecimal("0.00012300")) returns 3
  • + *
  • significantDigits(new BigDecimal("12300.4500")) returns 7
  • + *
+ * + *

See: Wikipedia: Significant figures

+ * + * @param value the {@link BigDecimal} + * @return the number of significant digits + * @see BigDecimal#stripTrailingZeros() + * @see BigDecimal#precision() + */ + public static int significantDigits(BigDecimal value) { + BigDecimal stripped = value.stripTrailingZeros(); + if (stripped.scale() >= 0) { + return stripped.precision(); + } else { + return stripped.precision() - stripped.scale(); + } + } + + /** + * Returns the integral part of the specified {@link BigDecimal} (left of the decimal point). + * + * @param value the {@link BigDecimal} + * @return the integral part + * @see #fractionalPart(BigDecimal) + */ + public static BigDecimal integralPart(BigDecimal value) { + return value.setScale(0, BigDecimal.ROUND_DOWN); + } + + /** + * Returns the fractional part of the specified {@link BigDecimal} (right of the decimal point). + * + * @param value the {@link BigDecimal} + * @return the fractional part + * @see #integralPart(BigDecimal) + */ + public static BigDecimal fractionalPart(BigDecimal value) { + return value.subtract(integralPart(value)); + } + + /** + * Rounds the specified {@link BigDecimal} to the precision of the specified {@link MathContext}. + * + *

This method calls {@link BigDecimal#round(MathContext)}.

+ * + * @param value the {@link BigDecimal} to round + * @param mathContext the {@link MathContext} used for the result + * @return the rounded {@link BigDecimal} value + * @see BigDecimal#round(MathContext) + * @see BigDecimalMath#roundWithTrailingZeroes(BigDecimal, MathContext) + */ + public static BigDecimal round(BigDecimal value, MathContext mathContext) { + return value.round(mathContext); + } + + /** + * Rounds the specified {@link BigDecimal} to the precision of the specified {@link MathContext} including trailing zeroes. + * + *

This method is similar to {@link BigDecimal#round(MathContext)} but does not remove the trailing zeroes.

+ * + *

Example:

+
+MathContext mc = new MathContext(5);
+System.out.println(BigDecimalMath.roundWithTrailingZeroes(new BigDecimal("1.234567"), mc));    // 1.2346
+System.out.println(BigDecimalMath.roundWithTrailingZeroes(new BigDecimal("123.4567"), mc));    // 123.46
+System.out.println(BigDecimalMath.roundWithTrailingZeroes(new BigDecimal("0.001234567"), mc)); // 0.0012346
+System.out.println(BigDecimalMath.roundWithTrailingZeroes(new BigDecimal("1.23"), mc));        // 1.2300
+System.out.println(BigDecimalMath.roundWithTrailingZeroes(new BigDecimal("1.230000"), mc));    // 1.2300
+System.out.println(BigDecimalMath.roundWithTrailingZeroes(new BigDecimal("0.00123"), mc));     // 0.0012300
+System.out.println(BigDecimalMath.roundWithTrailingZeroes(new BigDecimal("0"), mc));           // 0.0000
+System.out.println(BigDecimalMath.roundWithTrailingZeroes(new BigDecimal("0.00000000"), mc));  // 0.0000
+
+ * + * @param value the {@link BigDecimal} to round + * @param mathContext the {@link MathContext} used for the result + * @return the rounded {@link BigDecimal} value including trailing zeroes + * @see BigDecimal#round(MathContext) + * @see BigDecimalMath#round(BigDecimal, MathContext) + */ + public static BigDecimal roundWithTrailingZeroes(BigDecimal value, MathContext mathContext) { + if (value.precision() == mathContext.getPrecision()) { + return value; + } + if (value.signum() == 0) { + return BigDecimal.ZERO.setScale(mathContext.getPrecision() - 1); + } + + try { + BigDecimal stripped = value.stripTrailingZeros(); + int exponentStripped = exponent(stripped); // value.precision() - value.scale() - 1; + + BigDecimal zero; + if (exponentStripped < -1) { + zero = BigDecimal.ZERO.setScale(mathContext.getPrecision() - exponentStripped); + } else { + zero = BigDecimal.ZERO.setScale(mathContext.getPrecision() + exponentStripped + 1); + } + return stripped.add(zero, mathContext); + } catch (ArithmeticException ex) { + return value.round(mathContext); + } + } + + /** + * Calculates the reciprocal of the specified {@link BigDecimal}. + * + * @param x the {@link BigDecimal} + * @param mathContext the {@link MathContext} used for the result + * @return the reciprocal {@link BigDecimal} + * @throws ArithmeticException if x = 0 + * @throws ArithmeticException if the result is inexact but the + * rounding mode is {@code UNNECESSARY} or + * {@code mc.precision == 0} and the quotient has a + * non-terminating decimal expansion. + */ + public static BigDecimal reciprocal(BigDecimal x, MathContext mathContext) { + return BigDecimal.ONE.divide(x, mathContext); + } + + /** + * Calculates the factorial of the specified integer argument. + * + *

factorial = 1 * 2 * 3 * ... n

+ * + * @param n the {@link BigDecimal} + * @return the factorial {@link BigDecimal} + * @throws ArithmeticException if x < 0 + */ + public static BigDecimal factorial(int n) { + if (n < 0) { + throw new ArithmeticException("Illegal factorial(n) for n < 0: n = " + n); + } + if (n < factorialCache.length) { + return factorialCache[n]; + } + + BigDecimal result = factorialCache[factorialCache.length - 1]; + return result.multiply(factorialRecursion(factorialCache.length, n)); + } + + private static BigDecimal factorialLoop(int n1, final int n2) { + final long limit = Long.MAX_VALUE / n2; + long accu = 1; + BigDecimal result = BigDecimal.ONE; + while (n1 <= n2) { + if (accu <= limit) { + accu *= n1; + } else { + result = result.multiply(BigDecimal.valueOf(accu)); + accu = n1; + } + n1++; + } + return result.multiply(BigDecimal.valueOf(accu)); + } + + private static BigDecimal factorialRecursion(final int n1, final int n2) { + int threshold = n1 > 200 ? 80 : 150; + if (n2 - n1 < threshold) { + return factorialLoop(n1, n2); + } + final int mid = (n1 + n2) >> 1; + return factorialRecursion(mid + 1, n2).multiply(factorialRecursion(n1, mid)); + } + + /** + * Calculates the factorial of the specified {@link BigDecimal}. + * + *

This implementation uses + * Spouge's approximation + * to calculate the factorial for non-integer values.

+ * + *

This involves calculating a series of constants that depend on the desired precision. + * Since this constant calculation is quite expensive (especially for higher precisions), + * the constants for a specific precision will be cached + * and subsequent calls to this method with the same precision will be much faster.

+ * + *

It is therefore recommended to do one call to this method with the standard precision of your application during the startup phase + * and to avoid calling it with many different precisions.

+ * + *

See: Wikipedia: Factorial - Extension of factorial to non-integer values of argument

+ * + * @param x the {@link BigDecimal} + * @param mathContext the {@link MathContext} used for the result + * @return the factorial {@link BigDecimal} + * @throws ArithmeticException if x is a negative integer value (-1, -2, -3, ...) + * @throws UnsupportedOperationException if x is a non-integer value and the {@link MathContext} has unlimited precision + * @see #factorial(int) + * @see #gamma(BigDecimal, MathContext) + */ + public static BigDecimal factorial(BigDecimal x, MathContext mathContext) { + if (isIntValue(x)) { + return round(factorial(x.intValueExact()), mathContext); + } + + // https://en.wikipedia.org/wiki/Spouge%27s_approximation + checkMathContext(mathContext); + MathContext mc = new MathContext(mathContext.getPrecision() << 1, mathContext.getRoundingMode()); + + int a = mathContext.getPrecision() * 13 / 10; + List constants = getSpougeFactorialConstants(a); + + BigDecimal bigA = BigDecimal.valueOf(a); + + boolean negative = false; + BigDecimal factor = constants.get(0); + for (int k = 1; k < a; k++) { + BigDecimal bigK = BigDecimal.valueOf(k); + factor = factor.add(constants.get(k).divide(x.add(bigK), mc)); + negative = !negative; + } + + BigDecimal result = pow(x.add(bigA), x.add(BigDecimal.valueOf(0.5)), mc); + result = result.multiply(exp(x.negate().subtract(bigA), mc)); + result = result.multiply(factor); + + return round(result, mathContext); + } + + static List getSpougeFactorialConstants(int a) { + synchronized (spougeFactorialConstantsCacheLock) { + return spougeFactorialConstantsCache.computeIfAbsent(a, key -> { + List constants = new ArrayList<>(a); + MathContext mc = new MathContext(a * 15 / 10); + + BigDecimal c0 = sqrt(pi(mc).multiply(TWO, mc), mc); + constants.add(c0); + + boolean negative = false; + for (int k = 1; k < a; k++) { + BigDecimal bigK = BigDecimal.valueOf(k); + long deltaAK = (long)a - k; + BigDecimal ck = pow(BigDecimal.valueOf(deltaAK), bigK.subtract(ONE_HALF), mc); + ck = ck.multiply(exp(BigDecimal.valueOf(deltaAK), mc), mc); + ck = ck.divide(factorial(k - 1), mc); + if (negative) { + ck = ck.negate(); + } + constants.add(ck); + + negative = !negative; + } + + return Collections.unmodifiableList(constants); + }); + } + } + + /** + * Calculates the gamma function of the specified {@link BigDecimal}. + * + *

This implementation uses {@link #factorial(BigDecimal, MathContext)} internally, + * therefore the performance implications described there apply also for this method. + * + *

See: Wikipedia: Gamma function

+ * + * @param x the {@link BigDecimal} + * @param mathContext the {@link MathContext} used for the result + * @return the gamma {@link BigDecimal} + * @throws ArithmeticException if x-1 is a negative integer value (-1, -2, -3, ...) + * @throws UnsupportedOperationException if x is a non-integer value and the {@link MathContext} has unlimited precision + * @see #factorial(BigDecimal, MathContext) + */ + public static BigDecimal gamma(BigDecimal x, MathContext mathContext) { + return factorial(x.subtract(ONE), mathContext); + } + + /** + * Calculates the Bernoulli number for the specified index. + * + *

This function calculates the first Bernoulli numbers and therefore bernoulli(1) returns -0.5

+ *

Note that bernoulli(x) for all odd x > 1 returns 0

+ *

See: Wikipedia: Bernoulli number

+ * + * @param n the index of the Bernoulli number to be calculated (starting at 0) + * @param mathContext the {@link MathContext} used for the result + * @return the Bernoulli number for the specified index + * @throws ArithmeticException if x < 0 + * @throws ArithmeticException if the result is inexact but the + * rounding mode is {@code UNNECESSARY} or + * {@code mc.precision == 0} and the quotient has a + * non-terminating decimal expansion. + */ + public static BigDecimal bernoulli(int n, MathContext mathContext) { + if (n < 0) { + throw new ArithmeticException("Illegal bernoulli(n) for n < 0: n = " + n); + } + + BigRational b = BigRational.bernoulli(n); + return b.toBigDecimal(mathContext); + } + + /** + * Calculates {@link BigDecimal} x to the power of {@link BigDecimal} y (xy). + * + * @param x the {@link BigDecimal} value to take to the power + * @param y the {@link BigDecimal} value to serve as exponent + * @param mathContext the {@link MathContext} used for the result + * @return the calculated x to the power of y with the precision specified in the mathContext + * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision + * @see #pow(BigDecimal, long, MathContext) + */ + public static BigDecimal pow(BigDecimal x, BigDecimal y, MathContext mathContext) { + checkMathContext(mathContext); + if (x.signum() == 0) { + switch (y.signum()) { + case 0 : return round(ONE, mathContext); + case 1 : return round(ZERO, mathContext); + } + } + + // TODO optimize y=0, y=1, y=10^k, y=-1, y=-10^k + + try { + long longValue = y.longValueExact(); + return pow(x, longValue, mathContext); + } catch (ArithmeticException ex) { + // ignored + } + + if (fractionalPart(y).signum() == 0) { + return powInteger(x, y, mathContext); + } + + // x^y = exp(y*log(x)) + MathContext mc = new MathContext(mathContext.getPrecision() + 6, mathContext.getRoundingMode()); + BigDecimal result = exp(y.multiply(log(x, mc), mc), mc); + + return round(result, mathContext); + } + + /** + * Calculates {@link BigDecimal} x to the power of long y (xy). + * + *

The implementation tries to minimize the number of multiplications of {@link BigDecimal x} (using squares whenever possible).

+ * + *

See: Wikipedia: Exponentiation - efficient computation

+ * + * @param x the {@link BigDecimal} value to take to the power + * @param y the long value to serve as exponent + * @param mathContext the {@link MathContext} used for the result + * @return the calculated x to the power of y with the precision specified in the mathContext + * @throws ArithmeticException if y is negative and the result is inexact but the + * rounding mode is {@code UNNECESSARY} or + * {@code mc.precision == 0} and the quotient has a + * non-terminating decimal expansion. + * @throws ArithmeticException if the rounding mode is + * {@code UNNECESSARY} and the + * {@code BigDecimal} operation would require rounding. + */ + public static BigDecimal pow(BigDecimal x, long y, MathContext mathContext) { + MathContext mc = mathContext.getPrecision() == 0 ? mathContext : new MathContext(mathContext.getPrecision() + 10, mathContext.getRoundingMode()); + + // TODO optimize y=0, y=1, y=10^k, y=-1, y=-10^k + + if (y < 0) { + BigDecimal value = reciprocal(pow(x, -y, mc), mc); + return round(value, mathContext); + } + + BigDecimal result = ONE; + while (y > 0) { + if ((y & 1) == 1) { + // odd exponent -> multiply result with x + result = result.multiply(x, mc); + y -= 1; + } + + if (y > 0) { + // even exponent -> square x + x = x.multiply(x, mc); + } + + y >>= 1; + } + + return round(result, mathContext); + } + + /** + * Calculates {@link BigDecimal} x to the power of the integer value y (xy). + * + *

The value y MUST be an integer value.

+ * + * @param x the {@link BigDecimal} value to take to the power + * @param integerY the {@link BigDecimal} integer value to serve as exponent + * @param mathContext the {@link MathContext} used for the result + * @return the calculated x to the power of y with the precision specified in the mathContext + * @see #pow(BigDecimal, long, MathContext) + */ + private static BigDecimal powInteger(BigDecimal x, BigDecimal integerY, MathContext mathContext) { + if (fractionalPart(integerY).signum() != 0) { + throw new IllegalArgumentException("Not integer value: " + integerY); + } + + if (integerY.signum() < 0) { + return ONE.divide(powInteger(x, integerY.negate(), mathContext), mathContext); + } + + MathContext mc = new MathContext(Math.max(mathContext.getPrecision(), -integerY.scale()) + 30, mathContext.getRoundingMode()); + + BigDecimal result = ONE; + while (integerY.signum() > 0) { + BigDecimal halfY = integerY.divide(TWO, mc); + + if (fractionalPart(halfY).signum() != 0) { + // odd exponent -> multiply result with x + result = result.multiply(x, mc); + integerY = integerY.subtract(ONE); + halfY = integerY.divide(TWO, mc); + } + + if (halfY.signum() > 0) { + // even exponent -> square x + x = x.multiply(x, mc); + } + + integerY = halfY; + } + + return round(result, mathContext); + } + + /** + * Calculates the square root of {@link BigDecimal} x. + * + *

See Wikipedia: Square root

+ * + * @param x the {@link BigDecimal} value to calculate the square root + * @param mathContext the {@link MathContext} used for the result + * @return the calculated square root of x with the precision specified in the mathContext + * @throws ArithmeticException if x < 0 + * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision + */ + public static BigDecimal sqrt(BigDecimal x, MathContext mathContext) { + checkMathContext(mathContext); + switch (x.signum()) { + case 0: + return ZERO; + case -1: + throw new ArithmeticException("Illegal sqrt(x) for x < 0: x = " + x); + } + + int maxPrecision = mathContext.getPrecision() + 6; + BigDecimal acceptableError = ONE.movePointLeft(mathContext.getPrecision() + 1); + + BigDecimal result; + int adaptivePrecision; + if (isDoubleValue(x)) { + result = BigDecimal.valueOf(Math.sqrt(x.doubleValue())); + adaptivePrecision = EXPECTED_INITIAL_PRECISION; + } else { + result = x.multiply(ONE_HALF, mathContext); + adaptivePrecision = 1; + } + + BigDecimal last; + + if (adaptivePrecision < maxPrecision) { + if (result.multiply(result).compareTo(x) == 0) { + return round(result, mathContext); // early exit if x is a square number + } + + do { + last = result; + adaptivePrecision <<= 1; + if (adaptivePrecision > maxPrecision) { + adaptivePrecision = maxPrecision; + } + MathContext mc = new MathContext(adaptivePrecision, mathContext.getRoundingMode()); + result = x.divide(result, mc).add(last).multiply(ONE_HALF, mc); + } + while (adaptivePrecision < maxPrecision || result.subtract(last).abs().compareTo(acceptableError) > 0); + } + + return round(result, mathContext); + } + + /** + * Calculates the n'th root of {@link BigDecimal} x. + * + *

See Wikipedia: Square root

+ * @param x the {@link BigDecimal} value to calculate the n'th root + * @param n the {@link BigDecimal} defining the root + * @param mathContext the {@link MathContext} used for the result + * + * @return the calculated n'th root of x with the precision specified in the mathContext + * @throws ArithmeticException if x < 0 + * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision + */ + public static BigDecimal root(BigDecimal x, BigDecimal n, MathContext mathContext) { + checkMathContext(mathContext); + switch (x.signum()) { + case 0: + return ZERO; + case -1: + throw new ArithmeticException("Illegal root(x) for x < 0: x = " + x); + } + + if (n.compareTo(BigDecimal.ONE) <= 0) { + MathContext mc = new MathContext(mathContext.getPrecision() + 6, mathContext.getRoundingMode()); + return pow(x, BigDecimal.ONE.divide(n, mc), mathContext); + } + + int maxPrecision = mathContext.getPrecision() + 4; + BigDecimal acceptableError = ONE.movePointLeft(mathContext.getPrecision() + 1); + + BigDecimal nMinus1 = n.subtract(ONE); + BigDecimal result = x.divide(TWO, MathContext.DECIMAL32); + int adaptivePrecision = 2; // first approximation has really bad precision + BigDecimal step; + + do { + adaptivePrecision *= 3; + if (adaptivePrecision > maxPrecision) { + adaptivePrecision = maxPrecision; + } + MathContext mc = new MathContext(adaptivePrecision, mathContext.getRoundingMode()); + + step = x.divide(pow(result, nMinus1, mc), mc).subtract(result).divide(n, mc); + result = result.add(step); + } while (adaptivePrecision < maxPrecision || step.abs().compareTo(acceptableError) > 0); + + return round(result, mathContext); + } + + /** + * Calculates the natural logarithm of {@link BigDecimal} x. + * + *

See: Wikipedia: Natural logarithm

+ * + * @param x the {@link BigDecimal} to calculate the natural logarithm for + * @param mathContext the {@link MathContext} used for the result + * @return the calculated natural logarithm {@link BigDecimal} with the precision specified in the mathContext + * @throws ArithmeticException if x <= 0 + * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision + */ + public static BigDecimal log(BigDecimal x, MathContext mathContext) { + checkMathContext(mathContext); + if (x.signum() <= 0) { + throw new ArithmeticException("Illegal log(x) for x <= 0: x = " + x); + } + if (x.compareTo(ONE) == 0) { + return ZERO; + } + + BigDecimal result; + switch (x.compareTo(TEN)) { + case 0: + result = logTen(mathContext); + break; + case 1: + result = logUsingExponent(x, mathContext); + break; + default : + result = logUsingTwoThree(x, mathContext); + } + + return round(result, mathContext); + } + + /** + * Calculates the logarithm of {@link BigDecimal} x to the base 2. + * + * @param x the {@link BigDecimal} to calculate the logarithm base 2 for + * @param mathContext the {@link MathContext} used for the result + * @return the calculated natural logarithm {@link BigDecimal} to the base 2 with the precision specified in the mathContext + * @throws ArithmeticException if x <= 0 + * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision + */ + public static BigDecimal log2(BigDecimal x, MathContext mathContext) { + checkMathContext(mathContext); + MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); + + BigDecimal result = log(x, mc).divide(logTwo(mc), mc); + return round(result, mathContext); + } + + /** + * Calculates the logarithm of {@link BigDecimal} x to the base 10. + * + * @param x the {@link BigDecimal} to calculate the logarithm base 10 for + * @param mathContext the {@link MathContext} used for the result + * @return the calculated natural logarithm {@link BigDecimal} to the base 10 with the precision specified in the mathContext + * @throws ArithmeticException if x <= 0 + * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision + */ + public static BigDecimal log10(BigDecimal x, MathContext mathContext) { + checkMathContext(mathContext); + MathContext mc = new MathContext(mathContext.getPrecision() + 2, mathContext.getRoundingMode()); + + BigDecimal result = log(x, mc).divide(logTen(mc), mc); + return round(result, mathContext); + } + + private static BigDecimal logUsingNewton(BigDecimal x, MathContext mathContext) { + // https://en.wikipedia.org/wiki/Natural_logarithm in chapter 'High Precision' + // y = y + 2 * (x-exp(y)) / (x+exp(y)) + + int maxPrecision = mathContext.getPrecision() + 20; + BigDecimal acceptableError = ONE.movePointLeft(mathContext.getPrecision() + 1); + //System.out.println("logUsingNewton(" + x + " " + mathContext + ") precision " + maxPrecision); + + BigDecimal result; + int adaptivePrecision; + double doubleX = x.doubleValue(); + if (doubleX > 0.0 && isDoubleValue(x)) { + result = BigDecimal.valueOf(Math.log(doubleX)); + adaptivePrecision = EXPECTED_INITIAL_PRECISION; + } else { + result = x.divide(TWO, mathContext); + adaptivePrecision = 1; + } + + BigDecimal step; + + do { + adaptivePrecision *= 3; + if (adaptivePrecision > maxPrecision) { + adaptivePrecision = maxPrecision; + } + MathContext mc = new MathContext(adaptivePrecision, mathContext.getRoundingMode()); + + BigDecimal expY = BigDecimalMath.exp(result, mc); + step = TWO.multiply(x.subtract(expY)).divide(x.add(expY), mc); + //System.out.println(" step " + step + " adaptivePrecision=" + adaptivePrecision); + result = result.add(step); + } while (adaptivePrecision < maxPrecision || step.abs().compareTo(acceptableError) > 0); + + return result; + } + + private static BigDecimal logUsingExponent(BigDecimal x, MathContext mathContext) { + MathContext mcDouble = new MathContext(mathContext.getPrecision() << 1, mathContext.getRoundingMode()); + MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); + //System.out.println("logUsingExponent(" + x + " " + mathContext + ") precision " + mc); + + int exponent = exponent(x); + BigDecimal mantissa = mantissa(x); + + BigDecimal result = logUsingTwoThree(mantissa, mc); + if (exponent != 0) { + result = result.add(valueOf(exponent).multiply(logTen(mcDouble), mc)); + } + return result; + } + + private static BigDecimal logUsingTwoThree(BigDecimal x, MathContext mathContext) { + MathContext mcDouble = new MathContext(mathContext.getPrecision() << 1, mathContext.getRoundingMode()); + MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); + //System.out.println("logUsingTwoThree(" + x + " " + mathContext + ") precision " + mc); + + int factorOfTwo = 0; + int powerOfTwo = 1; + int factorOfThree = 0; + int powerOfThree = 1; + + double value = x.doubleValue(); + if (value < 0.01) { + // do nothing + } else if (value < 0.1) { // never happens when called by logUsingExponent() + while (value < 0.6) { + value *= 2; + factorOfTwo--; + powerOfTwo <<= 1; + } + } + else if (value < 0.115) { // (0.1 - 0.11111 - 0.115) -> (0.9 - 1.0 - 1.035) + factorOfThree = -2; + powerOfThree = 9; + } + else if (value < 0.14) { // (0.115 - 0.125 - 0.14) -> (0.92 - 1.0 - 1.12) + factorOfTwo = -3; + powerOfTwo = 8; + } + else if (value < 0.2) { // (0.14 - 0.16667 - 0.2) - (0.84 - 1.0 - 1.2) + factorOfTwo = -1; + powerOfTwo = 2; + factorOfThree = -1; + powerOfThree = 3; + } + else if (value < 0.3) { // (0.2 - 0.25 - 0.3) -> (0.8 - 1.0 - 1.2) + factorOfTwo = -2; + powerOfTwo = 4; + } + else if (value < 0.42) { // (0.3 - 0.33333 - 0.42) -> (0.9 - 1.0 - 1.26) + factorOfThree = -1; + powerOfThree = 3; + } + else if (value < 0.7) { // (0.42 - 0.5 - 0.7) -> (0.84 - 1.0 - 1.4) + factorOfTwo = -1; + powerOfTwo = 2; + } + else if (value < 1.4) { // (0.7 - 1.0 - 1.4) -> (0.7 - 1.0 - 1.4) + // do nothing + } + else if (value < 2.5) { // (1.4 - 2.0 - 2.5) -> (0.7 - 1.0 - 1.25) + factorOfTwo = 1; + powerOfTwo = 2; + } + else if (value < 3.5) { // (2.5 - 3.0 - 3.5) -> (0.833333 - 1.0 - 1.166667) + factorOfThree = 1; + powerOfThree = 3; + } + else if (value < 5.0) { // (3.5 - 4.0 - 5.0) -> (0.875 - 1.0 - 1.25) + factorOfTwo = 2; + powerOfTwo = 4; + } + else if (value < 7.0) { // (5.0 - 6.0 - 7.0) -> (0.833333 - 1.0 - 1.166667) + factorOfThree = 1; + powerOfThree = 3; + factorOfTwo = 1; + powerOfTwo = 2; + } + else if (value < 8.5) { // (7.0 - 8.0 - 8.5) -> (0.875 - 1.0 - 1.0625) + factorOfTwo = 3; + powerOfTwo = 8; + } + else if (value < 10.0) { // (8.5 - 9.0 - 10.0) -> (0.94444 - 1.0 - 1.11111) + factorOfThree = 2; + powerOfThree = 9; + } + else { + while (value > 1.4) { // never happens when called by logUsingExponent() + value /= 2; + factorOfTwo++; + powerOfTwo <<= 1; + } + } + + BigDecimal correctedX = x; + BigDecimal result = ZERO; + + if (factorOfTwo > 0) { + correctedX = correctedX.divide(valueOf(powerOfTwo), mc); + result = result.add(logTwo(mcDouble).multiply(valueOf(factorOfTwo), mc)); + } + else if (factorOfTwo < 0) { + correctedX = correctedX.multiply(valueOf(powerOfTwo), mc); + result = result.subtract(logTwo(mcDouble).multiply(valueOf(-factorOfTwo), mc)); + } + + if (factorOfThree > 0) { + correctedX = correctedX.divide(valueOf(powerOfThree), mc); + result = result.add(logThree(mcDouble).multiply(valueOf(factorOfThree), mc)); + } + else if (factorOfThree < 0) { + correctedX = correctedX.multiply(valueOf(powerOfThree), mc); + result = result.subtract(logThree(mcDouble).multiply(valueOf(-factorOfThree), mc)); + } + + if (x == correctedX && result == ZERO) { + return logUsingNewton(x, mathContext); + } + + result = result.add(logUsingNewton(correctedX, mc), mc); + + return result; + } + + /** + * Returns the number pi. + * + *

See Wikipedia: Pi

+ * + * @param mathContext the {@link MathContext} used for the result + * @return the number pi with the precision specified in the mathContext + * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision + */ + public static BigDecimal pi(MathContext mathContext) { + checkMathContext(mathContext); + BigDecimal result = null; + + synchronized (piCacheLock) { + if (piCache != null && mathContext.getPrecision() <= piCache.precision()) { + result = piCache; + } else { + piCache = piChudnovski(mathContext); + return piCache; + } + } + + return round(result, mathContext); + } + + private static BigDecimal piChudnovski(MathContext mathContext) { + MathContext mc = new MathContext(mathContext.getPrecision() + 10, mathContext.getRoundingMode()); + + final BigDecimal value24 = BigDecimal.valueOf(24); + final BigDecimal value640320 = BigDecimal.valueOf(640320); + final BigDecimal value13591409 = BigDecimal.valueOf(13591409); + final BigDecimal value545140134 = BigDecimal.valueOf(545140134); + final BigDecimal valueDivisor = value640320.pow(3).divide(value24, mc); + + BigDecimal sumA = BigDecimal.ONE; + BigDecimal sumB = BigDecimal.ZERO; + + BigDecimal a = BigDecimal.ONE; + long dividendTerm1 = 5; // -(6*k - 5) + long dividendTerm2 = -1; // 2*k - 1 + long dividendTerm3 = -1; // 6*k - 1 + BigDecimal kPower3 = BigDecimal.ZERO; + + long iterationCount = (mc.getPrecision()+13) / 14; + for (long k = 1; k <= iterationCount; k++) { + BigDecimal valueK = BigDecimal.valueOf(k); + dividendTerm1 += -6; + dividendTerm2 += 2; + dividendTerm3 += 6; + BigDecimal dividend = BigDecimal.valueOf(dividendTerm1).multiply(BigDecimal.valueOf(dividendTerm2)).multiply(BigDecimal.valueOf(dividendTerm3)); + kPower3 = valueK.pow(3); + BigDecimal divisor = kPower3.multiply(valueDivisor, mc); + a = a.multiply(dividend).divide(divisor, mc); + BigDecimal b = valueK.multiply(a, mc); + + sumA = sumA.add(a); + sumB = sumB.add(b); + } + + final BigDecimal value426880 = BigDecimal.valueOf(426880); + final BigDecimal value10005 = BigDecimal.valueOf(10005); + final BigDecimal factor = value426880.multiply(sqrt(value10005, mc)); + BigDecimal pi = factor.divide(value13591409.multiply(sumA, mc).add(value545140134.multiply(sumB, mc)), mc); + + return round(pi, mathContext); + } + + /** + * Returns the number e. + * + *

See Wikipedia: E (mathematical_constant)

+ * + * @param mathContext the {@link MathContext} used for the result + * @return the number e with the precision specified in the mathContext + * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision + */ + public static BigDecimal e(MathContext mathContext) { + checkMathContext(mathContext); + BigDecimal result = null; + + synchronized (eCacheLock) { + if (eCache != null && mathContext.getPrecision() <= eCache.precision()) { + result = eCache; + } else { + eCache = exp(ONE, mathContext); + return eCache; + } + } + + return round(result, mathContext); + } + + private static BigDecimal logTen(MathContext mathContext) { + BigDecimal result = null; + + synchronized (log10CacheLock) { + if (log10Cache != null && mathContext.getPrecision() <= log10Cache.precision()) { + result = log10Cache; + } else { + log10Cache = logUsingNewton(BigDecimal.TEN, mathContext); + return log10Cache; + } + } + + return round(result, mathContext); + } + + private static BigDecimal logTwo(MathContext mathContext) { + BigDecimal result = null; + + synchronized (log2CacheLock) { + if (log2Cache != null && mathContext.getPrecision() <= log2Cache.precision()) { + result = log2Cache; + } else { + log2Cache = logUsingNewton(TWO, mathContext); + return log2Cache; + } + } + + return round(result, mathContext); + } + + private static BigDecimal logThree(MathContext mathContext) { + BigDecimal result = null; + + synchronized (log3CacheLock) { + if (log3Cache != null && mathContext.getPrecision() <= log3Cache.precision()) { + result = log3Cache; + } else { + log3Cache = logUsingNewton(THREE, mathContext); + return log3Cache; + } + } + + return round(result, mathContext); + } + + /** + * Calculates the natural exponent of {@link BigDecimal} x (ex). + * + *

See: Wikipedia: Exponent

+ * + * @param x the {@link BigDecimal} to calculate the exponent for + * @param mathContext the {@link MathContext} used for the result + * @return the calculated exponent {@link BigDecimal} with the precision specified in the mathContext + * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision + */ + public static BigDecimal exp(BigDecimal x, MathContext mathContext) { + checkMathContext(mathContext); + if (x.signum() == 0) { + return ONE; + } + + return expIntegralFractional(x, mathContext); + } + + private static BigDecimal expIntegralFractional(BigDecimal x, MathContext mathContext) { + BigDecimal integralPart = integralPart(x); + + if (integralPart.signum() == 0) { + return expTaylor(x, mathContext); + } + + BigDecimal fractionalPart = x.subtract(integralPart); + + MathContext mc = new MathContext(mathContext.getPrecision() + 10, mathContext.getRoundingMode()); + + BigDecimal z = ONE.add(fractionalPart.divide(integralPart, mc)); + BigDecimal t = expTaylor(z, mc); + + BigDecimal result = pow(t, integralPart.intValueExact(), mc); + + return round(result, mathContext); + } + + private static BigDecimal expTaylor(BigDecimal x, MathContext mathContext) { + MathContext mc = new MathContext(mathContext.getPrecision() + 6, mathContext.getRoundingMode()); + + x = x.divide(valueOf(256), mc); + + BigDecimal result = ExpCalculator.INSTANCE.calculate(x, mc); + result = BigDecimalMath.pow(result, 256, mc); + return round(result, mathContext); + } + + /** + * Calculates the sine (sinus) of {@link BigDecimal} x. + * + *

See: Wikipedia: Sine

+ * + * @param x the {@link BigDecimal} to calculate the sine for + * @param mathContext the {@link MathContext} used for the result + * @return the calculated sine {@link BigDecimal} with the precision specified in the mathContext + * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision + */ + public static BigDecimal sin(BigDecimal x, MathContext mathContext) { + checkMathContext(mathContext); + MathContext mc = new MathContext(mathContext.getPrecision() + 6, mathContext.getRoundingMode()); + + if (x.abs().compareTo(ROUGHLY_TWO_PI) > 0) { + MathContext mc2 = new MathContext(mc.getPrecision() + 4, mathContext.getRoundingMode()); + BigDecimal twoPi = TWO.multiply(pi(mc2)); + x = x.remainder(twoPi, mc2); + } + + BigDecimal result = SinCalculator.INSTANCE.calculate(x, mc); + return round(result, mathContext); + } + + /** + * Calculates the arc sine (inverted sine) of {@link BigDecimal} x. + * + *

See: Wikipedia: Arcsine

+ * + * @param x the {@link BigDecimal} to calculate the arc sine for + * @param mathContext the {@link MathContext} used for the result + * @return the calculated arc sine {@link BigDecimal} with the precision specified in the mathContext + * @throws ArithmeticException if x > 1 or x < -1 + * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision + */ + public static BigDecimal asin(BigDecimal x, MathContext mathContext) { + checkMathContext(mathContext); + if (x.compareTo(ONE) > 0) { + throw new ArithmeticException("Illegal asin(x) for x > 1: x = " + x); + } + if (x.compareTo(MINUS_ONE) < 0) { + throw new ArithmeticException("Illegal asin(x) for x < -1: x = " + x); + } + + if (x.signum() == -1) { + return asin(x.negate(), mathContext).negate(); + } + + MathContext mc = new MathContext(mathContext.getPrecision() + 6, mathContext.getRoundingMode()); + + if (x.compareTo(BigDecimal.valueOf(0.707107)) >= 0) { + BigDecimal xTransformed = sqrt(ONE.subtract(x.multiply(x)), mc); + return acos(xTransformed, mathContext); + } + + BigDecimal result = AsinCalculator.INSTANCE.calculate(x, mc); + return round(result, mathContext); + } + + /** + * Calculates the cosine (cosinus) of {@link BigDecimal} x. + * + *

See: Wikipedia: Cosine

+ * + * @param x the {@link BigDecimal} to calculate the cosine for + * @param mathContext the {@link MathContext} used for the result + * @return the calculated cosine {@link BigDecimal} with the precision specified in the mathContext + * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision + */ + public static BigDecimal cos(BigDecimal x, MathContext mathContext) { + checkMathContext(mathContext); + MathContext mc = new MathContext(mathContext.getPrecision() + 6, mathContext.getRoundingMode()); + + if (x.abs().compareTo(ROUGHLY_TWO_PI) > 0) { + MathContext mc2 = new MathContext(mc.getPrecision() + 4, mathContext.getRoundingMode()); + BigDecimal twoPi = TWO.multiply(pi(mc2), mc2); + x = x.remainder(twoPi, mc2); + } + + BigDecimal result = CosCalculator.INSTANCE.calculate(x, mc); + return round(result, mathContext); + } + + /** + * Calculates the arc cosine (inverted cosine) of {@link BigDecimal} x. + * + *

See: Wikipedia: Arccosine

+ * + * @param x the {@link BigDecimal} to calculate the arc cosine for + * @param mathContext the {@link MathContext} used for the result + * @return the calculated arc sine {@link BigDecimal} with the precision specified in the mathContext + * @throws ArithmeticException if x > 1 or x < -1 + * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision + */ + public static BigDecimal acos(BigDecimal x, MathContext mathContext) { + checkMathContext(mathContext); + if (x.compareTo(ONE) > 0) { + throw new ArithmeticException("Illegal acos(x) for x > 1: x = " + x); + } + if (x.compareTo(MINUS_ONE) < 0) { + throw new ArithmeticException("Illegal acos(x) for x < -1: x = " + x); + } + + MathContext mc = new MathContext(mathContext.getPrecision() + 6, mathContext.getRoundingMode()); + + BigDecimal result = pi(mc).divide(TWO, mc).subtract(asin(x, mc)); + return round(result, mathContext); + } + + /** + * Calculates the tangens of {@link BigDecimal} x. + * + *

See: Wikipedia: Tangens

+ * + * @param x the {@link BigDecimal} to calculate the tangens for + * @param mathContext the {@link MathContext} used for the result + * @return the calculated tangens {@link BigDecimal} with the precision specified in the mathContext + * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision + */ + public static BigDecimal tan(BigDecimal x, MathContext mathContext) { + checkMathContext(mathContext); + if (x.signum() == 0) { + return ZERO; + } + + MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); + BigDecimal result = sin(x, mc).divide(cos(x, mc), mc); + return round(result, mathContext); + } + + /** + * Calculates the arc tangens (inverted tangens) of {@link BigDecimal} x. + * + *

See: Wikipedia: Arctangens

+ * + * @param x the {@link BigDecimal} to calculate the arc tangens for + * @param mathContext the {@link MathContext} used for the result + * @return the calculated arc tangens {@link BigDecimal} with the precision specified in the mathContext + * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision + */ + public static BigDecimal atan(BigDecimal x, MathContext mathContext) { + checkMathContext(mathContext); + MathContext mc = new MathContext(mathContext.getPrecision() + 6, mathContext.getRoundingMode()); + + x = x.divide(sqrt(ONE.add(x.multiply(x, mc)), mc), mc); + + BigDecimal result = asin(x, mc); + return round(result, mathContext); + } + + /** + * Calculates the arc tangens (inverted tangens) of {@link BigDecimal} y / x in the range -pi to pi. + * + *

This is useful to calculate the angle theta from the conversion of rectangular + * coordinates (xy) to polar coordinates (r, theta).

+ * + *

See: Wikipedia: Atan2

+ * + * @param y the {@link BigDecimal} + * @param x the {@link BigDecimal} + * @param mathContext the {@link MathContext} used for the result + * @return the calculated arc tangens {@link BigDecimal} with the precision specified in the mathContext + * @throws ArithmeticException if x = 0 and y = 0 + * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision + */ + public static BigDecimal atan2(BigDecimal y, BigDecimal x, MathContext mathContext) { + checkMathContext(mathContext); + MathContext mc = new MathContext(mathContext.getPrecision() + 3, mathContext.getRoundingMode()); + + if (x.signum() > 0) { // x > 0 + return atan(y.divide(x, mc), mathContext); + } else if (x.signum() < 0) { + if (y.signum() > 0) { // x < 0 && y > 0 + return atan(y.divide(x, mc), mc).add(pi(mc), mathContext); + } else if (y.signum() < 0) { // x < 0 && y < 0 + return atan(y.divide(x, mc), mc).subtract(pi(mc), mathContext); + } else { // x < 0 && y = 0 + return pi(mathContext); + } + } else { + if (y.signum() > 0) { // x == 0 && y > 0 + return pi(mc).divide(TWO, mathContext); + } else if (y.signum() < 0) { // x == 0 && y < 0 + return pi(mc).divide(TWO, mathContext).negate(); + } else { + throw new ArithmeticException("Illegal atan2(y, x) for x = 0; y = 0"); + } + } + } + + /** + * Calculates the cotangens of {@link BigDecimal} x. + * + *

See: Wikipedia: Cotangens

+ * + * @param x the {@link BigDecimal} to calculate the cotangens for + * @param mathContext the {@link MathContext} used for the result + * @return the calculated cotanges {@link BigDecimal} with the precision specified in the mathContext + * @throws ArithmeticException if x = 0 + * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision + */ + public static BigDecimal cot(BigDecimal x, MathContext mathContext) { + checkMathContext(mathContext); + if (x.signum() == 0) { + throw new ArithmeticException("Illegal cot(x) for x = 0"); + } + + MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); + BigDecimal result = cos(x, mc).divide(sin(x, mc), mc); + return round(result, mathContext); + } + + /** + * Calculates the inverse cotangens (arc cotangens) of {@link BigDecimal} x. + * + *

See: Wikipedia: Arccotangens

+ * + * @param x the {@link BigDecimal} to calculate the arc cotangens for + * @param mathContext the {@link MathContext} used for the result + * @return the calculated arc cotangens {@link BigDecimal} with the precision specified in the mathContext + * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision + */ + public static BigDecimal acot(BigDecimal x, MathContext mathContext) { + checkMathContext(mathContext); + MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); + BigDecimal result = pi(mc).divide(TWO, mc).subtract(atan(x, mc)); + return round(result, mathContext); + } + + /** + * Calculates the hyperbolic sine of {@link BigDecimal} x. + * + *

See: Wikipedia: Hyperbolic function

+ * + * @param x the {@link BigDecimal} to calculate the hyperbolic sine for + * @param mathContext the {@link MathContext} used for the result + * @return the calculated hyperbolic sine {@link BigDecimal} with the precision specified in the mathContext + * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision + */ + public static BigDecimal sinh(BigDecimal x, MathContext mathContext) { + checkMathContext(mathContext); + MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); + BigDecimal result = SinhCalculator.INSTANCE.calculate(x, mc); + return round(result, mathContext); + } + + /** + * Calculates the hyperbolic cosine of {@link BigDecimal} x. + * + *

See: Wikipedia: Hyperbolic function

+ * + * @param x the {@link BigDecimal} to calculate the hyperbolic cosine for + * @param mathContext the {@link MathContext} used for the result + * @return the calculated hyperbolic cosine {@link BigDecimal} with the precision specified in the mathContext + * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision + */ + public static BigDecimal cosh(BigDecimal x, MathContext mathContext) { + checkMathContext(mathContext); + MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); + BigDecimal result = CoshCalculator.INSTANCE.calculate(x, mc); + return round(result, mathContext); + } + + /** + * Calculates the hyperbolic tangens of {@link BigDecimal} x. + * + *

See: Wikipedia: Hyperbolic function

+ * + * @param x the {@link BigDecimal} to calculate the hyperbolic tangens for + * @param mathContext the {@link MathContext} used for the result + * @return the calculated hyperbolic tangens {@link BigDecimal} with the precision specified in the mathContext + * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision + */ + public static BigDecimal tanh(BigDecimal x, MathContext mathContext) { + checkMathContext(mathContext); + MathContext mc = new MathContext(mathContext.getPrecision() + 6, mathContext.getRoundingMode()); + BigDecimal result = sinh(x, mc).divide(cosh(x, mc), mc); + return round(result, mathContext); + } + + /** + * Calculates the hyperbolic cotangens of {@link BigDecimal} x. + * + *

See: Wikipedia: Hyperbolic function

+ * + * @param x the {@link BigDecimal} to calculate the hyperbolic cotangens for + * @param mathContext the {@link MathContext} used for the result + * @return the calculated hyperbolic cotangens {@link BigDecimal} with the precision specified in the mathContext + * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision + */ + public static BigDecimal coth(BigDecimal x, MathContext mathContext) { + checkMathContext(mathContext); + MathContext mc = new MathContext(mathContext.getPrecision() + 6, mathContext.getRoundingMode()); + BigDecimal result = cosh(x, mc).divide(sinh(x, mc), mc); + return round(result, mathContext); + } + + /** + * Calculates the arc hyperbolic sine (inverse hyperbolic sine) of {@link BigDecimal} x. + * + *

See: Wikipedia: Hyperbolic function

+ * + * @param x the {@link BigDecimal} to calculate the arc hyperbolic sine for + * @param mathContext the {@link MathContext} used for the result + * @return the calculated arc hyperbolic sine {@link BigDecimal} with the precision specified in the mathContext + * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision + */ + public static BigDecimal asinh(BigDecimal x, MathContext mathContext) { + checkMathContext(mathContext); + MathContext mc = new MathContext(mathContext.getPrecision() + 10, mathContext.getRoundingMode()); + BigDecimal result = log(x.add(sqrt(x.multiply(x, mc).add(ONE, mc), mc)), mc); + return round(result, mathContext); + } + + /** + * Calculates the arc hyperbolic cosine (inverse hyperbolic cosine) of {@link BigDecimal} x. + * + *

See: Wikipedia: Hyperbolic function

+ * + * @param x the {@link BigDecimal} to calculate the arc hyperbolic cosine for + * @param mathContext the {@link MathContext} used for the result + * @return the calculated arc hyperbolic cosine {@link BigDecimal} with the precision specified in the mathContext + * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision + */ + public static BigDecimal acosh(BigDecimal x, MathContext mathContext) { + checkMathContext(mathContext); + MathContext mc = new MathContext(mathContext.getPrecision() + 6, mathContext.getRoundingMode()); + BigDecimal result = log(x.add(sqrt(x.multiply(x).subtract(ONE), mc)), mc); + return round(result, mathContext); + } + + /** + * Calculates the arc hyperbolic tangens (inverse hyperbolic tangens) of {@link BigDecimal} x. + * + *

See: Wikipedia: Hyperbolic function

+ * + * @param x the {@link BigDecimal} to calculate the arc hyperbolic tangens for + * @param mathContext the {@link MathContext} used for the result + * @return the calculated arc hyperbolic tangens {@link BigDecimal} with the precision specified in the mathContext + * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision + */ + public static BigDecimal atanh(BigDecimal x, MathContext mathContext) { + if (x.compareTo(BigDecimal.ONE) >= 0) { + throw new ArithmeticException("Illegal atanh(x) for x >= 1: x = " + x); + } + if (x.compareTo(MINUS_ONE) <= 0) { + throw new ArithmeticException("Illegal atanh(x) for x <= -1: x = " + x); + } + + checkMathContext(mathContext); + MathContext mc = new MathContext(mathContext.getPrecision() + 6, mathContext.getRoundingMode()); + BigDecimal result = log(ONE.add(x).divide(ONE.subtract(x), mc), mc).multiply(ONE_HALF); + return round(result, mathContext); + } + + /** + * Calculates the arc hyperbolic cotangens (inverse hyperbolic cotangens) of {@link BigDecimal} x. + * + *

See: Wikipedia: Hyperbolic function

+ * + * @param x the {@link BigDecimal} to calculate the arc hyperbolic cotangens for + * @param mathContext the {@link MathContext} used for the result + * @return the calculated arc hyperbolic cotangens {@link BigDecimal} with the precision specified in the mathContext + * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision + */ + public static BigDecimal acoth(BigDecimal x, MathContext mathContext) { + checkMathContext(mathContext); + MathContext mc = new MathContext(mathContext.getPrecision() + 6, mathContext.getRoundingMode()); + BigDecimal result = log(x.add(ONE).divide(x.subtract(ONE), mc), mc).multiply(ONE_HALF); + return round(result, mathContext); + } + + private static void checkMathContext (MathContext mathContext) { + if (mathContext.getPrecision() == 0) { + throw new UnsupportedOperationException("Unlimited MathContext not supported"); + } + } +} diff --git a/src/main/java/ch/obermuhlner/math/big/BigFloat.java b/src/main/java/ch/obermuhlner/math/big/BigFloat.java new file mode 100644 index 0000000000..eb8944f2c4 --- /dev/null +++ b/src/main/java/ch/obermuhlner/math/big/BigFloat.java @@ -0,0 +1,1947 @@ +package ch.obermuhlner.math.big; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.math.MathContext; +import java.math.RoundingMode; +import java.util.Objects; + +/** + * A wrapper around {@link BigDecimal} which simplifies the consistent usage of the {@link MathContext} + * and provides a simpler API for calculations. + * + *

Overview

+ * + *

Every {@link BigFloat} instance has a reference to a {@link Context} that specifies the {@link MathContext} to be used for all calculations and values.

+ * + *

The API for calculations is simplified and more consistent with the typical mathematical usage.

+ *
    + *
  • Factory methods for values: + *
      + *
    • valueOf(BigFloat)
    • + *
    • valueOf(BigDecimal)
    • + *
    • valueOf(int)
    • + *
    • valueOf(long)
    • + *
    • valueOf(double)
    • + *
    • valueOf(String)
    • + *
    • pi()
    • + *
    • e()
    • + *
    + *
  • + *
  • All standard operators: + *
      + *
    • add(x)
    • + *
    • subtract(x)
    • + *
    • multiply(x)
    • + *
    • remainder(x)
    • + *
    • pow(y)
    • + *
    • root(y)
    • + *
    + *
  • + *
  • Calculation methods are overloaded for different value types: + *
      + *
    • add(BigFloat)
    • + *
    • add(BigDecimal)
    • + *
    • add(int)
    • + *
    • add(long)
    • + *
    • add(double)
    • + *
    • ...
    • + *
    + *
  • + *
  • Mathematical functions are written as they are traditionally are written: + *
      + *
    • abs(x)
    • + *
    • log(x)
    • + *
    • sin(x)
    • + *
    • min(x1, x2, ...)
    • + *
    • max(x1, x2, ...)
    • + *
    • ...
    • + *
    + *
  • + *
  • Support for advanced mathematical functions: + *
      + *
    • sqrt(x)
    • + *
    • log(x)
    • + *
    • exp(x)
    • + *
    • sin(x)
    • + *
    • cos(x)
    • + *
    • tan(x)
    • + *
    • ...
    • + *
    + *
  • + *
  • Methods to access parts of a value: + *
      + *
    • getMantissa()
    • + *
    • getExponent()
    • + *
    • getIntegralPart()
    • + *
    • getFractionalPart()
    • + *
    + *
  • + *
  • Equals and Hashcode methods: + *
      + *
    • equals(Object) that returns whether two BigFloat values are mathematically the same
    • + *
    • hashCode() consistent with equals(Object)
    • + *
    + *
  • + *
  • Comparison methods: + *
      + *
    • isEqual(BigFloat)
    • + *
    • isLessThan(BigFloat)
    • + *
    • isLessThanOrEqual(BigFloat)
    • + *
    • isGreaterThan(BigFloat)
    • + *
    • isGreaterThanOrEqual(BigFloat)
    • + *
    + *
  • + *
+ * + *

Usage

+ * + *

Before doing any calculations you need to create a Context specifying the precision used for all calculations.

+ *
+ * Context context = BigFloat.context(100); // precision of 100 digits
+ * Context anotherContext = BigFloat.context(new MathContext(10, RoundingMode.HALF_UP); // precision of 10 digits, rounding half up
+ * 
+ * + *

The Context can then be used to create the first value of the calculation:

+ *
+ * BigFloat value1 = context.valueOf(640320);
+ * 
+ * + *

The BigFloat instance holds a reference to the Context. This context is then passed from calculation to calculation.

+ *
+ * BigFloat value2 = context.valueOf(640320).pow(3).divide(24);
+ * BigFloat value3 = BigFloat.sin(value2);
+ * 
+ * + *

The BigFloat result can be converted to other numerical types:

+ *
+ * BigDecimal bigDecimalValue = value3.toBigDecimal();
+ * double doubleValue = value3.toDouble();
+ * long longValue = value3.toLong();
+ * int intValue = value3.toInt();
+ * 
+ */ +@SuppressWarnings("WeakerAccess") +public class BigFloat implements Comparable, Serializable { + private static final long serialVersionUID = -7323679117445486894L; + + /** + * Represents a value that is not a number. + * @see Double#NaN + */ + public static final BigFloat NaN = new SpecialBigFloat(SpecialBigFloat.Type.NaN); + + /** + * Represents the positive infinity. + * @see Double#POSITIVE_INFINITY + */ + public static final BigFloat POSITIVE_INFINITY = new SpecialBigFloat(SpecialBigFloat.Type.POSITIVE_INFINITY); + + /** + * Represents the positive infinity. + * @see Double#NEGATIVE_INFINITY + */ + public static final BigFloat NEGATIVE_INFINITY = new SpecialBigFloat(SpecialBigFloat.Type.NEGATIVE_INFINITY); + + private final BigDecimal value; + private final Context context; + + private BigFloat(BigDecimal value, Context context) { + this.value = value; + this.context = context; + } + + /** + * Creates a {@link Context} with the specified precision and {@link RoundingMode#HALF_UP} rounding. + * + * @param precision the precision + * + * @return the {@link Context} + */ + public static Context context(int precision) { + return new Context(new MathContext(precision)); + } + + /** + * Creates a {@link Context} with the specified {@link MathContext}. + * + * @param mathContext the {@link MathContext} + * + * @return the {@link Context} + */ + public static Context context(MathContext mathContext) { + return new Context(mathContext); + } + + /** + * Returns the {@link BigFloat} that is this + x. + * + *

If the two values do not have the same {@link Context}, the result will contain the {@link Context} with the larger precision.

+ * + * @param x the value to add + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimal#add(BigDecimal, MathContext) + */ + public BigFloat add(BigFloat x) { + if (x.isSpecial()) + return x.add(this); + Context c = max(context, x.context); + return c.valueOf(value.add(x.value, c.mathContext)); + } + + /** + * Returns the {@link BigFloat} that is this + x. + * + * @param x the value to add + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimal#add(BigDecimal, MathContext) + */ + public BigFloat add(BigDecimal x) { + return add(context.valueOf(x)); + } + + /** + * Returns the {@link BigFloat} that is this + x. + * + * @param x the value to add + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimal#add(BigDecimal, MathContext) + */ + public BigFloat add(int x) { + return add(context.valueOf(x)); + } + + /** + * Returns the {@link BigFloat} that is this + x. + * + * @param x the value to add + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimal#add(BigDecimal, MathContext) + */ + public BigFloat add(long x) { + return add(context.valueOf(x)); + } + + /** + * Returns the {@link BigFloat} that is this + x. + * + * @param x the value to add + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimal#add(BigDecimal, MathContext) + */ + public BigFloat add(double x) { + return add(context.valueOf(x)); + } + + /** + * Returns the {@link BigFloat} that is this - x. + * + *

If the two values do not have the same {@link Context}, the result will contain the {@link Context} with the larger precision.

+ * + * @param x the value to subtract + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimal#subtract(BigDecimal, MathContext) + */ + public BigFloat subtract(BigFloat x) { + if (x.isSpecial()) + return negate(x).add(this); + Context c = max(context, x.context); + return c.valueOf(value.subtract(x.value, c.mathContext)); + } + + /** + * Returns the {@link BigFloat} that is this - x. + * + * @param x the value to subtract + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimal#subtract(BigDecimal, MathContext) + */ + public BigFloat subtract(BigDecimal x) { + return subtract(context.valueOf(x)); + } + + /** + * Returns the {@link BigFloat} that is this - x. + * + * @param x the value to subtract + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimal#subtract(BigDecimal, MathContext) + */ + public BigFloat subtract(int x) { + return subtract(context.valueOf(x)); + } + + /** + * Returns the {@link BigFloat} that is this - x. + * + * @param x the value to subtract + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimal#subtract(BigDecimal, MathContext) + */ + public BigFloat subtract(long x) { + return subtract(context.valueOf(x)); + } + + /** + * Returns the {@link BigFloat} that is this - x. + * + * @param x the value to subtract + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimal#subtract(BigDecimal, MathContext) + */ + public BigFloat subtract(double x) { + return subtract(context.valueOf(x)); + } + + /** + * Returns the {@link BigFloat} that is this * x. + * + *

If the two values do not have the same {@link Context}, the result will contain the {@link Context} with the larger precision.

+ * + * @param x the value to multiply + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimal#multiply(BigDecimal, MathContext) + */ + public BigFloat multiply(BigFloat x) { + if (x.isSpecial()) + return x.multiply(this); + Context c = max(context, x.context); + return c.valueOf(value.multiply(x.value, c.mathContext)); + } + + /** + * Returns the {@link BigFloat} that is this * x. + * + * @param x the value to multiply + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimal#multiply(BigDecimal, MathContext) + */ + public BigFloat multiply(BigDecimal x) { + return multiply(context.valueOf(x)); + } + + /** + * Returns the {@link BigFloat} that is this * x. + * + * @param x the value to multiply + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimal#multiply(BigDecimal, MathContext) + */ + public BigFloat multiply(int x) { + return multiply(context.valueOf(x)); + } + + /** + * Returns the {@link BigFloat} that is this * x. + * + * @param x the value to multiply + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimal#multiply(BigDecimal, MathContext) + */ + public BigFloat multiply(long x) { + return multiply(context.valueOf(x)); + } + + /** + * Returns the {@link BigFloat} that is this * x. + * + * @param x the value to multiply + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimal#multiply(BigDecimal, MathContext) + */ + public BigFloat multiply(double x) { + return multiply(context.valueOf(x)); + } + + /** + * Returns the {@link BigFloat} that is this / x. + * + *

If the two values do not have the same {@link Context}, + * the result will contain the {@link Context} with the larger precision.

+ * + * @param x the value to divide with + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimal#divide(BigDecimal, MathContext) + */ + public BigFloat divide(BigFloat x) { + if (x.isSpecial()) { + if (x == NaN) { + return NaN; + } else { + return context.valueOf(0); + } + } + if (this.isZero() && !x.isZero()) { + return context.valueOf(0); + } + if (x.isZero()) { + if (this.isZero()) { + return NaN; // 0 or -0 / 0 = NaN + } else if (this.isNegative()) { + return NEGATIVE_INFINITY;// -N / 0 = -INF + } else { + return POSITIVE_INFINITY;// N / 0 = +INF + } + } + + Context c = max(context, x.context); + return c.valueOf(value.divide(x.value, c.mathContext)); + } + + /** + * Returns the {@link BigFloat} that is this / x. + * + * @param x the value to divide with + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimal#divide(BigDecimal, MathContext) + */ + public BigFloat divide(BigDecimal x) { + return divide(context.valueOf(x)); + } + + /** + * Returns the {@link BigFloat} that is this / x. + * + * @param x the value to divide with + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimal#divide(BigDecimal, MathContext) + */ + public BigFloat divide(int x) { + return divide(context.valueOf(x)); + } + + /** + * Returns the {@link BigFloat} that is this / x. + * + * @param x the value to divide with + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimal#divide(BigDecimal, MathContext) + */ + public BigFloat divide(long x) { + return divide(context.valueOf(x)); + } + + /** + * Returns the {@link BigFloat} that is this / x. + * + * @param x the value to divide with + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimal#divide(BigDecimal, MathContext) + */ + public BigFloat divide(double x) { + return divide(context.valueOf(x)); + } + + /** + * Returns the {@link BigFloat} that is the remainder when dividing this by x. + * + *

If the two values do not have the same {@link Context}, the result will contain the {@link Context} with the larger precision.

+ * + * @param x the value to divide with + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimal#remainder(BigDecimal, MathContext) + */ + public BigFloat remainder(BigFloat x) { + if (x.isSpecial()) { + if (x == NaN) { + return NaN; + } else { + return this; + } + } + if (this.isZero() && !x.isZero()) { + return context.valueOf(0); + } + if (x.isZero()) { + return NaN; + } + + Context c = max(context, x.context); + return c.valueOf(value.remainder(x.value, c.mathContext)); + } + + /** + * Returns the {@link BigFloat} that is the remainder when dividing this by x. + * + * @param x the value to divide with + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimal#remainder(BigDecimal, MathContext) + */ + public BigFloat remainder(BigDecimal x) { + return remainder(context.valueOf(x)); + } + + /** + * Returns the {@link BigFloat} that is the remainder when dividing this by x. + * + * @param x the value to divide with + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimal#remainder(BigDecimal, MathContext) + */ + public BigFloat remainder(int x) { + return remainder(context.valueOf(x)); + } + + /** + * Returns the {@link BigFloat} that is the remainder when dividing this by x. + * + * @param x the value to divide with + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimal#remainder(BigDecimal, MathContext) + */ + public BigFloat remainder(long x) { + return remainder(context.valueOf(x)); + } + + /** + * Returns the {@link BigFloat} that is the remainder when dividing this by x. + * + * @param x the value to divide with + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimal#remainder(BigDecimal, MathContext) + */ + public BigFloat remainder(double x) { + return remainder(context.valueOf(x)); + } + + /** + * Returns the {@link BigFloat} that is this to the power of y. + * + *

If the two values do not have the same {@link Context}, the result will contain the {@link Context} with the larger precision.

+ * + * @param y the value of the power + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimalMath#pow(BigDecimal, BigDecimal, MathContext) + */ + public BigFloat pow(BigFloat y) { + if (y.isSpecial()) { + if (this.isZero()) { + if (y == POSITIVE_INFINITY) { + return this; + } + if (y == NEGATIVE_INFINITY) { + return POSITIVE_INFINITY; + } + } + if (y == NEGATIVE_INFINITY) { + return context.ZERO; + } + return y; + } + if (this.isZero()) { + if (y.isNegative()) { + return POSITIVE_INFINITY; + } + } + + Context c = max(context, y.context); + return c.valueOf(BigDecimalMath.pow(this.value, y.value, c.mathContext)); + } + + /** + * Returns the {@link BigFloat} that is this to the power of y. + * + * @param y the value of the power + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimalMath#pow(BigDecimal, BigDecimal, MathContext) + */ + public BigFloat pow(BigDecimal y) { + return pow(context.valueOf(y)); + } + + /** + * Returns the {@link BigFloat} that is this to the power of y. + * + * @param y the value of the power + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimalMath#pow(BigDecimal, BigDecimal, MathContext) + */ + public BigFloat pow(int y) { + return pow(context.valueOf(y)); + } + + /** + * Returns the {@link BigFloat} that is this to the power of y. + * + * @param y the value of the power + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimalMath#pow(BigDecimal, BigDecimal, MathContext) + */ + public BigFloat pow(long y) { + return pow(context.valueOf(y)); + } + + /** + * Returns the {@link BigFloat} that is this to the power of y. + * + * @param y the value of the power + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimalMath#pow(BigDecimal, BigDecimal, MathContext) + */ + public BigFloat pow(double y) { + return pow(context.valueOf(y)); + } + + /** + * Returns the {@link BigFloat} that is the yth root of this. + * + *

If the two values do not have the same {@link Context}, the result will contain the {@link Context} with the larger precision.

+ * + * @param y the value of the root + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimalMath#root(BigDecimal, BigDecimal, MathContext) + */ + public BigFloat root(BigFloat y) { + if (y.isSpecial()) + return y; + Context c = max(context, y.context); + return c.valueOf(BigDecimalMath.root(this.value, y.value, c.mathContext)); + } + + /** + * Returns the {@link BigFloat} that is the yth root of this. + * + * @param y the value of the root + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimalMath#root(BigDecimal, BigDecimal, MathContext) + */ + public BigFloat root(BigDecimal y) { + return root(context.valueOf(y)); + } + + /** + * Returns the {@link BigFloat} that is the yth root of this. + * + * @param y the value of the root + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimalMath#root(BigDecimal, BigDecimal, MathContext) + */ + public BigFloat root(int y) { + return root(context.valueOf(y)); + } + + /** + * Returns the {@link BigFloat} that is the yth root of this. + * + * @param y the value of the root + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimalMath#root(BigDecimal, BigDecimal, MathContext) + */ + public BigFloat root(long y) { + return root(context.valueOf(y)); + } + + /** + * Returns the {@link BigFloat} that is the yth root of this. + * + * @param y the value of the root + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimalMath#root(BigDecimal, BigDecimal, MathContext) + */ + public BigFloat root(double y) { + return root(context.valueOf(y)); + } + + @Override + public int hashCode() { + return value.stripTrailingZeros().hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + BigFloat other = (BigFloat) obj; + + return value.compareTo(other.value) == 0; + //return Objects.equals(value, other.value) && Objects.equals(context, other.context); + } + + /** + * Returns the signum function of this {@link BigFloat}. + * + * @return -1, 0, or 1 as the value of this {@link BigDecimal} is negative, zero, or positive. + */ + public int signum() { + return value.signum(); + } + + /** + * Returns whether this {@link BigFloat} is negative. + * + * @return true if negative, false if 0 or positive + */ + public boolean isNegative() { + return value.signum() < 0; + } + + /** + * Returns whether this {@link BigFloat} is 0. + * + * @return true if 0, false if negative or positive + */ + public boolean isZero() { + return value.signum() == 0; + } + + /** + * Returns whether this {@link BigFloat} is positive. + * + * @return true if positive, false if 0 or negative + */ + public boolean isPositive() { + return value.signum() > 0; + } + + @Override + public int compareTo(BigFloat other) { + if (other.isSpecial()) { + return -other.compareTo(this); + } + return value.compareTo(other.value); + } + + /** + * Returns whether this value is mathematically equal to the other value. + * + * @param other the other {@link BigFloat} to compare with + * + * @return true if both values are mathematically equal (equivalent to this.compareTo(other) == 0 + * + * @see #compareTo(BigFloat) + */ + public boolean isEqual(BigFloat other) { + if (this == NaN || other == NaN) { + return false; + } + + return compareTo(other) == 0; + } + + /** + * Returns whether this value is mathematically less than to the other value. + * + * @param other the other {@link BigFloat} to compare with + * + * @return true this value is mathematically less than to the other value (equivalent to this.compareTo(other) < 0 + * + * @see #compareTo(BigFloat) + */ + public boolean isLessThan(BigFloat other) { + if (this == NaN || other == NaN) { + return false; + } + + return compareTo(other) < 0; + } + + /** + * Returns whether this value is mathematically greater than to the other value. + * + * @param other the other {@link BigFloat} to compare with + * + * @return true this value is mathematically greater than to the other value (equivalent to this.compareTo(other) > 0 + * + * @see #compareTo(BigFloat) + */ + public boolean isGreaterThan(BigFloat other) { + if (this == NaN || other == NaN) { + return false; + } + + return compareTo(other) > 0; + } + + /** + * Returns whether this value is mathematically less than or equal to the other value. + * + * @param other the other {@link BigFloat} to compare with + * + * @return true this value is mathematically less than or equal to the other value (equivalent to this.compareTo(other) <= 0 + * + * @see #compareTo(BigFloat) + * @see #isLessThan(BigFloat) + * @see #isEqual(BigFloat) + */ + public boolean isLessThanOrEqual(BigFloat other) { + if (this == NaN || other == NaN) { + return false; + } + + return compareTo(other) <= 0; + } + + /** + * Returns whether this value is mathematically greater than or equal to the other value. + * + * @param other the other {@link BigFloat} to compare with + * + * @return true this value is mathematically greater than or equal to the other value (equivalent to this.compareTo(other) >= 0 + * + * @see #compareTo(BigFloat) + * @see #isGreaterThan(BigFloat) + * @see #isEqual(BigFloat) + */ + public boolean isGreaterThanOrEqual(BigFloat other) { + if (this == NaN || other == NaN) { + return false; + } + + return compareTo(other) >= 0; + } + + /** + * Returns whether this value can be represented as int. + * + * @return true if the value can be represented as int value + * + * @see BigDecimalMath#isIntValue(BigDecimal) + */ + public boolean isIntValue() { + return BigDecimalMath.isIntValue(value); + } + + /** + * Returns whether this specified {@link BigDecimal} value can be represented as double. + * + * @return true if the value can be represented as double value + * + * @see BigDecimalMath#isDoubleValue(BigDecimal) + */ + public boolean isDoubleValue() { + return BigDecimalMath.isDoubleValue(value); + } + + /** + * Returns the mantissa of this value written as mantissa * 10exponent. + * + *

The mantissa is defined as having exactly 1 digit before the decimal point.

+ * + * @return the mantissa + * + * @see #getExponent() + * @see BigDecimalMath#mantissa(BigDecimal) + */ + public BigFloat getMantissa() { + return context.valueOf(BigDecimalMath.mantissa(value)); + } + + /** + * Returns the exponent of this value written as mantissa * 10exponent. + * + *

The mantissa is defined as having exactly 1 digit before the decimal point.

+ * + * @return the exponent + * + * @see #getMantissa() + * @see BigDecimalMath#exponent(BigDecimal) + */ + public BigFloat getExponent() { + return context.valueOf(BigDecimalMath.exponent(value)); + } + + /** + * Returns the integral part of this value (left of the decimal point). + * + * @return the integral part + * + * @see #getFractionalPart() + * @see BigDecimalMath#fractionalPart(BigDecimal) + */ + public BigFloat getIntegralPart() { + return context.valueOf(BigDecimalMath.integralPart(value)); + } + + /** + * Returns the fractional part of this value (right of the decimal point). + * + * @return the fractional part + * + * @see #getIntegralPart() + * @see BigDecimalMath#fractionalPart(BigDecimal) + */ + public BigFloat getFractionalPart() { + return context.valueOf(BigDecimalMath.fractionalPart(value)); + } + + /** + * Returns the {@link Context} of this value. + * + * @return the {@link Context} + */ + public Context getContext() { + return context; + } + + /** + * Returns this value as a {@link BigDecimal} value. + * + * @return the {@link BigDecimal} value + */ + public BigDecimal toBigDecimal() { + return value; + } + + /** + * Returns this value as a double value. + * + * @return the double value + * + * @see BigDecimal#doubleValue() + */ + public double toDouble() { + return value.doubleValue(); + } + + /** + * Returns this value as a long value. + * + * @return the long value + * + * @see BigDecimal#longValue() + */ + public long toLong() { + return value.longValue(); + } + + /** + * Returns this value as a int value. + * + * @return the int value + * + * @see BigDecimal#intValue() + */ + public int toInt() { + return value.intValue(); + } + + @Override + public String toString() { + return value.toString(); + } + + protected boolean isSpecial() { + return false; + } + + /** + * return special type of a value + * @return {@link SpecialBigFloat.Type} + */ + protected SpecialBigFloat.Type type() { + return SpecialBigFloat.Type.NORMAL; + } + + public boolean isNaN() { + return this == NaN; + } + + public boolean isInfinity() { + return this == POSITIVE_INFINITY || this == NEGATIVE_INFINITY; + } + + /** + * this class handle unrepresentable value in floating-point arithmetic + * + * @author Wireless4024 + */ + private static final class SpecialBigFloat extends BigFloat { + + private static final Context DUMMY_CONTEXT = BigFloat.context(MathContext.DECIMAL32); + + private final Type type; + + private SpecialBigFloat(Type type) { + super(null, DUMMY_CONTEXT); + this.type = type; + } + + @Override + protected boolean isSpecial() { + return true; + } + + @Override + protected Type type() { + return type; + } + + @Override + public BigFloat add(BigFloat x) { + if (!x.isSpecial()) { + return this; + } + if (this == POSITIVE_INFINITY && x == POSITIVE_INFINITY) { + return POSITIVE_INFINITY; + } + if (this == NEGATIVE_INFINITY && x == NEGATIVE_INFINITY) { + return NEGATIVE_INFINITY; + } + return NaN; + } + + @Override + public BigFloat subtract(BigFloat x) { + if (!x.isSpecial()) { + return this; + } + if (this == POSITIVE_INFINITY && x == NEGATIVE_INFINITY) { + return POSITIVE_INFINITY; + } + if (this == NEGATIVE_INFINITY && x == POSITIVE_INFINITY) { + return NEGATIVE_INFINITY; + } + return NaN; + } + + @Override + public BigFloat subtract(BigDecimal x) { + return this; + } + + @Override + public BigFloat multiply(BigFloat x) { + if (x.isZero() || x == NaN) { + return NaN; + } else if (x.isNegative()) { + return negate(this); + } else { + return this; + } + } + + @Override + public BigFloat divide(BigFloat x) { + if (x == NaN || (this.isInfinity() && x.isInfinity())) { + return NaN; + } else if (x.isNegative()) { + return negate(this); + } else { + return this; + } + } + + @Override + public BigFloat remainder(BigFloat x) { + return NaN; + } + + @Override + public BigFloat pow(BigFloat y) { + if (y.isZero()) { + return y.context.ONE; + } + if (y == NaN) { + return NaN; + } + if (this.isInfinity() && y.isNegative()) { + return y.context.ZERO; + } + if (this == NEGATIVE_INFINITY && y.isPositive()) { + return POSITIVE_INFINITY; + } + return this; + } + + @Override + public BigFloat root(BigFloat y) { + return this; + } + + @Override + public int hashCode() { + return type.hashCode; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + return obj instanceof BigFloat && ((BigFloat) obj).isSpecial() && ((BigFloat) obj).type() == this.type; + } + + @Override + public int signum() { + return type == Type.POSITIVE_INFINITY ? 1 : -1; + } + + @Override + public boolean isNegative() { + return signum() < 0; + } + + @Override + public boolean isZero() { + return false;//nan or infinity is not a zero + } + + @Override + public boolean isPositive() { + return signum() > 0; + } + + @Override + public int compareTo(BigFloat other) { + return Type.compare(type, other.type()); + } + + @Override + public boolean isIntValue() { + return false; + } + + @Override + public boolean isDoubleValue() { + return false; + } + + @Override + public BigFloat getMantissa() { + return this; + } + + @Override + public BigFloat getExponent() { + return this; + } + + @Override + public BigFloat getIntegralPart() { + return this; + } + + @Override + public BigFloat getFractionalPart() { + return this; + } + + @Override + public Context getContext() { + throw new UnsupportedOperationException(type + " has no context"); + } + + @Override + public BigDecimal toBigDecimal() { + throw new UnsupportedOperationException(type + " has no corresponding BigDecimal representation"); + } + + @Override + public double toDouble() { + return type.toDouble(); + } + + @Override + public long toLong() { + return (long) toDouble(); + } + + @Override + public int toInt() { + return (int) toDouble(); + } + + @Override + public String toString() { + return type.toString(); + } + + //optional static + enum Type { + NaN(Objects.hashCode(Double.NaN)), + POSITIVE_INFINITY(Objects.hashCode(Double.POSITIVE_INFINITY)), + NORMAL(Objects.hashCode(0)), + NEGATIVE_INFINITY(Objects.hashCode(Double.NEGATIVE_INFINITY)); + + final int hashCode; + + Type(int hashCode){ + this.hashCode=hashCode; + } + + public static int compare(Type a, Type b) { + //we can use double to compare + //if (a == NaN && b == NaN) + // return 0;//cuz NaN equals nothing even itself + return Double.compare(a.toDouble(),b.toDouble()); + } + + /** + * convert type to double + * @return double value that equivalent to {@link Type} + */ + public double toDouble() { + switch (this) { + case POSITIVE_INFINITY: + return Double.POSITIVE_INFINITY; + case NEGATIVE_INFINITY: + return Double.NEGATIVE_INFINITY; + case NaN: + return Double.NaN; + default: + return 0; + } + } + } + } + + /** + * Manages the {@link MathContext} and provides factory methods for {@link BigFloat} values. + */ + public static class Context implements Serializable{ + private static final long serialVersionUID = -5787473786808803161L; + public final BigFloat NEGATIVE_ONE; + public final BigFloat ZERO; + public final BigFloat ONE; + + private final MathContext mathContext; + + private Context(MathContext mathContext) { + this.mathContext = mathContext; + NEGATIVE_ONE = this.valueOf(-1); + ZERO = this.valueOf(0); + ONE = this.valueOf(1); + } + + /** + * Returns the {@link MathContext} of this context. + * + * @return the {@link MathContext} + */ + public MathContext getMathContext() { + return mathContext; + } + + /** + * Returns the precision of this context. + *

+ * This is equivalent to calling getMathContext().getPrecision(). + * + * @return the precision + */ + public int getPrecision() { + return mathContext.getPrecision(); + } + + /** + * Returns the {@link RoundingMode} of this context. + *

+ * This is equivalent to calling getMathContext().getRoundingMode(). + * + * @return the {@link RoundingMode} + */ + public RoundingMode getRoundingMode() { + return mathContext.getRoundingMode(); + } + + /** + * Creates a {@link BigFloat} value with this context. + * + * @param value the source {@link BigFloat} value + * + * @return the {@link BigFloat} value with this context (rounded to the precision of this context) + */ + public BigFloat valueOf(BigFloat value) { + return value.isSpecial() ? value : new BigFloat(value.value.round(mathContext), this);//they are final + } + + /** + * Creates a {@link BigFloat} value with this context. + * + * @param value the source {@link BigDecimal} value + * + * @return the {@link BigFloat} value with this context (rounded to the precision of this context) + */ + public BigFloat valueOf(BigDecimal value) { + return new BigFloat(value.round(mathContext), this); + } + + /** + * Creates a {@link BigFloat} value with this context. + * + * @param value the source int value + * + * @return the {@link BigFloat} value with this context (rounded to the precision of this context) + */ + public BigFloat valueOf(int value) { + return new BigFloat(new BigDecimal(value, mathContext), this); + } + + /** + * parse unsigned value with this logic

value & 4294967295
+ * @param value an int value + * @param unsigned if true value will parse as unsigned integer + * @return the {@link BigFloat} value with this context (rounded to the precision of this context) + */ + public BigFloat valueOf(int value, boolean unsigned) { + if (!unsigned) { + return new BigFloat(new BigDecimal(value, mathContext), this); + } else { + if (value > -1) + return valueOf(value, false); + return new BigFloat(new BigDecimal(Integer.MAX_VALUE) + .add(new BigDecimal(value & Integer.MAX_VALUE)) + .add(BigDecimal.ONE), this); + } + } + + /** + * Creates a {@link BigFloat} value with this context. + * + * @param value the source long value + * + * @return the {@link BigFloat} value with this context (rounded to the precision of this context) + */ + public BigFloat valueOf(long value) { + return new BigFloat(new BigDecimal(value, mathContext), this); + } + + /** + * parse unsigned value with this logic
value & 18446744073709551615
+ * @param value an int value + * @param unsigned if true value will parse as unsigned integer + * @return the {@link BigFloat} value with this context (rounded to the precision of this context) + */ + public BigFloat valueOf(long value, boolean unsigned) { + if (!unsigned) { + return new BigFloat(new BigDecimal(value, mathContext), this); + } else { + if (value > -1) + return valueOf(value, false); + return new BigFloat(new BigDecimal(Long.MAX_VALUE) + .add(new BigDecimal(value & Long.MAX_VALUE)) + .add(BigDecimal.ONE), this); + } + } + + /** + * Creates a {@link BigFloat} value with this context. + * + * @param value the source double value + * + * @return the {@link BigFloat} value with this context (rounded to the precision of this context) + */ + public BigFloat valueOf(double value) { + if (Double.isInfinite(value)) + return value == Double.POSITIVE_INFINITY ? POSITIVE_INFINITY : NEGATIVE_INFINITY; + else if (Double.isNaN(value)) + return NaN; + return new BigFloat(new BigDecimal(String.valueOf(value), mathContext), this); + } + + /** + * Creates a {@link BigFloat} value with this context. + * + * @param value the source String value + * + * @return the {@link BigFloat} value with this context (rounded to the precision of this context) + * + * @throws NumberFormatException if the value is not a valid number. + */ + public BigFloat valueOf(String value) { + return new BigFloat(new BigDecimal(value, mathContext), this); + } + + /** + * Returns the constant pi with this context. + * + * @return pi with this context (rounded to the precision of this context) + * + * @see BigDecimalMath#pi(MathContext) + */ + public BigFloat pi() { + return valueOf(BigDecimalMath.pi(mathContext)); + } + + /** + * Returns the constant e with this context. + * + * @return e with this context (rounded to the precision of this context) + * + * @see BigDecimalMath#e(MathContext) + */ + public BigFloat e() { + return valueOf(BigDecimalMath.e(mathContext)); + } + + /** + * Returns the factorial of n with this context. + * + * @param n the value to calculate + * + * @return the factorial of n with this context (rounded to the precision of this context) + * + * @see BigDecimalMath#factorial(int) + */ + public BigFloat factorial(int n) { + return valueOf(BigDecimalMath.factorial(n)); + } + + @Override + public int hashCode() { + return mathContext.hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Context other = (Context) obj; + return mathContext.equals(other.mathContext); + } + + @Override + public String toString() { + return mathContext.toString(); + } + } + /** + * Returns the {@link BigFloat} that is - this. + * + * @param x the value to negate + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimal#negate(MathContext) + */ + public static BigFloat negate(BigFloat x) { + if (x.isSpecial()) + if (x.isInfinity()) + return x == POSITIVE_INFINITY ? NEGATIVE_INFINITY : POSITIVE_INFINITY; + else + return NaN; + return x.context.valueOf(x.value.negate()); + } + + /** + * Returns the {@link BigFloat} that is the abs(this) (absolute value). + * + * @param x the value to make absolute + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimal#abs(MathContext) + */ + public static BigFloat abs(BigFloat x) { + if (x.isSpecial()) + return x.isInfinity() ? POSITIVE_INFINITY : NaN; + return x.context.valueOf(x.value.abs()); + } + + /** + * Returns the the maximum of two {@link BigFloat} values. + * + * @param value1 the first {@link BigFloat} value to compare + * @param value2 the second {@link BigFloat} value to compare + * + * @return the maximum {@link BigFloat} value + */ + public static BigFloat max(BigFloat value1, BigFloat value2) { + return value1.compareTo(value2) >= 0 ? value1 : value2; + } + + /** + * Returns the the maximum of n {@link BigFloat} values. + * + * @param value1 the first {@link BigFloat} value to compare + * @param values the other {@link BigFloat}s value to compare + * + * @return the maximum {@link BigFloat} value + */ + public static BigFloat max(BigFloat value1, BigFloat... values) { + BigFloat result = value1; + + for (BigFloat other : values) { + result = max(result, other); + } + + return result; + } + + /** + * Returns the the minimum of two {@link BigFloat} values. + * + * @param value1 the first {@link BigFloat} value to compare + * @param value2 the second {@link BigFloat} value to compare + * + * @return the minimum {@link BigFloat} value + */ + public static BigFloat min(BigFloat value1, BigFloat value2) { + return value1.compareTo(value2) < 0 ? value1 : value2; + } + + /** + * Returns the the minimum of n {@link BigFloat} values. + * + * @param value1 the first {@link BigFloat} value to compare + * @param values the other {@link BigFloat}s value to compare + * + * @return the minimum {@link BigFloat} value + */ + public static BigFloat min(BigFloat value1, BigFloat... values) { + BigFloat result = value1; + + for (BigFloat other : values) { + result = min(result, other); + } + + return result; + } + + private static BigFloat logSpecial(BigFloat val){ + if (val.isNaN() || val.isNegative()) + return NaN; + if (val == POSITIVE_INFINITY) + return POSITIVE_INFINITY; + if (val.isZero()) + return NEGATIVE_INFINITY; + return null; + } + + /** + * Returns the {@link BigFloat} that is log(x). + * + * @param x the value + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimalMath#log(BigDecimal, MathContext) + */ + public static BigFloat log(BigFloat x) { + BigFloat temp = logSpecial(x); + return temp != null ? temp : x.context.valueOf(BigDecimalMath.log(x.value, x.context.mathContext)); + } + + /** + * Returns the {@link BigFloat} that is log2(x). + * + * @param x the value + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimalMath#log2(BigDecimal, MathContext) + */ + public static BigFloat log2(BigFloat x) { + BigFloat temp = logSpecial(x); + return temp != null ? temp : x.context.valueOf(BigDecimalMath.log2(x.value, x.context.mathContext)); + } + + /** + * Returns the {@link BigFloat} that is log10(x). + * + * @param x the value + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimalMath#log10(BigDecimal, MathContext) + */ + public static BigFloat log10(BigFloat x) { + BigFloat temp = logSpecial(x); + return temp != null ? temp : x.context.valueOf(BigDecimalMath.log10(x.value, x.context.mathContext)); + } + + /** + * Returns the {@link BigFloat} that is exp(x). + * + * @param x the value + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimalMath#exp(BigDecimal, MathContext) + */ + public static BigFloat exp(BigFloat x) { + if(x.isSpecial()) + return x != NEGATIVE_INFINITY ? x : x.context.ZERO; + return x.context.valueOf(BigDecimalMath.exp(x.value, x.context.mathContext)); + } + + /** + * Returns the {@link BigFloat} that is sqrt(x). + * + * @param x the value + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimalMath#sqrt(BigDecimal, MathContext) + */ + public static BigFloat sqrt(BigFloat x) { + if (x.isNaN() || x.isNegative()) + return NaN; + if (x.isZero() || x.isInfinity()) + return x; + return x.context.valueOf(BigDecimalMath.sqrt(x.value, x.context.mathContext)); + } + + /** + * Returns the {@link BigFloat} that is pow(x, y). + * + *

If the two values do not have the same {@link Context}, the result will contain the {@link Context} with the larger precision.

+ * + * @param x the {@link BigFloat} value to take to the power + * @param y the {@link BigFloat} value to serve as exponent + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimalMath#pow(BigDecimal, BigDecimal, MathContext) + */ + public static BigFloat pow(BigFloat x, BigFloat y) { + Context c = max(x.context, y.context); + return c.valueOf(BigDecimalMath.pow(x.value, y.value, c.mathContext)); + } + + /** + * Returns the {@link BigFloat} that is root(x, y). + * + *

If the two values do not have the same {@link Context}, the result will contain the {@link Context} with the larger precision.

+ * + * @param x the {@link BigFloat} value to calculate the n'th root + * @param y the {@link BigFloat} defining the root + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimalMath#pow(BigDecimal, BigDecimal, MathContext) + */ + public static BigFloat root(BigFloat x, BigFloat y) { + Context c = max(x.context, y.context); + return c.valueOf(BigDecimalMath.root(x.value, y.value, c.mathContext)); + } + + /** + * Returns the {@link BigFloat} that is sin(x). + * + * @param x the value + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimalMath#sin(BigDecimal, MathContext) + */ + public static BigFloat sin(BigFloat x) { + if(x.isSpecial()) + return NaN; + if(x.isZero()) + return x; + return x.context.valueOf(BigDecimalMath.sin(x.value, x.context.mathContext)); + } + + /** + * Returns the {@link BigFloat} that is cos(x). + * + * @param x the value + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimalMath#cos(BigDecimal, MathContext) + */ + public static BigFloat cos(BigFloat x) { + if(x.isSpecial()) + return NaN; + return x.context.valueOf(BigDecimalMath.cos(x.value, x.context.mathContext)); + } + + /** + * Returns the {@link BigFloat} that is tan(x). + * + * @param x the value + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimalMath#tan(BigDecimal, MathContext) + */ + public static BigFloat tan(BigFloat x) { + if(x.isSpecial()) + return NaN; + if(x.isZero()) + return x; + return x.context.valueOf(BigDecimalMath.tan(x.value, x.context.mathContext)); + } + + /** + * Returns the {@link BigFloat} that is cot(x). + * + * @param x the value + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimalMath#cot(BigDecimal, MathContext) + */ + public static BigFloat cot(BigFloat x) { + if(x.isSpecial()) + return x; + if(x.isZero()) + return POSITIVE_INFINITY; + return x.context.valueOf(BigDecimalMath.cot(x.value, x.context.mathContext)); + } + + /** + * Returns the {@link BigFloat} that is asin(x). + * + * @param x the value + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimalMath#asin(BigDecimal, MathContext) + */ + public static BigFloat asin(BigFloat x) { + if (x.isZero()) + return x; + return x.isNaN() || (!isRangeAbs1(x)) ? NaN : + x.context.valueOf(BigDecimalMath.asin(x.value, x.context.mathContext)); + } + + /** + * Returns the {@link BigFloat} that is acos(x). + * + * @param x the value + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimalMath#acos(BigDecimal, MathContext) + */ + public static BigFloat acos(BigFloat x) { + return x.isNaN() || (!isRangeAbs1(x)) ? NaN : + x.context.valueOf(BigDecimalMath.acos(x.value, x.context.mathContext)); + } + + /** + * @param x a bigfloat + * @return if abs(x) <= 1 + */ + private static boolean isRangeAbs1(BigFloat x) { + return isBetween(x.context.NEGATIVE_ONE, x.context.ONE, x); + } + + /** + * Returns the {@link BigFloat} that is atan(x). + * + * @param x the value + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimalMath#atan(BigDecimal, MathContext) + */ + public static BigFloat atan(BigFloat x) { + return x.isSpecial() || x.isZero() ? x : x.context.valueOf(BigDecimalMath.atan(x.value, x.context.mathContext)); + } + + /** + * Returns the {@link BigFloat} that is acot(x). + * + * @param x the value + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimalMath#acot(BigDecimal, MathContext) + */ + public static BigFloat acot(BigFloat x) { + return x.isSpecial() ? x : x.context.valueOf(BigDecimalMath.acot(x.value, x.context.mathContext)); + } + + /** + * Returns the {@link BigFloat} that is sinh(x). + * + * @param x the value + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimalMath#sinh(BigDecimal, MathContext) + */ + public static BigFloat sinh(BigFloat x) { + if (x.isSpecial() || x.isZero()) + return x; + return x.context.valueOf(BigDecimalMath.sinh(x.value, x.context.mathContext)); + } + + /** + * Returns the {@link BigFloat} that is cosh(x). + * + * @param x the value + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimalMath#cosh(BigDecimal, MathContext) + */ + public static BigFloat cosh(BigFloat x) { + if (x.isNaN()) + return NaN; + if (x.isInfinity()) + return POSITIVE_INFINITY; + if (x.isZero()) + return x.context.ONE; + return x.context.valueOf(BigDecimalMath.cosh(x.value, x.context.mathContext)); + } + + /** + * Returns the {@link BigFloat} that is tanh(x). + * + * @param x the value + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimalMath#tanh(BigDecimal, MathContext) + */ + public static BigFloat tanh(BigFloat x) { + if (x.isNaN() || x.isZero()) + return x; + if (x.isInfinity()) + return x == POSITIVE_INFINITY ? x.context.ONE : x.context.NEGATIVE_ONE; + return x.context.valueOf(BigDecimalMath.tanh(x.value, x.context.mathContext)); + } + + /** + * Returns the {@link BigFloat} that is coth(x). + * + * @param x the value + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimalMath#coth(BigDecimal, MathContext) + */ + public static BigFloat coth(BigFloat x) { + if(x.isSpecial()) + return x; + return x.context.valueOf(BigDecimalMath.coth(x.value, x.context.mathContext)); + } + + /** + * Returns the {@link BigFloat} that is asinh(x). + * + * @param x the value + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimalMath#asinh(BigDecimal, MathContext) + */ + public static BigFloat asinh(BigFloat x) { + if(x.isSpecial()) + return x; + return x.context.valueOf(BigDecimalMath.asinh(x.value, x.context.mathContext)); + } + + /** + * Returns the {@link BigFloat} that is acosh(x). + * + * @param x the value + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimalMath#acosh(BigDecimal, MathContext) + */ + public static BigFloat acosh(BigFloat x) { + return x.context.valueOf(BigDecimalMath.acosh(x.value, x.context.mathContext)); + } + + /** + * Returns the {@link BigFloat} that is atanh(x). + * + * @param x the value + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimalMath#atanh(BigDecimal, MathContext) + */ + public static BigFloat atanh(BigFloat x) { + if(x.isSpecial()) + return x; + return x.context.valueOf(BigDecimalMath.atanh(x.value, x.context.mathContext)); + } + + /** + * Returns the {@link BigFloat} that is acoth(x). + * + * @param x the value + * + * @return the resulting {@link BigFloat} + * + * @see BigDecimalMath#acoth(BigDecimal, MathContext) + */ + public static BigFloat acoth(BigFloat x) { + if(x.isSpecial()) + return x; + return x.context.valueOf(BigDecimalMath.acoth(x.value, x.context.mathContext)); + } + + public static boolean isBetween(BigFloat min, BigFloat max, BigFloat value) { + return value.compareTo(min) >= 0 && value.compareTo(max) <= 0; + } + + private static Context max(Context left, Context right) { + return left.mathContext.getPrecision() > right.mathContext.getPrecision() ? left : right; + } +} diff --git a/src/main/java/ch/obermuhlner/math/big/BigRational.java b/src/main/java/ch/obermuhlner/math/big/BigRational.java new file mode 100644 index 0000000000..2d7389c7de --- /dev/null +++ b/src/main/java/ch/obermuhlner/math/big/BigRational.java @@ -0,0 +1,1103 @@ +package ch.obermuhlner.math.big; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.MathContext; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.IntStream; + +/** + * A rational number represented as a quotient of two values. + * + *

Basic calculations with rational numbers (+ - * /) have no loss of precision. + * This allows to use {@link BigRational} as a replacement for {@link BigDecimal} if absolute accuracy is desired.

+ * + *

Wikipedia: Rational number

+ * + *

The values are internally stored as {@link BigDecimal} (for performance optimizations) but represented + * as {@link BigInteger} (for mathematical correctness) + * when accessed with {@link #getNumeratorBigInteger()} and {@link #getDenominatorBigInteger()}.

+ * + *

The following basic calculations have no loss of precision:

+ *
    + *
  • {@link #add(BigRational)}
  • + *
  • {@link #subtract(BigRational)}
  • + *
  • {@link #multiply(BigRational)}
  • + *
  • {@link #divide(BigRational)}
  • + *
  • {@link #pow(int)}
  • + *
+ * + *

The following calculations are special cases of the ones listed above and have no loss of precision:

+ *
    + *
  • {@link #negate()}
  • + *
  • {@link #reciprocal()}
  • + *
  • {@link #increment()}
  • + *
  • {@link #decrement()}
  • + *
+ * + *

Any {@link BigRational} value can be converted into an arbitrary {@link #withPrecision(int) precision} (number of significant digits) + * or {@link #withScale(int) scale} (number of digits after the decimal point).

+ */ +public class BigRational implements Comparable { + + /** + * The value 0 as {@link BigRational}. + */ + public static final BigRational ZERO = new BigRational(0); + /** + * The value 1 as {@link BigRational}. + */ + public static final BigRational ONE = new BigRational(1); + /** + * The value 2 as {@link BigRational}. + */ + public static final BigRational TWO = new BigRational(2); + /** + * The value 10 as {@link BigRational}. + */ + public static final BigRational TEN = new BigRational(10); + + private final BigDecimal numerator; + + private final BigDecimal denominator; + + private BigRational(int value) { + this(BigDecimal.valueOf(value), BigDecimal.ONE); + } + + private BigRational(BigDecimal num, BigDecimal denom) { + BigDecimal n = num; + BigDecimal d = denom; + + if (d.signum() == 0) { + throw new ArithmeticException("Divide by zero"); + } + + if (d.signum() < 0) { + n = n.negate(); + d = d.negate(); + } + + numerator = n; + denominator = d; + } + + /** + * Returns the numerator of this rational number as BigInteger. + * + * @return the numerator as BigInteger + */ + public BigInteger getNumeratorBigInteger() { + return numerator.toBigInteger(); + } + + /** + * Returns the numerator of this rational number as BigDecimal. + * + * @return the numerator as BigDecimal + */ + public BigDecimal getNumerator() { + return numerator; + } + + /** + * Returns the denominator of this rational number as BigInteger. + * + *

Guaranteed to not be 0.

+ *

Guaranteed to be positive.

+ * + * @return the denominator as BigInteger + */ + public BigInteger getDenominatorBigInteger() { + return denominator.toBigInteger(); + } + + /** + * Returns the denominator of this rational number as BigDecimal. + * + *

Guaranteed to not be 0.

+ *

Guaranteed to be positive.

+ * + * @return the denominator as BigDecimal + */ + public BigDecimal getDenominator() { + return denominator; + } + + /** + * Reduces this rational number to the smallest numerator/denominator with the same value. + * + * @return the reduced rational number + */ + public BigRational reduce() { + BigInteger n = numerator.toBigInteger(); + BigInteger d = denominator.toBigInteger(); + + BigInteger gcd = n.gcd(d); + n = n.divide(gcd); + d = d.divide(gcd); + + return valueOf(n, d); + } + + /** + * Returns the integer part of this rational number. + * + *

Examples:

+ *
    + *
  • BigRational.valueOf(3.5).integerPart() returns BigRational.valueOf(3)
  • + *
+ * + * @return the integer part of this rational number + */ + public BigRational integerPart() { + return of(numerator.subtract(numerator.remainder(denominator)), denominator); + } + + /** + * Returns the fraction part of this rational number. + * + *

Examples:

+ *
    + *
  • BigRational.valueOf(3.5).integerPart() returns BigRational.valueOf(0.5)
  • + *
+ * + * @return the fraction part of this rational number + */ + public BigRational fractionPart() { + return of(numerator.remainder(denominator), denominator); + } + + /** + * Negates this rational number (inverting the sign). + * + *

The result has no loss of precision.

+ * + *

Examples:

+ *
    + *
  • BigRational.valueOf(3.5).negate() returns BigRational.valueOf(-3.5)
  • + *
+ * + * @return the negated rational number + */ + public BigRational negate() { + if (isZero()) { + return this; + } + + return of(numerator.negate(), denominator); + } + + /** + * Calculates the reciprocal of this rational number (1/x). + * + *

The result has no loss of precision.

+ * + *

Examples:

+ *
    + *
  • BigRational.valueOf(0.5).reciprocal() returns BigRational.valueOf(2)
  • + *
  • BigRational.valueOf(-2).reciprocal() returns BigRational.valueOf(-0.5)
  • + *
+ * + * @return the reciprocal rational number + * @throws ArithmeticException if this number is 0 (division by zero) + */ + public BigRational reciprocal() { + return of(denominator, numerator); + } + + /** + * Returns the absolute value of this rational number. + * + *

The result has no loss of precision.

+ * + *

Examples:

+ *
    + *
  • BigRational.valueOf(-2).abs() returns BigRational.valueOf(2)
  • + *
  • BigRational.valueOf(2).abs() returns BigRational.valueOf(2)
  • + *
+ * + * @return the absolute rational number (positive, or 0 if this rational is 0) + */ + public BigRational abs() { + return isPositive() ? this : negate(); + } + + /** + * Returns the signum function of this rational number. + * + * @return -1, 0 or 1 as the value of this rational number is negative, zero or positive. + */ + public int signum() { + return numerator.signum(); + } + + /** + * Calculates the increment of this rational number (+ 1). + * + *

This is functionally identical to + * this.add(BigRational.ONE) + * but slightly faster.

+ * + *

The result has no loss of precision.

+ * + * @return the incremented rational number + */ + public BigRational increment() { + return of(numerator.add(denominator), denominator); + } + + /** + * Calculates the decrement of this rational number (- 1). + * + *

This is functionally identical to + * this.subtract(BigRational.ONE) + * but slightly faster.

+ * + *

The result has no loss of precision.

+ * + * @return the decremented rational number + */ + public BigRational decrement() { + return of(numerator.subtract(denominator), denominator); + } + + /** + * Calculates the addition (+) of this rational number and the specified argument. + * + *

The result has no loss of precision.

+ * + * @param value the rational number to add + * @return the resulting rational number + */ + public BigRational add(BigRational value) { + if (denominator.equals(value.denominator)) { + return of(numerator.add(value.numerator), denominator); + } + + BigDecimal n = numerator.multiply(value.denominator).add(value.numerator.multiply(denominator)); + BigDecimal d = denominator.multiply(value.denominator); + return of(n, d); + } + + private BigRational add(BigDecimal value) { + return of(numerator.add(value.multiply(denominator)), denominator); + } + + /** + * Calculates the addition (+) of this rational number and the specified argument. + * + *

This is functionally identical to + * this.add(BigRational.valueOf(value)) + * but slightly faster.

+ * + *

The result has no loss of precision.

+ * + * @param value the {@link BigInteger} to add + * @return the resulting rational number + */ + public BigRational add(BigInteger value) { + if (value.equals(BigInteger.ZERO)) { + return this; + } + return add(new BigDecimal(value)); + } + + /** + * Calculates the addition (+) of this rational number and the specified argument. + * + *

This is functionally identical to + * this.add(BigRational.valueOf(value)) + * but slightly faster.

+ * + *

The result has no loss of precision.

+ * + * @param value the int value to add + * @return the resulting rational number + */ + public BigRational add(int value) { + if (value == 0) { + return this; + } + return add(BigInteger.valueOf(value)); + } + + /** + * Calculates the subtraction (-) of this rational number and the specified argument. + * + *

The result has no loss of precision.

+ * + * @param value the rational number to subtract + * @return the resulting rational number + */ + public BigRational subtract(BigRational value) { + if (denominator.equals(value.denominator)) { + return of(numerator.subtract(value.numerator), denominator); + } + + BigDecimal n = numerator.multiply(value.denominator).subtract(value.numerator.multiply(denominator)); + BigDecimal d = denominator.multiply(value.denominator); + return of(n, d); + } + + private BigRational subtract(BigDecimal value) { + return of(numerator.subtract(value.multiply(denominator)), denominator); + } + + /** + * Calculates the subtraction (-) of this rational number and the specified argument. + * + *

This is functionally identical to + * this.subtract(BigRational.valueOf(value)) + * but slightly faster.

+ * + *

The result has no loss of precision.

+ * + * @param value the {@link BigInteger} to subtract + * @return the resulting rational number + */ + public BigRational subtract(BigInteger value) { + if (value.equals(BigInteger.ZERO)) { + return this; + } + return subtract(new BigDecimal(value)); + } + + /** + * Calculates the subtraction (-) of this rational number and the specified argument. + * + *

This is functionally identical to + * this.subtract(BigRational.valueOf(value)) + * but slightly faster.

+ * + *

The result has no loss of precision.

+ * + * @param value the int value to subtract + * @return the resulting rational number + */ + public BigRational subtract(int value) { + if (value == 0) { + return this; + } + return subtract(BigInteger.valueOf(value)); + } + + /** + * Calculates the multiplication (*) of this rational number and the specified argument. + * + *

The result has no loss of precision.

+ * + * @param value the rational number to multiply + * @return the resulting rational number + */ + public BigRational multiply(BigRational value) { + if (isZero() || value.isZero()) { + return ZERO; + } + if (equals(ONE)) { + return value; + } + if (value.equals(ONE)) { + return this; + } + + BigDecimal n = numerator.multiply(value.numerator); + BigDecimal d = denominator.multiply(value.denominator); + return of(n, d); + } + + // private, because we want to hide that we use BigDecimal internally + private BigRational multiply(BigDecimal value) { + BigDecimal n = numerator.multiply(value); + BigDecimal d = denominator; + return of(n, d); + } + + /** + * Calculates the multiplication (*) of this rational number and the specified argument. + * + *

This is functionally identical to + * this.multiply(BigRational.valueOf(value)) + * but slightly faster.

+ * + *

The result has no loss of precision.

+ * + * @param value the {@link BigInteger} to multiply + * @return the resulting rational number + */ + public BigRational multiply(BigInteger value) { + if (isZero() || value.signum() == 0) { + return ZERO; + } + if (equals(ONE)) { + return valueOf(value); + } + if (value.equals(BigInteger.ONE)) { + return this; + } + + return multiply(new BigDecimal(value)); + } + + /** + * Calculates the multiplication (*) of this rational number and the specified argument. + * + *

This is functionally identical to + * this.multiply(BigRational.valueOf(value)) + * but slightly faster.

+ * + *

The result has no loss of precision.

+ * + * @param value the int value to multiply + * @return the resulting rational number + */ + public BigRational multiply(int value) { + return multiply(BigInteger.valueOf(value)); + } + + /** + * Calculates the division (/) of this rational number and the specified argument. + * + *

The result has no loss of precision.

+ * + * @param value the rational number to divide (0 is not allowed) + * @return the resulting rational number + * @throws ArithmeticException if the argument is 0 (division by zero) + */ + public BigRational divide(BigRational value) { + if (value.equals(ONE)) { + return this; + } + + BigDecimal n = numerator.multiply(value.denominator); + BigDecimal d = denominator.multiply(value.numerator); + return of(n, d); + } + + private BigRational divide(BigDecimal value) { + BigDecimal n = numerator; + BigDecimal d = denominator.multiply(value); + return of(n, d); + } + + /** + * Calculates the division (/) of this rational number and the specified argument. + * + *

This is functionally identical to + * this.divide(BigRational.valueOf(value)) + * but slightly faster.

+ * + *

The result has no loss of precision.

+ * + * @param value the {@link BigInteger} to divide (0 is not allowed) + * @return the resulting rational number + * @throws ArithmeticException if the argument is 0 (division by zero) + */ + public BigRational divide(BigInteger value) { + if (value.equals(BigInteger.ONE)) { + return this; + } + + return divide(new BigDecimal(value)); + } + + /** + * Calculates the division (/) of this rational number and the specified argument. + * + *

This is functionally identical to + * this.divide(BigRational.valueOf(value)) + * but slightly faster.

+ * + *

The result has no loss of precision.

+ * + * @param value the int value to divide (0 is not allowed) + * @return the resulting rational number + * @throws ArithmeticException if the argument is 0 (division by zero) + */ + public BigRational divide(int value) { + return divide(BigInteger.valueOf(value)); + } + + /** + * Returns whether this rational number is zero. + * + * @return true if this rational number is zero (0), false if it is not zero + */ + public boolean isZero() { + return numerator.signum() == 0; + } + + private boolean isPositive() { + return numerator.signum() > 0; + } + + /** + * Returns whether this rational number is an integer number without fraction part. + * + * @return true if this rational number is an integer number, false if it has a fraction part + */ + public boolean isInteger() { + return isIntegerInternal() || reduce().isIntegerInternal(); + } + + /** + * Returns whether this rational number is an integer number without fraction part. + * + *

Will return false if this number is not reduced to the integer representation yet (e.g. 4/4 or 4/2)

+ * + * @return true if this rational number is an integer number, false if it has a fraction part + * @see #isInteger() + */ + private boolean isIntegerInternal() { + return denominator.compareTo(BigDecimal.ONE) == 0; + } + + /** + * Calculates this rational number to the power (xy) of the specified argument. + * + *

The result has no loss of precision.

+ * + * @param exponent exponent to which this rational number is to be raised + * @return the resulting rational number + */ + public BigRational pow(int exponent) { + if (exponent == 0) { + return ONE; + } + if (exponent == 1) { + return this; + } + + final BigInteger n; + final BigInteger d; + if (exponent > 0) { + n = numerator.toBigInteger().pow(exponent); + d = denominator.toBigInteger().pow(exponent); + } + else { + n = denominator.toBigInteger().pow(-exponent); + d = numerator.toBigInteger().pow(-exponent); + } + return valueOf(n, d); + } + + /** + * Finds the minimum (smaller) of two rational numbers. + * + * @param value the rational number to compare with + * @return the minimum rational number, either this or the argument value + */ + private BigRational min(BigRational value) { + return compareTo(value) <= 0 ? this : value; + } + + /** + * Finds the maximum (larger) of two rational numbers. + * + * @param value the rational number to compare with + * @return the minimum rational number, either this or the argument value + */ + private BigRational max(BigRational value) { + return compareTo(value) >= 0 ? this : value; + } + + /** + * Returns a rational number with approximatively this value and the specified precision. + * + * @param precision the precision (number of significant digits) of the calculated result, or 0 for unlimited precision + * @return the calculated rational number with the specified precision + */ + public BigRational withPrecision(int precision) { + return valueOf(toBigDecimal(new MathContext(precision))); + } + + /** + * Returns a rational number with approximatively this value and the specified scale. + * + * @param scale the scale (number of digits after the decimal point) of the calculated result + * @return the calculated rational number with the specified scale + */ + public BigRational withScale(int scale) { + return valueOf(toBigDecimal().setScale(scale, RoundingMode.HALF_UP)); + } + + private static int countDigits(BigInteger number) { + double factor = Math.log(2) / Math.log(10); + int digitCount = (int) (factor * number.bitLength() + 1); + if (BigInteger.TEN.pow(digitCount - 1).compareTo(number) > 0) { + return digitCount - 1; + } + return digitCount; + } + + // TODO what is precision of a rational? + private int precision() { + return countDigits(numerator.toBigInteger()) + countDigits(denominator.toBigInteger()); + } + + /** + * Returns this rational number as a double value. + * + * @return the double value + */ + public double toDouble() { + // TODO best accuracy or maybe bigDecimalValue().doubleValue() is better? + return numerator.doubleValue() / denominator.doubleValue(); + } + + /** + * Returns this rational number as a float value. + * + * @return the float value + */ + public float toFloat() { + return numerator.floatValue() / denominator.floatValue(); + } + + /** + * Returns this rational number as a {@link BigDecimal}. + * + * @return the {@link BigDecimal} value + */ + public BigDecimal toBigDecimal() { + int precision = Math.max(precision(), MathContext.DECIMAL128.getPrecision()); + return toBigDecimal(new MathContext(precision)); + } + + /** + * Returns this rational number as a {@link BigDecimal} with the precision specified by the {@link MathContext}. + * + * @param mc the {@link MathContext} specifying the precision of the calculated result + * @return the {@link BigDecimal} + */ + public BigDecimal toBigDecimal(MathContext mc) { + return numerator.divide(denominator, mc); + } + + @Override + public int compareTo(BigRational other) { + if (this == other) { + return 0; + } + return numerator.multiply(other.denominator).compareTo(denominator.multiply(other.numerator)); + } + + @Override + public int hashCode() { + if (isZero()) { + return 0; + } + return numerator.hashCode() + denominator.hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (obj == this) { + return true; + } + + if (!(obj instanceof BigRational)) { + return false; + } + + BigRational other = (BigRational) obj; + if (!numerator.equals(other.numerator)) { + return false; + } + return denominator.equals(other.denominator); + } + + @Override + public String toString() { + if (isZero()) { + return "0"; + } + if (isIntegerInternal()) { + return numerator.toString(); + } + return toBigDecimal().toString(); + } + + /** + * Returns a plain string representation of this rational number without any exponent. + * + * @return the plain string representation + * @see BigDecimal#toPlainString() + */ + public String toPlainString() { + if (isZero()) { + return "0"; + } + if (isIntegerInternal()) { + return numerator.toPlainString(); + } + return toBigDecimal().toPlainString(); + } + + /** + * Returns the string representation of this rational number in the form "numerator/denominator". + * + *

The resulting string is a valid input of the {@link #valueOf(String)} method.

+ * + *

Examples:

+ *
    + *
  • BigRational.valueOf(0.5).toRationalString() returns "1/2"
  • + *
  • BigRational.valueOf(2).toRationalString() returns "2"
  • + *
  • BigRational.valueOf(4, 4).toRationalString() returns "4/4" (not reduced)
  • + *
+ * + * @return the rational number string representation in the form "numerator/denominator", or "0" if the rational number is 0. + * @see #valueOf(String) + * @see #valueOf(int, int) + */ + public String toRationalString() { + if (isZero()) { + return "0"; + } + if (isIntegerInternal()) { + return numerator.toString(); + } + return numerator + "/" + denominator; + } + + /** + * Returns the string representation of this rational number as integer and fraction parts in the form "integerPart fractionNominator/fractionDenominator". + * + *

The integer part is omitted if it is 0 (when this absolute rational number is smaller than 1).

+ *

The fraction part is omitted it it is 0 (when this rational number is an integer).

+ *

If this rational number is 0, then "0" is returned.

+ * + *

Example: BigRational.valueOf(3.5).toIntegerRationalString() returns "3 1/2".

+ * + * @return the integer and fraction rational string representation + * @see #valueOf(int, int, int) + */ + public String toIntegerRationalString() { + BigDecimal fractionNumerator = numerator.remainder(denominator); + BigDecimal integerNumerator = numerator.subtract(fractionNumerator); + BigDecimal integerPart = integerNumerator.divide(denominator); + + StringBuilder result = new StringBuilder(); + if (integerPart.signum() != 0) { + result.append(integerPart); + } + if (fractionNumerator.signum() != 0) { + if (result.length() > 0) { + result.append(' '); + } + result.append(fractionNumerator.abs()); + result.append('/'); + result.append(denominator); + } + if (result.length() == 0) { + result.append('0'); + } + + return result.toString(); + } + + /** + * Creates a rational number of the specified int value. + * + * @param value the int value + * @return the rational number + */ + public static BigRational valueOf(int value) { + if (value == 0) { + return ZERO; + } + if (value == 1) { + return ONE; + } + return new BigRational(value); + } + + /** + * Creates a rational number of the specified numerator/denominator int values. + * + * @param numerator the numerator int value + * @param denominator the denominator int value (0 not allowed) + * @return the rational number + * @throws ArithmeticException if the denominator is 0 (division by zero) + */ + public static BigRational valueOf(int numerator, int denominator) { + return of(BigDecimal.valueOf(numerator), BigDecimal.valueOf(denominator)); + } + + /** + * Creates a rational number of the specified integer and fraction parts. + * + *

Useful to create numbers like 3 1/2 (= three and a half = 3.5) by calling + * BigRational.valueOf(3, 1, 2).

+ *

To create a negative rational only the integer part argument is allowed to be negative: + * to create -3 1/2 (= minus three and a half = -3.5) call BigRational.valueOf(-3, 1, 2).

+ * + * @param integer the integer part int value + * @param fractionNumerator the fraction part numerator int value (negative not allowed) + * @param fractionDenominator the fraction part denominator int value (0 or negative not allowed) + * @return the rational number + * @throws ArithmeticException if the fraction part denominator is 0 (division by zero), + * or if the fraction part numerator or denominator is negative + */ + public static BigRational valueOf(int integer, int fractionNumerator, int fractionDenominator) { + if (fractionNumerator < 0 || fractionDenominator < 0) { + throw new ArithmeticException("Negative value"); + } + + BigRational integerPart = valueOf(integer); + BigRational fractionPart = valueOf(fractionNumerator, fractionDenominator); + return integerPart.isPositive() ? integerPart.add(fractionPart) : integerPart.subtract(fractionPart); + } + + /** + * Creates a rational number of the specified numerator/denominator BigInteger values. + * + * @param numerator the numerator {@link BigInteger} value + * @param denominator the denominator {@link BigInteger} value (0 not allowed) + * @return the rational number + * @throws ArithmeticException if the denominator is 0 (division by zero) + */ + public static BigRational valueOf(BigInteger numerator, BigInteger denominator) { + return of(new BigDecimal(numerator), new BigDecimal(denominator)); + } + + /** + * Creates a rational number of the specified {@link BigInteger} value. + * + * @param value the {@link BigInteger} value + * @return the rational number + */ + public static BigRational valueOf(BigInteger value) { + if (value.compareTo(BigInteger.ZERO) == 0) { + return ZERO; + } + if (value.compareTo(BigInteger.ONE) == 0) { + return ONE; + } + return valueOf(value, BigInteger.ONE); + } + + /** + * Creates a rational number of the specified double value. + * + * @param value the double value + * @return the rational number + * @throws NumberFormatException if the double value is Infinite or NaN. + */ + public static BigRational valueOf(double value) { + if (value == 0.0) { + return ZERO; + } + if (value == 1.0) { + return ONE; + } + if (Double.isInfinite(value)) { + throw new NumberFormatException("Infinite"); + } + if (Double.isNaN(value)) { + throw new NumberFormatException("NaN"); + } + return valueOf(new BigDecimal(String.valueOf(value))); + } + + /** + * Creates a rational number of the specified {@link BigDecimal} value. + * + * @param value the double value + * @return the rational number + */ + public static BigRational valueOf(BigDecimal value) { + if (value.compareTo(BigDecimal.ZERO) == 0) { + return ZERO; + } + if (value.compareTo(BigDecimal.ONE) == 0) { + return ONE; + } + + int scale = value.scale(); + if (scale == 0) { + return new BigRational(value, BigDecimal.ONE); + } else if (scale < 0) { + BigDecimal n = new BigDecimal(value.unscaledValue()).multiply(BigDecimal.ONE.movePointLeft(value.scale())); + return new BigRational(n, BigDecimal.ONE); + } + else { + BigDecimal n = new BigDecimal(value.unscaledValue()); + BigDecimal d = BigDecimal.ONE.movePointRight(value.scale()); + return new BigRational(n, d); + } + } + + /** + * Creates a rational number of the specified string representation. + * + *

The accepted string representations are:

+ *
    + *
  • Output of {@link BigRational#toString()} : "integerPart.fractionPart"
  • + *
  • Output of {@link BigRational#toRationalString()} : "numerator/denominator"
  • + *
  • Output of toString() of {@link BigDecimal}, {@link BigInteger}, {@link Integer}, ...
  • + *
  • Output of toString() of {@link Double}, {@link Float} - except "Infinity", "-Infinity" and "NaN"
  • + *
+ * + * @param string the string representation to convert + * @return the rational number + * @throws ArithmeticException if the denominator is 0 (division by zero) + */ + public static BigRational valueOf(String string) { + String[] strings = string.split("/"); + BigRational result = valueOfSimple(strings[0]); + for (int i = 1; i < strings.length; i++) { + result = result.divide(valueOfSimple(strings[i])); + } + return result; + } + + private static BigRational valueOfSimple(String string) { + return valueOf(new BigDecimal(string)); + } + + public static BigRational valueOf(boolean positive, String integerPart, String fractionPart, String fractionRepeatPart, String exponentPart) { + BigRational result = ZERO; + + if (fractionRepeatPart != null && fractionRepeatPart.length() > 0) { + BigInteger lotsOfNines = BigInteger.TEN.pow(fractionRepeatPart.length()).subtract(BigInteger.ONE); + result = valueOf(new BigInteger(fractionRepeatPart), lotsOfNines); + } + + if (fractionPart != null && fractionPart.length() > 0) { + result = result.add(valueOf(new BigInteger(fractionPart))); + result = result.divide(BigInteger.TEN.pow(fractionPart.length())); + } + + if (integerPart != null && integerPart.length() > 0) { + result = result.add(new BigInteger(integerPart)); + } + + if (exponentPart != null && exponentPart.length() > 0) { + int exponent = Integer.parseInt(exponentPart); + BigInteger powerOfTen = BigInteger.TEN.pow(Math.abs(exponent)); + result = exponent >= 0 ? result.multiply(powerOfTen) : result.divide(powerOfTen); + } + + if (!positive) { + result = result.negate(); + } + + return result; + } + + /** + * Creates a rational number of the specified numerator/denominator BigDecimal values. + * + * @param numerator the numerator {@link BigDecimal} value + * @param denominator the denominator {@link BigDecimal} value (0 not allowed) + * @return the rational number + * @throws ArithmeticException if the denominator is 0 (division by zero) + */ + public static BigRational valueOf(BigDecimal numerator, BigDecimal denominator) { + return valueOf(numerator).divide(valueOf(denominator)); + } + + private static BigRational of(BigDecimal numerator, BigDecimal denominator) { + if (numerator.signum() == 0 && denominator.signum() != 0) { + return ZERO; + } + if (numerator.compareTo(BigDecimal.ONE) == 0 && denominator.compareTo(BigDecimal.ONE) == 0) { + return ONE; + } + return new BigRational(numerator, denominator); + } + + /** + * Returns the smallest of the specified rational numbers. + * + * @param values the rational numbers to compare + * @return the smallest rational number, 0 if no numbers are specified + */ + public static BigRational min(BigRational... values) { + if (values.length == 0) { + return BigRational.ZERO; + } + BigRational result = values[0]; + for (int i = 1; i < values.length; i++) { + result = result.min(values[i]); + } + return result; + } + + /** + * Returns the largest of the specified rational numbers. + * + * @param values the rational numbers to compare + * @return the largest rational number, 0 if no numbers are specified + * @see #max(BigRational) + */ + public static BigRational max(BigRational... values) { + if (values.length == 0) { + return BigRational.ZERO; + } + BigRational result = values[0]; + for (int i = 1; i < values.length; i++) { + result = result.max(values[i]); + } + return result; + } + + private static List bernoulliCache = new ArrayList<>(); + + /** + * Calculates the Bernoulli number for the specified index. + * + *

This function calculates the first Bernoulli numbers and therefore bernoulli(1) returns -0.5

+ *

Note that bernoulli(x) for all odd x > 1 returns 0

+ *

See: Wikipedia: Bernoulli number

+ * + * @param n the index of the Bernoulli number to be calculated (starting at 0) + * @return the Bernoulli number for the specified index + * @throws ArithmeticException if x is lesser than 0 + */ + public static BigRational bernoulli(int n) { + if (n < 0) { + throw new ArithmeticException("Illegal bernoulli(n) for n < 0: n = " + n); + } + if (n == 1) { + return valueOf(-1, 2); + } else if (n % 2 == 1) { + return ZERO; + } + + synchronized (bernoulliCache) { + int index = n / 2; + + if (bernoulliCache.size() <= index) { + for (int i = bernoulliCache.size(); i <= index; i++) { + BigRational b = calculateBernoulli(i * 2); + bernoulliCache.add(b); + } + } + + return bernoulliCache.get(index); + } + } + + private static BigRational calculateBernoulli(int n) { + return IntStream.rangeClosed(0, n).parallel().mapToObj(k -> { + BigRational jSum = ZERO ; + BigRational bin = ONE ; + for(int j=0 ; j <= k ; j++) { + BigRational jPowN = valueOf(j).pow(n); + if (j % 2 == 0) { + jSum = jSum.add(bin.multiply(jPowN)) ; + } else { + jSum = jSum.subtract(bin.multiply(jPowN)) ; + } + + bin = bin.multiply(valueOf(k-j).divide(valueOf(j+1))); + } + return jSum.divide(valueOf(k+1)); + }).reduce(ZERO, BigRational::add); + } + +} diff --git a/src/main/java/ch/obermuhlner/math/big/DefaultBigDecimalMath.java b/src/main/java/ch/obermuhlner/math/big/DefaultBigDecimalMath.java new file mode 100644 index 0000000000..d6dca31ecf --- /dev/null +++ b/src/main/java/ch/obermuhlner/math/big/DefaultBigDecimalMath.java @@ -0,0 +1,736 @@ +package ch.obermuhlner.math.big; + +import java.math.BigDecimal; +import java.math.MathContext; +import java.math.RoundingMode; +import java.util.*; + +/** + * A wrapper around {@link BigDecimalMath} that passes a current {@link MathContext} to the + * functions that need a {@link MathContext} argument. + * + *

The initial default {@link MathContext} is equivalent to {@link MathContext#DECIMAL128} + * but this can be overridden by setting the following system properties:

+ *
    + *
  • ch.obermuhlner.math.big.default.precision to a positive integer precision (default=34)
  • + *
  • ch.obermuhlner.math.big.default.rounding to a {@link RoundingMode} name (default=HALF_UP)
  • + *
+ * + *

It is also possible to programmatically set the default {@link MathContext} using {@link #setDefaultMathContext(MathContext)}. + * It is recommended to set the desired precision in the {@link MathContext} very early in the startup of the application and to not change it afterwards.

+ * + *

Important: Avoid the pitfall of setting the precision temporarily using {@link #setDefaultMathContext(MathContext)} for a calculation. + * This can lead to race conditions and calculations with the wrong precision + * if other threads in your application do the same thing.

+ * + *

To set a temporary {@link MathContext} you have to choice to use either: + *

    + *
  • DefaultBigDecimalMath.createLocalMathContext() in a try-with-resources statement
  • + *
  • DefaultBigDecimalMath.withLocalMathContext() with a lambda function
  • + *
+ * + * Example code using DefaultBigDecimalMath.createLocalMathContext(): + *
+System.out.println("Pi[default]: " + DefaultBigDecimalMath.pi());
+try (DefaultBigDecimalMath.LocalMathContext context = DefaultBigDecimalMath.createLocalMathContext(5)) {
+    System.out.println("Pi[5]: " + DefaultBigDecimalMath.pi());
+    try (DefaultBigDecimalMath.LocalMathContext context2 = DefaultBigDecimalMath.createLocalMathContext(10)) {
+        System.out.println("Pi[10]: " + DefaultBigDecimalMath.pi());
+    }
+    System.out.println("Pi[5]: " + DefaultBigDecimalMath.pi());
+}
+System.out.println("Pi[default]: " + DefaultBigDecimalMath.pi());
+ 
+ * + * Example code using DefaultBigDecimalMath.withLocalMathContext(): + *
+System.out.println("Pi[default]: " + DefaultBigDecimalMath.pi());
+DefaultBigDecimalMath.withPrecision(5, () -> {
+    System.out.println("Pi[5]: " + DefaultBigDecimalMath.pi());
+    DefaultBigDecimalMath.withPrecision(10, () -> {
+        System.out.println("Pi[10]: " + DefaultBigDecimalMath.pi());
+    });
+    System.out.println("Pi[5]: " + DefaultBigDecimalMath.pi());
+});
+System.out.println("Pi[default]: " + DefaultBigDecimalMath.pi());
+
+ * + * Both snippets with give the following ouput: + *
+Pi[default]: 3.141592653589793238462643383279503
+Pi[5]: 3.1416
+Pi[10]: 3.141592654
+Pi[5]: 3.1416
+Pi[default]: 3.141592653589793238462643383279503
+
+ *

The temporary {@link MathContext} are stored in {@link ThreadLocal} variables + * and will therefore not conflict with each other when used in multi-threaded use case.

+ * + *

Important: Due to the {@link ThreadLocal} variables the local {@link MathContext} will + * not be available in other threads. + * This includes streams using parallel(), thread pools and manually started threads. + * If you need temporary {@link MathContext} for calculations then you must + * set the local {@link MathContext} inside every separate thread.

+ * + *
+try (DefaultBigDecimalMath.LocalMathContext context = DefaultBigDecimalMath.createLocalMathContext(5)) {
+    BigDecimalStream.range(0.0, 1.0, 0.01, DefaultBigDecimalMath.currentMathContext())
+        .map(b -> DefaultBigDecimalMath.cos(b))
+        .map(b -> "sequential " + Thread.currentThread().getName() + " [5]: " + b)
+        .forEach(System.out::println);
+
+    BigDecimalStream.range(0.0, 1.0, 0.01, DefaultBigDecimalMath.currentMathContext())
+        .parallel()
+        .map(b -> {
+            try (DefaultBigDecimalMath.LocalMathContext context2 = DefaultBigDecimalMath.createLocalMathContext(5)) {
+                return DefaultBigDecimalMath.cos(b);
+            }
+        })
+        .map(b -> "parallel " + Thread.currentThread().getName() + " [5]: " + b)
+        .forEach(System.out::println);
+}
+
+ */ +public class DefaultBigDecimalMath { + + private static MathContext defaultMathContext = createDefaultMathContext(); + private static ThreadLocal> mathContextStack = new ThreadLocal<>(); + + private static MathContext createDefaultMathContext () { + int precision = getIntSystemProperty("ch.obermuhlner.math.big.default.precision", MathContext.DECIMAL128.getPrecision()); + RoundingMode rounding = getRoundingModeSystemProperty("ch.obermuhlner.math.big.default.rounding", MathContext.DECIMAL128.getRoundingMode()); + + return new MathContext(precision, rounding); + } + + private static void pushMathContext(MathContext mathContext) { + Deque mathContexts = mathContextStack.get(); + if (mathContexts == null) { + mathContexts = new ArrayDeque<>(); + mathContextStack.set(mathContexts); + }; + mathContexts.addLast(mathContext); + } + + private static MathContext popMathContext() { + Deque mathContexts = mathContextStack.get(); + MathContext poppedMathContext = mathContexts.removeLast(); + if (mathContexts.isEmpty()) { + mathContextStack.remove(); + } + return poppedMathContext; + } + + private static int getIntSystemProperty(String propertyKey, int defaultValue) { + String propertyValue = System.getProperty(propertyKey, Integer.toString(defaultValue)); + try { + return Integer.parseInt(propertyValue); + } catch(NumberFormatException ex) { + return propertyException(propertyKey,propertyValue,defaultValue); + } + } + + private static RoundingMode getRoundingModeSystemProperty(String propertyKey, RoundingMode defaultValue) { + String propertyValue = System.getProperty(propertyKey, defaultValue.name()); + try { + return RoundingMode.valueOf(propertyValue); + } catch(IllegalArgumentException ex) { + return propertyException(propertyKey,propertyValue,defaultValue); + } + } + + private static T propertyException(String propertyKey,String propertyValue,T defaultValue){ + System.err.println("Property '" + propertyKey + "' is not valid: " + propertyValue + " (using " + defaultValue + " instead)"); + return defaultValue; + } + + /** + * Sets the default {@link MathContext} used if no other {@link MathContext} is defined using {@link #withLocalMathContext(MathContext, Runnable)}. + * + * @param defaultMathContext the default {@link MathContext} + * @see #currentMathContext() + * @see #withLocalMathContext(int, Runnable) + * @see #withLocalMathContext(int, RoundingMode, Runnable) + * @see #withLocalMathContext(MathContext, Runnable) + */ + public static void setDefaultMathContext(MathContext defaultMathContext) { + Objects.requireNonNull(defaultMathContext); + DefaultBigDecimalMath.defaultMathContext = defaultMathContext; + } + + /** + * Returns the default {@link MathContext} used for all mathematical functions in this class. + * + * @return the default {@link MathContext} + */ + public static MathContext getDefaultMathContext() { + return defaultMathContext; + } + + /** + * Executes the given {@link Runnable} using the specified precision. + * + * @param precision the precision to use for calculations in the runnable + * @param runnable the {@link Runnable} to execute + */ + public static void withLocalMathContext(int precision, Runnable runnable) { + withLocalMathContext(new MathContext(precision), runnable); + } + + /** + * Executes the given {@link Runnable} using the specified precision and {@link RoundingMode}. + * + * @param precision the precision to use for calculations in the runnable + * @param roundingMode the {@link RoundingMode} to use for calculations in the runnable + * @param runnable the {@link Runnable} to execute + */ + public static void withLocalMathContext(int precision, RoundingMode roundingMode, Runnable runnable) { + withLocalMathContext(new MathContext(precision, roundingMode), runnable); + } + + /** + * Executes the given {@link Runnable} using the specified {@link MathContext}. + * + * @param mathContext the {@link MathContext} to use for calculations in the runnable + * @param runnable the {@link Runnable} to execute + */ + public static void withLocalMathContext(MathContext mathContext, Runnable runnable) { + try (LocalMathContext context = createLocalMathContext(mathContext)) { + runnable.run(); + } + } + + /** + * Executes the given {@link Runnable} using the specified precision. + * + * @param precision the precision to use for calculations + * @return the created {@link LocalMathContext} to be used in a try-with-resources statement + */ + public static LocalMathContext createLocalMathContext(int precision) { + return createLocalMathContext(new MathContext(precision)); + } + + /** + * Executes the given {@link Runnable} using the specified precision and {@link RoundingMode}. + * + * @param precision the precision to use for calculations + * @param roundingMode the {@link RoundingMode} to use for calculations in the runnable + * @return the created {@link LocalMathContext} to be used in a try-with-resources statement + */ + public static LocalMathContext createLocalMathContext(int precision, RoundingMode roundingMode) { + return createLocalMathContext(new MathContext(precision, roundingMode)); + } + + /** + * Executes the given {@link Runnable} using the specified {@link MathContext}. + * + * @param mathContext the {@link MathContext} to use for calculations + * @return the created {@link LocalMathContext} to be used in a try-with-resources statement + */ + public static LocalMathContext createLocalMathContext(MathContext mathContext) { + return new LocalMathContext(mathContext); + } + + /** + * Returns the current {@link MathContext} used for all mathematical functions in this class. + * + *

The current {@link MathContext} is the last {@link MathContext} specified + * using {@link #withLocalMathContext(MathContext, Runnable)} + * or the default {@link MathContext} if none was specified.

+ * + * @return the current {@link MathContext} + * @see #currentMathContext() + * @see #withLocalMathContext(int, Runnable) + * @see #withLocalMathContext(int, RoundingMode, Runnable) + * @see #withLocalMathContext(MathContext, Runnable) + */ + public static MathContext currentMathContext() { + Deque mathContexts = mathContextStack.get(); + if (mathContexts == null || mathContexts.isEmpty()) { + return defaultMathContext; + } + + return mathContexts.getLast(); + } + + /** + * Rounds the specified {@link BigDecimal} to the precision of the current {@link MathContext}. + * + * @param value the {@link BigDecimal} to round + * @return the rounded {@link BigDecimal} value + * @see #currentMathContext() + * @see BigDecimalMath#round(BigDecimal, MathContext) + */ + public static BigDecimal round(BigDecimal value) { + return BigDecimalMath.round(value, defaultMathContext); + } + + /** + * Rounds the specified {@link BigDecimal} to the precision of the current {@link MathContext} including trailing zeroes. + * + * @param value the {@link BigDecimal} to round + * @return the rounded {@link BigDecimal} value including trailing zeroes + * @see #currentMathContext() + * @see BigDecimalMath#roundWithTrailingZeroes(BigDecimal, MathContext) + */ + public static BigDecimal roundWithTrailingZeroes(BigDecimal value) { + return BigDecimalMath.roundWithTrailingZeroes(value, currentMathContext()); + } + + /** + * Returns the {@link BigDecimal} that is x + y using the current {@link MathContext}. + * + * @param x the x value + * @param y the y value to add + * @return the resulting {@link BigDecimal} with the precision specified in the current {@link MathContext} + * @see #currentMathContext() + * @see BigDecimal#add(BigDecimal, MathContext) + */ + public static BigDecimal add(BigDecimal x, BigDecimal y) { + return x.add(y, currentMathContext()); + } + + /** + * Returns the {@link BigDecimal} that is x - y using the current {@link MathContext}. + * + * @param x the x value + * @param y the y value to subtract + * @return the resulting {@link BigDecimal} with the precision specified in the current {@link MathContext} + * @see #currentMathContext() + * @see BigDecimal#subtract(BigDecimal, MathContext) + */ + public static BigDecimal subtract(BigDecimal x, BigDecimal y) { + return x.subtract(y, currentMathContext()); + } + + /** + * Returns the {@link BigDecimal} that is x * y using the current {@link MathContext}. + * + * @param x the x value + * @param y the y value to multiply + * @return the resulting {@link BigDecimal} with the precision specified in the current {@link MathContext} + * @see #currentMathContext() + * @see BigDecimal#multiply(BigDecimal, MathContext) + */ + public static BigDecimal multiply(BigDecimal x, BigDecimal y) { + return x.multiply(y, currentMathContext()); + } + + /** + * Returns the {@link BigDecimal} that is x / y using the current {@link MathContext}. + * + * @param x the x value + * @param y the y value to divide + * @return the resulting {@link BigDecimal} with the precision specified in the current {@link MathContext} + * @see #currentMathContext() + * @see BigDecimal#divide(BigDecimal, MathContext) + */ + public static BigDecimal divide(BigDecimal x, BigDecimal y) { + return x.divide(y, currentMathContext()); + } + + /** + * Returns the {@link BigDecimal} that is x % y using the current {@link MathContext}. + * + * @param x the x value + * @param y the y value to divide + * @return the resulting {@link BigDecimal} with the precision specified in the current {@link MathContext} + * @see #currentMathContext() + * @see BigDecimal#remainder(BigDecimal, MathContext) + */ + public static BigDecimal remainder(BigDecimal x, BigDecimal y) { + return x.remainder(y, currentMathContext()); + } + + /** + * Calculates the reciprocal of the specified {@link BigDecimal} using the current {@link MathContext}. + * + * @param x the {@link BigDecimal} + * @return the reciprocal {@link BigDecimal} with the precision specified in the current {@link MathContext} + * @see #currentMathContext() + * @see BigDecimalMath#reciprocal(BigDecimal, MathContext) + */ + public static BigDecimal reciprocal(BigDecimal x) { + return BigDecimalMath.reciprocal(x, currentMathContext()); + } + + /** + * Calculates the factorial of the specified {@link BigDecimal} using the current {@link MathContext}. + * + * @param x the {@link BigDecimal} + * @return the factorial {@link BigDecimal} with the precision specified in the current {@link MathContext} + * @see #currentMathContext() + * @see BigDecimalMath#factorial(BigDecimal, MathContext) + */ + public static BigDecimal factorial(BigDecimal x) { + return BigDecimalMath.factorial(x, currentMathContext()); + } + + /** + * Calculates the gamma function of the specified {@link BigDecimal} using the current {@link MathContext}. + * + * @param x the {@link BigDecimal} + * @return the gamma {@link BigDecimal} with the precision specified in the current {@link MathContext} + * @see #currentMathContext() + * @see BigDecimalMath#gamma(BigDecimal, MathContext) + */ + public static BigDecimal gamma(BigDecimal x) { + return BigDecimalMath.gamma(x, currentMathContext()); + } + + /** + * Calculates the Bernoulli number for the specified index using the current {@link MathContext}. + * + * @param n the index of the Bernoulli number to be calculated (starting at 0) + * @return the Bernoulli number for the specified index with the precision specified in the current {@link MathContext} + * @see #currentMathContext() + * @see BigDecimalMath#bernoulli(int, MathContext) + */ + public static BigDecimal bernoulli(int n) { + return BigDecimalMath.bernoulli(n, currentMathContext()); + } + + /** + * Calculates {@link BigDecimal} x to the power of {@link BigDecimal} y (xy) using the current {@link MathContext}. + * + * @param x the {@link BigDecimal} value to take to the power + * @param y the {@link BigDecimal} value to serve as exponent + * @return the calculated x to the power of y with the precision specified in the current {@link MathContext} + * @see #currentMathContext() + * @see BigDecimalMath#pow(BigDecimal, BigDecimal, MathContext) + */ + public static BigDecimal pow(BigDecimal x, BigDecimal y) { + return BigDecimalMath.pow(x, y, currentMathContext()); + } + + /** + * Calculates {@link BigDecimal} x to the power of long y (xy) using the current {@link MathContext}. + * + * @param x the {@link BigDecimal} value to take to the power + * @param y the long value to serve as exponent + * @return the calculated x to the power of y with the precision specified in the current {@link MathContext} + * @see #currentMathContext() + * @see BigDecimalMath#pow(BigDecimal, long, MathContext) + */ + public static BigDecimal pow(BigDecimal x, long y) { + return BigDecimalMath.pow(x, y, currentMathContext()); + } + + /** + * Calculates the square root of {@link BigDecimal} x using the current {@link MathContext}. + * + * @param x the {@link BigDecimal} value to calculate the square root + * @return the calculated square root of x with the precision specified in the current {@link MathContext} + * @see #currentMathContext() + * @see BigDecimalMath#sqrt(BigDecimal, MathContext) + */ + public static BigDecimal sqrt(BigDecimal x) { + return BigDecimalMath.sqrt(x, currentMathContext()); + } + + /** + * Calculates the n'th root of {@link BigDecimal} x using the current {@link MathContext}. + * + * @param x the {@link BigDecimal} value to calculate the n'th root + * @param n the {@link BigDecimal} defining the root + * + * @return the calculated n'th root of x with the precision specified in the current {@link MathContext} + * @see #currentMathContext() + * @see BigDecimalMath#root(BigDecimal, BigDecimal, MathContext) + */ + public static BigDecimal root(BigDecimal x, BigDecimal n) { + return BigDecimalMath.root(x, n, currentMathContext()); + } + + /** + * Calculates the natural logarithm of {@link BigDecimal} x using the current {@link MathContext}. + * + * @param x the {@link BigDecimal} to calculate the natural logarithm for + * @return the calculated natural logarithm {@link BigDecimal} with the precision specified in the current {@link MathContext} + * @see #currentMathContext() + * @see BigDecimalMath#log(BigDecimal, MathContext) + */ + public static BigDecimal log(BigDecimal x) { + return BigDecimalMath.log(x, currentMathContext()); + } + + /** + * Calculates the logarithm of {@link BigDecimal} x to the base 2 using the current {@link MathContext}. + * + * @param x the {@link BigDecimal} to calculate the logarithm base 2 for + * @return the calculated natural logarithm {@link BigDecimal} to the base 2 with the precision specified in the current {@link MathContext} + * @see #currentMathContext() + * @see BigDecimalMath#log2(BigDecimal, MathContext) + */ + public static BigDecimal log2(BigDecimal x) { + return BigDecimalMath.log2(x, currentMathContext()); + } + + /** + * Calculates the logarithm of {@link BigDecimal} x to the base 10 using the current {@link MathContext}. + * + * @param x the {@link BigDecimal} to calculate the logarithm base 10 for + * @return the calculated natural logarithm {@link BigDecimal} to the base 10 with the precision specified in the current {@link MathContext} + * @see #currentMathContext() + * @see BigDecimalMath#log10(BigDecimal, MathContext) + */ + public static BigDecimal log10(BigDecimal x) { + return BigDecimalMath.log10(x, currentMathContext()); + } + + /** + * Returns the number pi using the current {@link MathContext}. + * + * @return the number pi with the precision specified in the current {@link MathContext} + * @see #currentMathContext() + * @see BigDecimalMath#pi(MathContext) + */ + public static BigDecimal pi() { + return BigDecimalMath.pi(currentMathContext()); + } + + /** + * Returns the number e using the current {@link MathContext}. + * + * @return the number e with the precision specified in the current {@link MathContext} + * @see #currentMathContext() + * @see BigDecimalMath#e(MathContext) + */ + public static BigDecimal e() { + return BigDecimalMath.e(currentMathContext()); + } + + /** + * Calculates the natural exponent of {@link BigDecimal} x (ex) using the current {@link MathContext}. + * + * @param x the {@link BigDecimal} to calculate the exponent for + * @return the calculated exponent {@link BigDecimal} with the precision specified in the current {@link MathContext} + * @see #currentMathContext() + * @see BigDecimalMath#exp(BigDecimal, MathContext) + */ + public static BigDecimal exp(BigDecimal x) { + return BigDecimalMath.exp(x, currentMathContext()); + } + + /** + * Calculates the sine (sinus) of {@link BigDecimal} x using the current {@link MathContext}. + * + * @param x the {@link BigDecimal} to calculate the sine for + * @return the calculated sine {@link BigDecimal} with the precision specified in the current {@link MathContext} + * @see #currentMathContext() + * @see BigDecimalMath#sin(BigDecimal, MathContext) + */ + public static BigDecimal sin(BigDecimal x) { + return BigDecimalMath.sin(x, currentMathContext()); + } + + /** + * Calculates the arc sine (inverted sine) of {@link BigDecimal} x using the current {@link MathContext}. + * + * @param x the {@link BigDecimal} to calculate the arc sine for + * @return the calculated arc sine {@link BigDecimal} with the precision specified in the current {@link MathContext} + * @see #currentMathContext() + * @see BigDecimalMath#asin(BigDecimal, MathContext) + */ + public static BigDecimal asin(BigDecimal x) { + return BigDecimalMath.asin(x, currentMathContext()); + } + + /** + * Calculates the cosine (cosinus) of {@link BigDecimal} x using the current {@link MathContext}. + * + * @param x the {@link BigDecimal} to calculate the cosine for + * @return the calculated cosine {@link BigDecimal} with the precision specified in the current {@link MathContext} + */ + public static BigDecimal cos(BigDecimal x) { + return BigDecimalMath.cos(x, currentMathContext()); + } + + /** + * Calculates the arc cosine (inverted cosine) of {@link BigDecimal} x using the current {@link MathContext}. + * + * @param x the {@link BigDecimal} to calculate the arc cosine for + * @return the calculated arc sine {@link BigDecimal} with the precision specified in the current {@link MathContext} + * @see #currentMathContext() + * @see BigDecimalMath#acos(BigDecimal, MathContext) + */ + public static BigDecimal acos(BigDecimal x) { + return BigDecimalMath.acos(x, currentMathContext()); + } + + /** + * Calculates the tangens of {@link BigDecimal} x using the current {@link MathContext}. + * + * @param x the {@link BigDecimal} to calculate the tangens for + * @return the calculated tangens {@link BigDecimal} with the precision specified in the current {@link MathContext} + * @see #currentMathContext() + * @see BigDecimalMath#tan(BigDecimal, MathContext) + */ + public static BigDecimal tan(BigDecimal x) { + return BigDecimalMath.tan(x, currentMathContext()); + } + + /** + * Calculates the arc tangens (inverted tangens) of {@link BigDecimal} x using the current {@link MathContext}. + * + * @param x the {@link BigDecimal} to calculate the arc tangens for + * @return the calculated arc tangens {@link BigDecimal} with the precision specified in the current {@link MathContext} + * @see #currentMathContext() + * @see BigDecimalMath#atan(BigDecimal, MathContext) + */ + public static BigDecimal atan(BigDecimal x) { + return BigDecimalMath.atan(x, currentMathContext()); + } + + /** + * Calculates the arc tangens (inverted tangens) of {@link BigDecimal} y / x in the range -pi to pi using the current {@link MathContext}. + * + * @param y the {@link BigDecimal} + * @param x the {@link BigDecimal} + * @return the calculated arc tangens {@link BigDecimal} with the precision specified in the current {@link MathContext} + * @see #currentMathContext() + * @see #atan2(BigDecimal, BigDecimal) + */ + public static BigDecimal atan2(BigDecimal y, BigDecimal x) { + return BigDecimalMath.atan2(y, x, currentMathContext()); + } + + /** + * Calculates the cotangens of {@link BigDecimal} x using the current {@link MathContext}. + * + * @param x the {@link BigDecimal} to calculate the cotangens for + * @return the calculated cotanges {@link BigDecimal} with the precision specified in the current {@link MathContext} + * @see #currentMathContext() + * @see BigDecimalMath#cot(BigDecimal, MathContext) + */ + public static BigDecimal cot(BigDecimal x) { + return BigDecimalMath.cot(x, currentMathContext()); + } + + /** + * Calculates the inverse cotangens (arc cotangens) of {@link BigDecimal} x using the current {@link MathContext}. + * + * @param x the {@link BigDecimal} to calculate the arc cotangens for + * @return the calculated arc cotangens {@link BigDecimal} with the precision specified in the current {@link MathContext} + * @see #currentMathContext() + * @see BigDecimalMath#acot(BigDecimal, MathContext) + */ + public static BigDecimal acot(BigDecimal x) { + return BigDecimalMath.acot(x, currentMathContext()); + } + + /** + * Calculates the hyperbolic sine of {@link BigDecimal} x using the current {@link MathContext}. + * + * @param x the {@link BigDecimal} to calculate the hyperbolic sine for + * @return the calculated hyperbolic sine {@link BigDecimal} with the precision specified in the current {@link MathContext} + * @see #currentMathContext() + * @see BigDecimalMath#sinh(BigDecimal, MathContext) + */ + public static BigDecimal sinh(BigDecimal x) { + return BigDecimalMath.sinh(x, currentMathContext()); + } + + /** + * Calculates the hyperbolic cosine of {@link BigDecimal} x using the current {@link MathContext}. + * + * @param x the {@link BigDecimal} to calculate the hyperbolic cosine for + * @return the calculated hyperbolic cosine {@link BigDecimal} with the precision specified in the current {@link MathContext} + * @see #currentMathContext() + * @see BigDecimalMath#cosh(BigDecimal, MathContext) + */ + public static BigDecimal cosh(BigDecimal x) { + return BigDecimalMath.cosh(x, currentMathContext()); + } + + /** + * Calculates the hyperbolic tangens of {@link BigDecimal} x using the current {@link MathContext}. + * + * @param x the {@link BigDecimal} to calculate the hyperbolic tangens for + * @return the calculated hyperbolic tangens {@link BigDecimal} with the precision specified in the current {@link MathContext} + * @see #currentMathContext() + * @see BigDecimalMath#tanh(BigDecimal, MathContext) + */ + public static BigDecimal tanh(BigDecimal x) { + return BigDecimalMath.tanh(x, currentMathContext()); + } + + /** + * Calculates the hyperbolic cotangens of {@link BigDecimal} x using the current {@link MathContext}. + * + * @param x the {@link BigDecimal} to calculate the hyperbolic cotangens for + * @return the calculated hyperbolic cotangens {@link BigDecimal} with the precision specified in the current {@link MathContext} + * @see #currentMathContext() + * @see BigDecimalMath#coth(BigDecimal, MathContext) + */ + public static BigDecimal coth(BigDecimal x) { + return BigDecimalMath.coth(x, currentMathContext()); + } + + /** + * Calculates the arc hyperbolic sine (inverse hyperbolic sine) of {@link BigDecimal} x using the current {@link MathContext}. + * + * @param x the {@link BigDecimal} to calculate the arc hyperbolic sine for + * @return the calculated arc hyperbolic sine {@link BigDecimal} with the precision specified in the current {@link MathContext} + * @see #currentMathContext() + * @see BigDecimalMath#asinh(BigDecimal, MathContext) + */ + public static BigDecimal asinh(BigDecimal x) { + return BigDecimalMath.asinh(x, currentMathContext()); + } + + /** + * Calculates the arc hyperbolic cosine (inverse hyperbolic cosine) of {@link BigDecimal} x using the current {@link MathContext}. + * + * @param x the {@link BigDecimal} to calculate the arc hyperbolic cosine for + * @return the calculated arc hyperbolic cosine {@link BigDecimal} with the precision specified in the current {@link MathContext} + * @see #currentMathContext() + * @see BigDecimalMath#acosh(BigDecimal, MathContext) + */ + public static BigDecimal acosh(BigDecimal x) { + return BigDecimalMath.acosh(x, currentMathContext()); + } + + /** + * Calculates the arc hyperbolic tangens (inverse hyperbolic tangens) of {@link BigDecimal} x using the current {@link MathContext}. + * + * @param x the {@link BigDecimal} to calculate the arc hyperbolic tangens for + * @return the calculated arc hyperbolic tangens {@link BigDecimal} with the precision specified in the current {@link MathContext} + * @see #currentMathContext() + * @see BigDecimalMath#atanh(BigDecimal, MathContext) + */ + public static BigDecimal atanh(BigDecimal x) { + return BigDecimalMath.atanh(x, currentMathContext()); + } + + /** + * Calculates the arc hyperbolic cotangens (inverse hyperbolic cotangens) of {@link BigDecimal} x using the current {@link MathContext}. + * + * @param x the {@link BigDecimal} to calculate the arc hyperbolic cotangens for + * @return the calculated arc hyperbolic cotangens {@link BigDecimal} with the precision specified in the current {@link MathContext} + * @see #currentMathContext() + * @see BigDecimalMath#acoth(BigDecimal, MathContext) + */ + public static BigDecimal acoth(BigDecimal x) { + return BigDecimalMath.acoth(x, currentMathContext()); + } + + /** + * The local context used to push and pop a {@link MathContext} on the stack. + * + *

The recommended way to use this class is to use the try-with-resources.

+ */ + public static class LocalMathContext implements AutoCloseable { + public final MathContext mathContext; + + LocalMathContext(MathContext mathContext) { + this.mathContext = mathContext; + pushMathContext(mathContext); + } + + @Override + public void close() { + popMathContext(); + } + } +} diff --git a/src/main/java/ch/obermuhlner/math/big/internal/AsinCalculator.java b/src/main/java/ch/obermuhlner/math/big/internal/AsinCalculator.java new file mode 100644 index 0000000000..f8bcd4837b --- /dev/null +++ b/src/main/java/ch/obermuhlner/math/big/internal/AsinCalculator.java @@ -0,0 +1,46 @@ +package ch.obermuhlner.math.big.internal; + +import java.math.BigDecimal; +import java.math.MathContext; + +import ch.obermuhlner.math.big.BigRational; + +/** + * Calculates arc sinus using the Maclaurin series. + * + *

See Wikipedia: Taylorreihe

+ * + *

No argument checking or optimizations are done. + * This implementation is not intended to be called directly.

+ */ +public class AsinCalculator extends SeriesCalculator { + + public static final AsinCalculator INSTANCE = new AsinCalculator(); + + private int n = 0; + private BigRational factorial2n = BigRational.ONE; + private BigRational factorialN = BigRational.ONE; + private BigRational fourPowerN = BigRational.ONE; + + private AsinCalculator() { + } + + @Override + protected BigRational getCurrentFactor() { + BigRational factor = factorial2n.divide(fourPowerN.multiply(factorialN).multiply(factorialN).multiply(2 * n + 1)); + return factor; + } + + @Override + protected void calculateNextFactor() { + n++; + factorial2n = factorial2n.multiply(2 * n - 1).multiply(2 * n); + factorialN = factorialN.multiply(n); + fourPowerN = fourPowerN.multiply(4); + } + + @Override + protected PowerIterator createPowerIterator(BigDecimal x, MathContext mathContext) { + return new PowerTwoNPlusOneIterator(x, mathContext); + } +} diff --git a/src/main/java/ch/obermuhlner/math/big/internal/AtanhCalculator.java b/src/main/java/ch/obermuhlner/math/big/internal/AtanhCalculator.java new file mode 100644 index 0000000000..a2f844a094 --- /dev/null +++ b/src/main/java/ch/obermuhlner/math/big/internal/AtanhCalculator.java @@ -0,0 +1,40 @@ +package ch.obermuhlner.math.big.internal; + +import ch.obermuhlner.math.big.BigRational; + +import java.math.BigDecimal; +import java.math.MathContext; + +/** + * Calculates sinus hyperbolicus using the Taylor series. + * + *

See Wikipedia: Taylor series

+ * + *

No argument checking or optimizations are done. + * This implementation is not intended to be called directly.

+ */ +public class AtanhCalculator extends SeriesCalculator { + + public static final AtanhCalculator INSTANCE = new AtanhCalculator(); + + private int n = 0; + + private AtanhCalculator() { + super(true); + } + + @Override + protected BigRational getCurrentFactor() { + return BigRational.valueOf(1, 2 * n + 1); + } + + @Override + protected void calculateNextFactor() { + n++; + } + + @Override + protected PowerIterator createPowerIterator(BigDecimal x, MathContext mathContext) { + return new PowerTwoNPlusOneIterator(x, mathContext); + } +} diff --git a/src/main/java/ch/obermuhlner/math/big/internal/CosCalculator.java b/src/main/java/ch/obermuhlner/math/big/internal/CosCalculator.java new file mode 100644 index 0000000000..bf9edbd691 --- /dev/null +++ b/src/main/java/ch/obermuhlner/math/big/internal/CosCalculator.java @@ -0,0 +1,48 @@ +package ch.obermuhlner.math.big.internal; + +import java.math.BigDecimal; +import java.math.MathContext; + +import ch.obermuhlner.math.big.BigRational; + +/** + * Calculates cosinus using the Maclaurin series. + * + *

See Wikipedia: Taylorreihe

+ * + *

No argument checking or optimizations are done. + * This implementation is not intended to be called directly.

+ */ +public class CosCalculator extends SeriesCalculator { + + public static final CosCalculator INSTANCE = new CosCalculator(); + + private int n = 0; + private boolean negative = false; + private BigRational factorial2n = BigRational.ONE; + + private CosCalculator() { + super(true); + } + + @Override + protected BigRational getCurrentFactor() { + BigRational factor = factorial2n.reciprocal(); + if (negative) { + factor = factor.negate(); + } + return factor; + } + + @Override + protected void calculateNextFactor() { + n++; + factorial2n = factorial2n.multiply(2 * n - 1).multiply(2 * n); + negative = !negative; + } + + @Override + protected PowerIterator createPowerIterator(BigDecimal x, MathContext mathContext) { + return new PowerTwoNIterator(x, mathContext); + } +} diff --git a/src/main/java/ch/obermuhlner/math/big/internal/CoshCalculator.java b/src/main/java/ch/obermuhlner/math/big/internal/CoshCalculator.java new file mode 100644 index 0000000000..f22631e8ae --- /dev/null +++ b/src/main/java/ch/obermuhlner/math/big/internal/CoshCalculator.java @@ -0,0 +1,43 @@ +package ch.obermuhlner.math.big.internal; + +import java.math.BigDecimal; +import java.math.MathContext; + +import ch.obermuhlner.math.big.BigRational; + +/** + * Calculates cosinus hyperbolicus using the Taylor series. + * + *

See Wikipedia: Taylor series

+ * + *

No argument checking or optimizations are done. + * This implementation is not intended to be called directly.

+ */ +public class CoshCalculator extends SeriesCalculator { + + public static final CoshCalculator INSTANCE = new CoshCalculator(); + + private int n = 0; + + private BigRational factorial2n = BigRational.ONE; + + private CoshCalculator() { + super(true); + } + + @Override + protected BigRational getCurrentFactor() { + return factorial2n.reciprocal(); + } + + @Override + protected void calculateNextFactor() { + n++; + factorial2n = factorial2n.multiply(2 * n - 1).multiply(2 * n); + } + + @Override + protected PowerIterator createPowerIterator(BigDecimal x, MathContext mathContext) { + return new PowerTwoNIterator(x, mathContext); + } +} diff --git a/src/main/java/ch/obermuhlner/math/big/internal/ExpCalculator.java b/src/main/java/ch/obermuhlner/math/big/internal/ExpCalculator.java new file mode 100644 index 0000000000..16c6e6ac21 --- /dev/null +++ b/src/main/java/ch/obermuhlner/math/big/internal/ExpCalculator.java @@ -0,0 +1,42 @@ +package ch.obermuhlner.math.big.internal; + +import java.math.BigDecimal; +import java.math.MathContext; + +import ch.obermuhlner.math.big.BigRational; + +/** + * Calculates exp using the Maclaurin series. + * + *

See Wikipedia: Taylorreihe

+ * + *

No argument checking or optimizations are done. + * This implementation is not intended to be called directly.

+ */ +public class ExpCalculator extends SeriesCalculator { + + public static final ExpCalculator INSTANCE = new ExpCalculator(); + + private int n = 0; + private BigRational oneOverFactorialOfN = BigRational.ONE; + + private ExpCalculator() { + // prevent instances + } + + @Override + protected BigRational getCurrentFactor() { + return oneOverFactorialOfN; + } + + @Override + protected void calculateNextFactor() { + n++; + oneOverFactorialOfN = oneOverFactorialOfN.divide(n); + } + + @Override + protected PowerIterator createPowerIterator(BigDecimal x, MathContext mathContext) { + return new PowerNIterator(x, mathContext); + } +} diff --git a/src/main/java/ch/obermuhlner/math/big/internal/PowerIterator.java b/src/main/java/ch/obermuhlner/math/big/internal/PowerIterator.java new file mode 100644 index 0000000000..def0f5f7ef --- /dev/null +++ b/src/main/java/ch/obermuhlner/math/big/internal/PowerIterator.java @@ -0,0 +1,28 @@ +package ch.obermuhlner.math.big.internal; + +import java.math.BigDecimal; + +/** + * Iterator over the powers of a value x. + * + *

This API allows to efficiently calculate the various powers of x in a taylor series by storing intermediate results.

+ *

For example xn can be calculated using one multiplication by storing the previously calculated xn-1 and x.

+ * + *

{@link #getCurrentPower()} will be called first to retrieve the initial value.

+ * + * For later iterations {@link #calculateNextPower()} will be called before {@link #getCurrentPower()}. + */ +public interface PowerIterator { + + /** + * Returns the current power. + * + * @return the current power. + */ + BigDecimal getCurrentPower(); + + /** + * Calculates the next power. + */ + void calculateNextPower(); +} \ No newline at end of file diff --git a/src/main/java/ch/obermuhlner/math/big/internal/PowerNIterator.java b/src/main/java/ch/obermuhlner/math/big/internal/PowerNIterator.java new file mode 100644 index 0000000000..d6ef34e01e --- /dev/null +++ b/src/main/java/ch/obermuhlner/math/big/internal/PowerNIterator.java @@ -0,0 +1,33 @@ +package ch.obermuhlner.math.big.internal; + +import java.math.BigDecimal; +import java.math.MathContext; + +/** + * {@link PowerIterator} to calculate xn. + */ +public class PowerNIterator implements PowerIterator { + + private final BigDecimal x; + + private final MathContext mathContext; + + private BigDecimal powerOfX; + + public PowerNIterator(BigDecimal x, MathContext mathContext) { + this.x = x; + this.mathContext = mathContext; + + powerOfX = BigDecimal.ONE; + } + + @Override + public BigDecimal getCurrentPower() { + return powerOfX; + } + + @Override + public void calculateNextPower() { + powerOfX = powerOfX.multiply(x, mathContext); + } +} \ No newline at end of file diff --git a/src/main/java/ch/obermuhlner/math/big/internal/PowerTwoNIterator.java b/src/main/java/ch/obermuhlner/math/big/internal/PowerTwoNIterator.java new file mode 100644 index 0000000000..839d617e16 --- /dev/null +++ b/src/main/java/ch/obermuhlner/math/big/internal/PowerTwoNIterator.java @@ -0,0 +1,33 @@ +package ch.obermuhlner.math.big.internal; + +import java.math.BigDecimal; +import java.math.MathContext; + +/** + * {@link PowerIterator} to calculate x2*n. + */ +public class PowerTwoNIterator implements PowerIterator { + + private final MathContext mathContext; + + private final BigDecimal xPowerTwo; + + private BigDecimal powerOfX; + + public PowerTwoNIterator(BigDecimal x, MathContext mathContext) { + this.mathContext = mathContext; + + xPowerTwo = x.multiply(x, mathContext); + powerOfX = BigDecimal.ONE; + } + + @Override + public BigDecimal getCurrentPower() { + return powerOfX; + } + + @Override + public void calculateNextPower() { + powerOfX = powerOfX.multiply(xPowerTwo, mathContext); + } +} \ No newline at end of file diff --git a/src/main/java/ch/obermuhlner/math/big/internal/PowerTwoNMinusOneIterator.java b/src/main/java/ch/obermuhlner/math/big/internal/PowerTwoNMinusOneIterator.java new file mode 100644 index 0000000000..15ad0168c0 --- /dev/null +++ b/src/main/java/ch/obermuhlner/math/big/internal/PowerTwoNMinusOneIterator.java @@ -0,0 +1,35 @@ +package ch.obermuhlner.math.big.internal; + +import ch.obermuhlner.math.big.BigDecimalMath; + +import java.math.BigDecimal; +import java.math.MathContext; + +/** + * {@link PowerIterator} to calculate x2*n-1. + */ +public class PowerTwoNMinusOneIterator implements PowerIterator { + + private final MathContext mathContext; + + private final BigDecimal xPowerTwo; + + private BigDecimal powerOfX; + + public PowerTwoNMinusOneIterator(BigDecimal x, MathContext mathContext) { + this.mathContext = mathContext; + + xPowerTwo = x.multiply(x, mathContext); + powerOfX = BigDecimalMath.reciprocal(x, mathContext); + } + + @Override + public BigDecimal getCurrentPower() { + return powerOfX; + } + + @Override + public void calculateNextPower() { + powerOfX = powerOfX.multiply(xPowerTwo, mathContext); + } +} \ No newline at end of file diff --git a/src/main/java/ch/obermuhlner/math/big/internal/PowerTwoNPlusOneIterator.java b/src/main/java/ch/obermuhlner/math/big/internal/PowerTwoNPlusOneIterator.java new file mode 100644 index 0000000000..57afa97634 --- /dev/null +++ b/src/main/java/ch/obermuhlner/math/big/internal/PowerTwoNPlusOneIterator.java @@ -0,0 +1,33 @@ +package ch.obermuhlner.math.big.internal; + +import java.math.BigDecimal; +import java.math.MathContext; + +/** + * {@link PowerIterator} to calculate x2*n+1. + */ +public class PowerTwoNPlusOneIterator implements PowerIterator { + + private final MathContext mathContext; + + private final BigDecimal xPowerTwo; + + private BigDecimal powerOfX; + + public PowerTwoNPlusOneIterator(BigDecimal x, MathContext mathContext) { + this.mathContext = mathContext; + + xPowerTwo = x.multiply(x, mathContext); + powerOfX = x; + } + + @Override + public BigDecimal getCurrentPower() { + return powerOfX; + } + + @Override + public void calculateNextPower() { + powerOfX = powerOfX.multiply(xPowerTwo, mathContext); + } +} \ No newline at end of file diff --git a/src/main/java/ch/obermuhlner/math/big/internal/SeriesCalculator.java b/src/main/java/ch/obermuhlner/math/big/internal/SeriesCalculator.java new file mode 100644 index 0000000000..117c2737d2 --- /dev/null +++ b/src/main/java/ch/obermuhlner/math/big/internal/SeriesCalculator.java @@ -0,0 +1,127 @@ +package ch.obermuhlner.math.big.internal; + +import ch.obermuhlner.math.big.BigRational; + +import java.math.BigDecimal; +import java.math.MathContext; +import java.util.ArrayList; +import java.util.List; + +import static java.util.Objects.requireNonNull; + +/** + * Utility class to calculate taylor series efficiently until the maximum error (as defined by the precision in the {@link MathContext} is reached. + * + *

Stores the factors of the taylor series terms so that future calculations will be faster.

+ */ +public abstract class SeriesCalculator { + + private final boolean calculateInPairs; + + private final List factors = new ArrayList<>(); + + /** + * Constructs a {@link SeriesCalculator} that calculates single terms. + */ + protected SeriesCalculator() { + this(false); + } + + /** + * Constructs a {@link SeriesCalculator} with control over whether the sum terms are calculated in pairs. + * + *

Calculation of pairs is useful for taylor series where the terms alternate the sign. + * In these cases it is more efficient to calculate two terms at once check then whether the acceptable error has been reached.

+ * + * @param calculateInPairs true to calculate the terms in pairs, false to calculate single terms + */ + protected SeriesCalculator(boolean calculateInPairs) { + this.calculateInPairs = calculateInPairs; + } + + /** + * Calculates the series for the specified value x and the precision defined in the {@link MathContext}. + * + * @param x the value x + * @param mathContext the {@link MathContext} + * @return the calculated result + */ + public BigDecimal calculate(BigDecimal x, MathContext mathContext) { + BigDecimal acceptableError = BigDecimal.ONE.movePointLeft(mathContext.getPrecision() + 1); + + PowerIterator powerIterator = createPowerIterator(x, mathContext); + + BigDecimal sum = BigDecimal.ZERO; + BigDecimal step; + int i = 0; + do { + BigRational factor; + BigDecimal xToThePower; + + factor = getFactor(i); + xToThePower = powerIterator.getCurrentPower(); + powerIterator.calculateNextPower(); + step = factor.getNumerator().multiply(xToThePower).divide(factor.getDenominator(), mathContext); + i++; + + if (calculateInPairs) { + factor = getFactor(i); + xToThePower = powerIterator.getCurrentPower(); + powerIterator.calculateNextPower(); + BigDecimal step2 = factor.getNumerator().multiply(xToThePower).divide(factor.getDenominator(), mathContext); + step = step.add(step2); + i++; + } + + sum = sum.add(step); + //System.out.println(sum + " " + step); + } while (step.abs().compareTo(acceptableError) > 0); + + return sum.round(mathContext); + } + + /** + * Creates the {@link PowerIterator} used for this series. + * + * @param x the value x + * @param mathContext the {@link MathContext} + * @return the {@link PowerIterator} + */ + protected abstract PowerIterator createPowerIterator(BigDecimal x, MathContext mathContext); + + /** + * Returns the factor of the term with specified index. + * + * All mutable state of this class (and all its subclasses) must be modified in this method. + * This method is synchronized to allow thread-safe usage of this class. + * + * @param index the index (starting with 0) + * @return the factor of the specified term + */ + protected synchronized BigRational getFactor(int index) { + while (factors.size() <= index) { + BigRational factor = getCurrentFactor(); + addFactor(factor); + calculateNextFactor(); + } + return factors.get(index); + } + + private void addFactor(BigRational factor){ + factors.add(requireNonNull(factor, "Factor cannot be null")); + } + + /** + * Returns the factor of the highest term already calculated. + *

When called for the first time will return the factor of the first term (index 0).

+ *

After this call the method {@link #calculateNextFactor()} will be called to prepare for the next term.

+ * + * @return the factor of the highest term + */ + protected abstract BigRational getCurrentFactor(); + + /** + * Calculates the factor of the next term. + */ + protected abstract void calculateNextFactor(); +} diff --git a/src/main/java/ch/obermuhlner/math/big/internal/SinCalculator.java b/src/main/java/ch/obermuhlner/math/big/internal/SinCalculator.java new file mode 100644 index 0000000000..471074fd6b --- /dev/null +++ b/src/main/java/ch/obermuhlner/math/big/internal/SinCalculator.java @@ -0,0 +1,49 @@ +package ch.obermuhlner.math.big.internal; + +import java.math.BigDecimal; +import java.math.MathContext; + +import ch.obermuhlner.math.big.BigRational; + +/** + * Calculates sinus using the Maclaurin series. + * + *

See Wikipedia: Taylorreihe

+ * + *

No argument checking or optimizations are done. + * This implementation is not intended to be called directly.

+ */ +public class SinCalculator extends SeriesCalculator { + + public static final SinCalculator INSTANCE = new SinCalculator(); + + private int n = 0; + private boolean negative = false; + private BigRational factorial2nPlus1 = BigRational.ONE; + + private SinCalculator() { + super(true); + } + + @Override + protected BigRational getCurrentFactor() { + BigRational factor = factorial2nPlus1.reciprocal(); + if (negative) { + factor = factor.negate(); + } + return factor; + } + + @Override + protected void calculateNextFactor() { + n++; + factorial2nPlus1 = factorial2nPlus1.multiply(2 * n); + factorial2nPlus1 = factorial2nPlus1.multiply(2 * n + 1); + negative = !negative; + } + + @Override + protected PowerIterator createPowerIterator(BigDecimal x, MathContext mathContext) { + return new PowerTwoNPlusOneIterator(x, mathContext); + } +} diff --git a/src/main/java/ch/obermuhlner/math/big/internal/SinhCalculator.java b/src/main/java/ch/obermuhlner/math/big/internal/SinhCalculator.java new file mode 100644 index 0000000000..9601735755 --- /dev/null +++ b/src/main/java/ch/obermuhlner/math/big/internal/SinhCalculator.java @@ -0,0 +1,44 @@ +package ch.obermuhlner.math.big.internal; + +import java.math.BigDecimal; +import java.math.MathContext; + +import ch.obermuhlner.math.big.BigRational; + +/** + * Calculates sinus hyperbolicus using the Taylor series. + * + *

See Wikipedia: Taylor series

+ * + *

No argument checking or optimizations are done. + * This implementation is not intended to be called directly.

+ */ +public class SinhCalculator extends SeriesCalculator { + + public static final SinhCalculator INSTANCE = new SinhCalculator(); + + private int n = 0; + + private BigRational factorial2nPlus1 = BigRational.ONE; + + private SinhCalculator() { + super(true); + } + + @Override + protected BigRational getCurrentFactor() { + return factorial2nPlus1.reciprocal(); + } + + @Override + protected void calculateNextFactor() { + n++; + factorial2nPlus1 = factorial2nPlus1.multiply(2 * n); + factorial2nPlus1 = factorial2nPlus1.multiply(2 * n + 1); + } + + @Override + protected PowerIterator createPowerIterator(BigDecimal x, MathContext mathContext) { + return new PowerTwoNPlusOneIterator(x, mathContext); + } +} diff --git a/src/main/java/ch/obermuhlner/math/big/stream/BigDecimalStream.java b/src/main/java/ch/obermuhlner/math/big/stream/BigDecimalStream.java new file mode 100644 index 0000000000..05a45fd846 --- /dev/null +++ b/src/main/java/ch/obermuhlner/math/big/stream/BigDecimalStream.java @@ -0,0 +1,219 @@ +package ch.obermuhlner.math.big.stream; + +import java.math.BigDecimal; +import java.math.MathContext; +import java.util.Comparator; +import java.util.Spliterator; +import java.util.Spliterators.AbstractSpliterator; +import java.util.function.Consumer; +import java.util.stream.Stream; +import java.util.stream.StreamSupport; + +import ch.obermuhlner.math.big.BigDecimalMath; + +/** + * Provides constructor methods for streams of {@link BigDecimal} elements. + */ +public class BigDecimalStream { + + /** + * Returns a sequential ordered {@code Stream} from {@code startInclusive} + * (inclusive) to {@code endExclusive} (exclusive) by an incremental {@code step}. + * + *

An equivalent sequence of increasing values can be produced + * sequentially using a {@code for} loop as follows: + *

for (BigDecimal i = startInclusive; i.compareTo(endExclusive) < 0; i = i.add(step, mathContext)) {
+    // ...
+}
+ * + * @param startInclusive the (inclusive) initial value + * @param endExclusive the exclusive upper bound + * @param step the step between elements + * @param mathContext the {@link MathContext} used for all mathematical operations + * @return a sequential {@code Stream} + */ + public static Stream range(BigDecimal startInclusive, BigDecimal endExclusive, BigDecimal step, MathContext mathContext) { + if (step.signum() == 0) { + throw new IllegalArgumentException("invalid step: 0"); + } + if (endExclusive.subtract(startInclusive).signum() != step.signum()) { + return Stream.empty(); + } + return StreamSupport.stream(new BigDecimalSpliterator(startInclusive, endExclusive, false, step, mathContext), false); + } + + /** + * Returns a sequential ordered {@code Stream} from {@code startInclusive} + * (inclusive) to {@code endExclusive} (exclusive) by an incremental {@code step}. + * + *

The {@code long} arguments are converted using {@link BigDecimal#valueOf(long)}.

+ * + * @param startInclusive the (inclusive) initial value + * @param endExclusive the exclusive upper bound + * @param step the step between elements + * @param mathContext the {@link MathContext} used for all mathematical operations + * @return a sequential {@code Stream} + * @see #range(BigDecimal, BigDecimal, BigDecimal, MathContext) + */ + public static Stream range(long startInclusive, long endExclusive, long step, MathContext mathContext) { + return range(BigDecimal.valueOf(startInclusive), BigDecimal.valueOf(endExclusive), BigDecimal.valueOf(step), mathContext); + } + + /** + * Returns a sequential ordered {@code Stream} from {@code startInclusive} + * (inclusive) to {@code endExclusive} (exclusive) by an incremental {@code step}. + * + *

The {@code double} arguments are converted using {@link BigDecimal#valueOf(double)}.

+ * + * @param startInclusive the (inclusive) initial value + * @param endExclusive the exclusive upper bound + * @param step the step between elements + * @param mathContext the {@link MathContext} used for all mathematical operations + * @return a sequential {@code Stream} + * @see #range(BigDecimal, BigDecimal, BigDecimal, MathContext) + */ + public static Stream range(double startInclusive, double endExclusive, double step, MathContext mathContext) { + return range(BigDecimal.valueOf(startInclusive), BigDecimal.valueOf(endExclusive), BigDecimal.valueOf(step), mathContext); + } + + /** + * Returns a sequential ordered {@code Stream} from {@code startInclusive} + * (inclusive) to {@code endInclusive} (inclusive) by an incremental {@code step}. + * + *

An equivalent sequence of increasing values can be produced + * sequentially using a {@code for} loop as follows: + *

for (BigDecimal i = startInclusive; i.compareTo(endInclusive) <= 0; i = i.add(step, mathContext)) {
+    // ...
+}
+ * + * @param startInclusive the (inclusive) initial value + * @param endInclusive the inclusive upper bound + * @param step the step between elements + * @param mathContext the {@link MathContext} used for all mathematical operations + * @return a sequential {@code Stream} + * @see #range(BigDecimal, BigDecimal, BigDecimal, MathContext) + */ + public static Stream rangeClosed(BigDecimal startInclusive, BigDecimal endInclusive, BigDecimal step, MathContext mathContext) { + if (step.signum() == 0) { + throw new IllegalArgumentException("invalid step: 0"); + } + if (endInclusive.subtract(startInclusive).signum() == -step.signum()) { + return Stream.empty(); + } + return StreamSupport.stream(new BigDecimalSpliterator(startInclusive, endInclusive, true, step, mathContext), false); + } + + /** + * Returns a sequential ordered {@code Stream} from {@code startInclusive} + * (inclusive) to {@code endInclusive} (inclusive) by an incremental {@code step}. + * + *

The {@code long} arguments are converted using {@link BigDecimal#valueOf(long)}.

+ * + * @param startInclusive the (inclusive) initial value + * @param endInclusive the inclusive upper bound + * @param step the step between elements + * @param mathContext the {@link MathContext} used for all mathematical operations + * @return a sequential {@code Stream} + * @see #rangeClosed(BigDecimal, BigDecimal, BigDecimal, MathContext) + */ + public static Stream rangeClosed(long startInclusive, long endInclusive, long step, MathContext mathContext) { + return rangeClosed(BigDecimal.valueOf(startInclusive), BigDecimal.valueOf(endInclusive), BigDecimal.valueOf(step), mathContext); + } + + /** + * Returns a sequential ordered {@code Stream} from {@code startInclusive} + * (inclusive) to {@code endInclusive} (inclusive) by an incremental {@code step}. + * + *

The {@code double} arguments are converted using {@link BigDecimal#valueOf(double)}.

+ * + * @param startInclusive the (inclusive) initial value + * @param endInclusive the inclusive upper bound + * @param step the step between elements + * @param mathContext the {@link MathContext} used for all mathematical operations + * @return a sequential {@code Stream} + * @see #rangeClosed(BigDecimal, BigDecimal, BigDecimal, MathContext) + */ + public static Stream rangeClosed(double startInclusive, double endInclusive, double step, MathContext mathContext) { + return rangeClosed(BigDecimal.valueOf(startInclusive), BigDecimal.valueOf(endInclusive), BigDecimal.valueOf(step), mathContext); + } + + private static class BigDecimalSpliterator extends AbstractSpliterator { + + private BigDecimal value; + private BigDecimal step; + private long count; + private MathContext mathContext; + + public BigDecimalSpliterator(BigDecimal startInclusive, BigDecimal step, long count, MathContext mathContext) { + super(count, + Spliterator.SIZED | Spliterator.SUBSIZED | Spliterator.DISTINCT | Spliterator.IMMUTABLE | Spliterator.NONNULL | Spliterator.ORDERED | Spliterator.SORTED); + + this.value = startInclusive; + this.step = step; + this.count = count; + this.mathContext = mathContext; + } + + public BigDecimalSpliterator(BigDecimal startInclusive, BigDecimal end, boolean inclusive, BigDecimal step, MathContext mathContext) { + this(startInclusive, step, estimatedCount(startInclusive, end, inclusive, step, mathContext), mathContext); + } + + private static long estimatedCount(BigDecimal startInclusive, BigDecimal end, boolean inclusive, BigDecimal step, MathContext mathContext) { + BigDecimal count = end.subtract(startInclusive).divide(step, mathContext); + long result = count.longValue(); + if (BigDecimalMath.fractionalPart(count).signum() != 0) { + result++; + } else { + if (inclusive) { + result++; + } + } + return result; + } + + @Override + public Comparator getComparator() { + if (step.signum() < 0) { + return Comparator.reverseOrder(); + } + return null; + } + + @Override + public boolean tryAdvance(Consumer action) { + if (count == 0) { + return false; + } + + action.accept(value); + value = value.add(step, mathContext); + count--; + return true; + } + + @Override + public void forEachRemaining(Consumer action) { + while (count > 0) { + action.accept(value); + value = value.add(step, mathContext); + count--; + } + } + + @Override + public Spliterator trySplit() { + long firstHalfCount = count / 2; + + if (firstHalfCount == 0) { + return null; + } + + long secondHalfCount = count - firstHalfCount; + + count = firstHalfCount; + BigDecimal startSecondHalf = value.add(step.multiply(new BigDecimal(firstHalfCount), mathContext), mathContext); + + return new BigDecimalSpliterator(startSecondHalf, step, secondHalfCount, mathContext); + } + } +} diff --git a/src/main/java/ch/obermuhlner/math/big/stream/BigFloatStream.java b/src/main/java/ch/obermuhlner/math/big/stream/BigFloatStream.java new file mode 100644 index 0000000000..1c982302a6 --- /dev/null +++ b/src/main/java/ch/obermuhlner/math/big/stream/BigFloatStream.java @@ -0,0 +1,214 @@ +package ch.obermuhlner.math.big.stream; + +import java.util.Comparator; +import java.util.Spliterator; +import java.util.Spliterators.AbstractSpliterator; +import java.util.function.Consumer; +import java.util.stream.Stream; +import java.util.stream.StreamSupport; + +import ch.obermuhlner.math.big.BigFloat; +import ch.obermuhlner.math.big.BigFloat.Context; + +/** + * Provides constructor methods for streams of {@link BigFloat} elements. + */ +public class BigFloatStream { + + /** + * Returns a sequential ordered {@code Stream} from {@code startInclusive} + * (inclusive) to {@code endExclusive} (exclusive) by an incremental {@code step}. + * + *

An equivalent sequence of increasing values can be produced + * sequentially using a {@code for} loop as follows: + *

for (BigFloat i = startInclusive; i.isLessThan(endExclusive); i = i.add(step)) {
+    // ...
+}
+ * + * @param startInclusive the (inclusive) initial value + * @param endExclusive the exclusive upper bound + * @param step the step between elements + * @return a sequential {@code Stream} + */ + public static Stream range(BigFloat startInclusive, BigFloat endExclusive, BigFloat step) { + if (step.isZero()) { + throw new IllegalArgumentException("invalid step: 0"); + } + if (endExclusive.subtract(startInclusive).signum() != step.signum()) { + return Stream.empty(); + } + return StreamSupport.stream(new BigFloatSpliterator(startInclusive, endExclusive, false, step), false); + } + + /** + * Returns a sequential ordered {@code Stream} from {@code startInclusive} + * (inclusive) to {@code endExclusive} (exclusive) by an incremental {@code step}. + * + *

{@link Context#valueOf(long)} is used to convert the {@code long} values.

+ * + * @param startInclusive the (inclusive) initial value + * @param endExclusive the exclusive upper bound + * @param step the step between elements + * @param context the {@link Context} used to convert the {@code long} values + * @return a sequential {@code Stream} + * @see #range(BigFloat, BigFloat, BigFloat) + */ + public static Stream range(long startInclusive, long endExclusive, long step, Context context) { + return range(context.valueOf(startInclusive), context.valueOf(endExclusive), context.valueOf(step)); + } + + /** + * Returns a sequential ordered {@code Stream} from {@code startInclusive} + * (inclusive) to {@code endExclusive} (exclusive) by an incremental {@code step}. + * + *

{@link Context#valueOf(double)} is used to convert the {@code double} values.

+ * + * @param startInclusive the (inclusive) initial value + * @param endExclusive the exclusive upper bound + * @param step the step between elements + * @param context the {@link Context} used to convert the {@code double} values + * @return a sequential {@code Stream} + * @see #range(BigFloat, BigFloat, BigFloat) + */ + public static Stream range(double startInclusive, double endExclusive, double step, Context context) { + return range(context.valueOf(startInclusive), context.valueOf(endExclusive), context.valueOf(step)); + } + + /** + * Returns a sequential ordered {@code Stream} from {@code startInclusive} + * (inclusive) to {@code endInclusive} (inclusive) by an incremental {@code step}. + * + *

An equivalent sequence of increasing values can be produced + * sequentially using a {@code for} loop as follows: + *

for (BigFloat i = startInclusive; i.isLessThanOrEqual(endInclusive); i = i.add(step)) {
+    //...
+}
+
+ * + * @param startInclusive the (inclusive) initial value + * @param endInclusive the inclusive upper bound + * @param step the step between elements + * @return a sequential {@code Stream} + */ + public static Stream rangeClosed(BigFloat startInclusive, BigFloat endInclusive, BigFloat step) { + if (step.isZero()) { + throw new IllegalArgumentException("invalid step: 0"); + } + if (endInclusive.subtract(startInclusive).signum() == -step.signum()) { + return Stream.empty(); + } + return StreamSupport.stream(new BigFloatSpliterator(startInclusive, endInclusive, true, step), false); + } + + /** + * Returns a sequential ordered {@code Stream} from {@code startInclusive} + * (inclusive) to {@code endInclusive} (inclusive) by an incremental {@code step}. + * + *

{@link Context#valueOf(long)} is used to convert the {@code long} values.

+ * + * @param startInclusive the (inclusive) initial value + * @param endInclusive the inclusive upper bound + * @param step the step between elements + * @param context the {@link Context} used to convert the {@code long} values + * @return a sequential {@code Stream} + * @see #rangeClosed(BigFloat, BigFloat, BigFloat) + */ + public static Stream rangeClosed(long startInclusive, long endInclusive, long step, Context context) { + return rangeClosed(context.valueOf(startInclusive), context.valueOf(endInclusive), context.valueOf(step)); + } + + /** + * Returns a sequential ordered {@code Stream} from {@code startInclusive} + * (inclusive) to {@code endInclusive} (inclusive) by an incremental {@code step}. + * + *

{@link Context#valueOf(double)} is used to convert the {@code double} values.

+ * + * @param startInclusive the (inclusive) initial value + * @param endInclusive the inclusive upper bound + * @param step the step between elements + * @param context the {@link Context} used to convert the {@code double} values + * @return a sequential {@code Stream} + * @see #rangeClosed(BigFloat, BigFloat, BigFloat) + */ + public static Stream rangeClosed(double startInclusive, double endInclusive, double step, Context context) { + return rangeClosed(context.valueOf(startInclusive), context.valueOf(endInclusive), context.valueOf(step)); + } + + private static class BigFloatSpliterator extends AbstractSpliterator { + + private BigFloat value; + private BigFloat step; + private long count; + + public BigFloatSpliterator(BigFloat startInclusive, BigFloat step, long count) { + super(count, + Spliterator.SIZED | Spliterator.SUBSIZED | Spliterator.DISTINCT | Spliterator.IMMUTABLE | Spliterator.NONNULL | Spliterator.ORDERED | Spliterator.SORTED); + + this.value = startInclusive; + this.step = step; + this.count = count; + } + + public BigFloatSpliterator(BigFloat startInclusive, BigFloat end, boolean inclusive, BigFloat step) { + this(startInclusive, step, estimatedCount(startInclusive, end, inclusive, step)); + } + + private static long estimatedCount(BigFloat startInclusive, BigFloat end, boolean inclusive, BigFloat step) { + BigFloat count = end.subtract(startInclusive).divide(step); + long result = count.toLong(); + if (count.getFractionalPart().signum() != 0) { + result++; + } else { + if (inclusive) { + result++; + } + } + return result; + } + + @Override + public Comparator getComparator() { + if (step.signum() < 0) { + return Comparator.reverseOrder(); + } + return null; + } + + @Override + public boolean tryAdvance(Consumer action) { + if (count == 0) { + return false; + } + + action.accept(value); + value = value.add(step); + count--; + return true; + } + + @Override + public void forEachRemaining(Consumer action) { + while (count > 0) { + action.accept(value); + value = value.add(step); + count--; + } + } + + @Override + public Spliterator trySplit() { + long firstHalfCount = count / 2; + + if (firstHalfCount == 0) { + return null; + } + + long secondHalfCount = count - firstHalfCount; + + count = firstHalfCount; + BigFloat startSecondHalf = value.add(step.multiply(firstHalfCount)); + + return new BigFloatSpliterator(startSecondHalf, step, secondHalfCount); + } + } +} diff --git a/src/main/java/com/github/technus/tectech/compatibility/gtpp/GtppAtomLoader.java b/src/main/java/com/github/technus/tectech/compatibility/gtpp/GtppAtomLoader.java index 333747d632..32db2caed9 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/gtpp/GtppAtomLoader.java +++ b/src/main/java/com/github/technus/tectech/compatibility/gtpp/GtppAtomLoader.java @@ -74,18 +74,18 @@ public class GtppAtomLoader implements Runnable{ TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(75), AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("RHENIUM"),1); TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getFirstStableIsotope(81), AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("THALLIUM"),1); - TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(84),AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("POLONIUM"),1); - TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(85),AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("ASTATINE"),1); - TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(87),AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("FRANCIUM"),1); - TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(88),AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("RADIUM"),1); - TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(89),AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("ACTINIUM"),1); - TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(91),AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("PROTACTINIUM"),1); - TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(93),AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("NEPTUNIUM"),1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(84), AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("POLONIUM"),1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(85), AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("ASTATINE"),1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(87), AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("FRANCIUM"),1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(88), AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("RADIUM"),1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(89), AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("ACTINIUM"),1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(91), AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("PROTACTINIUM"),1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(93), AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("NEPTUNIUM"),1); - TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(96),AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("CURIUM"),1); - TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(97),AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("BERKELIUM"),1); - TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(98),AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("CALIFORNIUM"),1); - TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(99),AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("EINSTEINIUM"),1); - TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(100),AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("FERMIUM"),1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(96), AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("CURIUM"),1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(97), AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("BERKELIUM"),1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(98), AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("CALIFORNIUM"),1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(99), AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("EINSTEINIUM"),1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(100), AVOGADRO_CONSTANT_144),OrePrefixes.dust, getUnlocalizedName("FERMIUM"),1); } } diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalInstanceStackMap.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalInstanceStackMap.java index a712dc2c39..ad22f5123b 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalInstanceStackMap.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalInstanceStackMap.java @@ -9,6 +9,8 @@ import net.minecraft.util.EnumChatFormatting; import java.util.*; +import static com.github.technus.tectech.mechanics.elementalMatter.core.transformations.bTransformationInfo.AVOGADRO_CONSTANT; +import static com.github.technus.tectech.mechanics.elementalMatter.core.transformations.bTransformationInfo.AVOGADRO_CONSTANT_UNCERTAINTY; import static com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.cPrimitiveDefinition.nbtE__; import static com.github.technus.tectech.util.DoubleCount.add; import static com.github.technus.tectech.util.DoubleCount.sub; @@ -331,12 +333,12 @@ public final class cElementalInstanceStackMap implements Comparable entry.getValue().amount < 1); + map.entrySet().removeIf(entry -> entry.getValue().amount < AVOGADRO_CONSTANT_UNCERTAINTY); } } diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/stacks/cElementalInstanceStack.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/stacks/cElementalInstanceStack.java index 2a441150f7..2aa6bb9711 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/stacks/cElementalInstanceStack.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/stacks/cElementalInstanceStack.java @@ -1,5 +1,6 @@ package com.github.technus.tectech.mechanics.elementalMatter.core.stacks; +import ch.obermuhlner.math.big.BigFloat; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalDecay; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalDefinitionStackMap; @@ -11,10 +12,12 @@ import net.minecraft.nbt.NBTTagCompound; import java.util.ArrayList; +import static com.github.technus.tectech.mechanics.elementalMatter.core.transformations.bTransformationInfo.AVOGADRO_CONSTANT; import static com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.cPrimitiveDefinition.null__; import static com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.eBosonDefinition.deadEnd; import static com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_scanner.*; import static com.github.technus.tectech.util.DoubleCount.*; +import static java.lang.Math.min; import static java.lang.Math.ulp; /** @@ -189,9 +192,10 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { } if(definition.usesMultipleDecayCalls(energy)){ double amountTemp=amount; - long decayCnt=(long) Math.min(Math.max(amount/DECAY_CALL_PER,MIN_MULTIPLE_DECAY_CALLS),MAX_MULTIPLE_DECAY_CALLS); + long decayCnt=(long) min(Math.max(amount/DECAY_CALL_PER,MIN_MULTIPLE_DECAY_CALLS),MAX_MULTIPLE_DECAY_CALLS); double amountPer= div(amount,decayCnt); amount= sub(amount,amountPer*(--decayCnt)); + //todo decay mechanics should handle splitting! cElementalInstanceStackMap output=decayMechanics(lifeTimeMult,apparentAge,newEnergyLevel); if(output==null){ amount=amountTemp; @@ -233,8 +237,27 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { //Use to get direct decay output providing correct decay array private cElementalInstanceStackMap exponentialDecayCompute(cElementalDecay[] decays, double lifeTimeMult, double newProductsAge, long newEnergyLevel) { + if(lifeTime<1){ + throw new ArithmeticException("Value would be too big..."); + } double decayInverseRatio=Math.pow(2D,1D/* 1 second *//lifeTime); - double newAmount= div(amount,decayInverseRatio+ulp(decayInverseRatio)); + double newAmount,decayedAmount; + if(decayInverseRatio>0.99999999D){ + //todo cache this... + BigFloat dir=BigFloat.context(50).valueOf(2).pow(1D/* 1 second *//lifeTime); + BigFloat na=BigFloat.context(50).valueOf(amount).divide(dir); + newAmount=na.toDouble(); + if(newAmount>=amount) { + decayedAmount=BigFloat.context(50).valueOf(amount).subtract(na).toDouble(); + newAmount=amount-ulp(amount); + }else { + decayedAmount=amount-newAmount; + } + }else{ + newAmount= div(amount,decayInverseRatio); + decayedAmount=amount-newAmount; + } + //if(definition.getSymbol().startsWith("U ")) { // System.out.println("newAmount = " + newAmount); // System.out.println("amountRemaining = " + amountRemaining); @@ -245,18 +268,20 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { // } // } //} - //if(newAmount==amount) {//no longer needed - // return null;//nothing decayed - //} else if(newAmount<=0) {//no longer needed - // return decayCompute(decays, lifeTimeMult, newProductsAge, newEnergyLevel); - //}//no longer needed + if(newAmount==amount) { + return null;//nothing decayed + } else if(newAmount<1) { + return decayCompute(decays, lifeTimeMult, newProductsAge, newEnergyLevel); + } //split to non decaying and decaying part double amount=this.amount; - this.amount= sub(this.amount,newAmount); + this.amount= decayedAmount; cElementalInstanceStackMap products=decayCompute(decays,lifeTimeMult,newProductsAge,newEnergyLevel); this.amount=newAmount; - products.putUnify(clone()); + if(products!=null){ + products.putUnify(clone()); + } this.amount=amount; return products; } @@ -411,7 +436,7 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { if(instance.energy>maxEnergy){ maxEnergy=instance.energy; } - lifeTimeMul = Math.min(lifeTimeMul, instance.lifeTimeMult); + lifeTimeMul = min(lifeTimeMul, instance.lifeTimeMult); age = Math.max(age, instance.age); } } @@ -421,12 +446,12 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { } double wholeParts=Math.floor(energyTotal); - energyTotal=Math.min(energyTotal-wholeParts,1D)+(wholeParts>=0?-0.11709966304863834D:0.11709966304863834D); + energyTotal= min(energyTotal-wholeParts,1D)+(wholeParts>=0?-0.11709966304863834D:0.11709966304863834D); long energy=(long) wholeParts + ((energyTotal > TecTech.RANDOM.nextDouble()) ? 1 : 0); if(energy*energyTotal<0){ energy=0; } - setEnergy(Math.min(maxEnergy,energy)); + setEnergy(min(maxEnergy,energy)); return this; } @@ -468,7 +493,7 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { lines.add("ENERGY = " + energy); } if(Util.areBitsSet(SCAN_GET_AMOUNT,capabilities)) { - lines.add("AMOUNT = " + amount); + lines.add("AMOUNT = " + amount/ AVOGADRO_CONSTANT +" mol"); } scanContents(lines,definition.getSubParticles(),1,detailsOnDepthLevels); } @@ -537,6 +562,6 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { @Override public String toString() { - return definition.getName()+ '\n' + definition.getSymbol() + '\n' + amount + '\n' + getMass(); + return definition.toString() + '\n' + amount/ AVOGADRO_CONSTANT + " mol\n" + getMass(); } } diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/templates/cElementalDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/templates/cElementalDefinition.java index 0061550ace..51025148a7 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/templates/cElementalDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/templates/cElementalDefinition.java @@ -127,4 +127,9 @@ public abstract class cElementalDefinition extends iElementalDefinition { } return hash; } + + @Override + public String toString() { + return getName()+ '\n' + getSymbol(); + } } diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/bTransformationInfo.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/bTransformationInfo.java index 24ae8d0481..964baff155 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/bTransformationInfo.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/transformations/bTransformationInfo.java @@ -17,8 +17,9 @@ import static com.github.technus.tectech.thing.item.DebugElementalInstanceContai * Created by Tec on 26.05.2017. */ public class bTransformationInfo { - public static final double AVOGADRO_CONSTANT =6.02214076e23D; - public static final double AVOGADRO_CONSTANT_144 =AVOGADRO_CONSTANT*144D; + public static final double AVOGADRO_CONSTANT =6.02214076e23D;//CUBE LOL XD + public static final double AVOGADRO_CONSTANT_UNCERTAINTY =1/6.02214076e23D;//CUBE LOL XD + public static final double AVOGADRO_CONSTANT_144 = AVOGADRO_CONSTANT *144D; public static final HashMap fluidQuantization=new HashMap<>(32); public static final HashMap itemQuantization=new HashMap<>(32); diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dAtomDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dAtomDefinition.java index b1801b9b25..b990adef15 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dAtomDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dAtomDefinition.java @@ -1564,16 +1564,16 @@ public final class dAtomDefinition extends cElementalDefinition { TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(83), AVOGADRO_CONSTANT_144), dust, Materials.Bismuth,1); //transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(84),AVOGADRO_CONSTANT_144),OrePrefixes.dust, Materials.Polonium,1); //transformation.addFluid(new cElementalDefinitionStack(getBestUnstableIsotope(85),AVOGADRO_CONSTANT_144),Materials.Astatine.mPlasma.getID(), 144); - TRANSFORMATION_INFO.addFluid(new cElementalDefinitionStack(getBestUnstableIsotope(86),AVOGADRO_CONSTANT_144),Materials.Radon.mGas, 144); + TRANSFORMATION_INFO.addFluid(new cElementalDefinitionStack(getBestUnstableIsotope(86), AVOGADRO_CONSTANT_144),Materials.Radon.mGas, 144); //transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(87),AVOGADRO_CONSTANT_144),OrePrefixes.dust, Materials.Francium,1); //transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(88),AVOGADRO_CONSTANT_144),OrePrefixes.dust, Materials.Radium,1); //transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(89),AVOGADRO_CONSTANT_144),OrePrefixes.dust, Materials.Actinium,1); - TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(90),AVOGADRO_CONSTANT_144), dust, Materials.Thorium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(90), AVOGADRO_CONSTANT_144), dust, Materials.Thorium,1); //transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(91),AVOGADRO_CONSTANT_144),OrePrefixes.dust, Materials.Protactinium,1); ////transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(92),AVOGADRO_CONSTANT_144), dust, Materials.Uranium,1); //transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(93),AVOGADRO_CONSTANT_144),OrePrefixes.dust, Materials.Neptunium,1); ////transformation.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(94),AVOGADRO_CONSTANT_144), dust, Materials.Plutonium,1); - TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(95),AVOGADRO_CONSTANT_144), dust, Materials.Americium,1); + TRANSFORMATION_INFO.addOredict(new cElementalDefinitionStack(getBestUnstableIsotope(95), AVOGADRO_CONSTANT_144), dust, Materials.Americium,1); try { dAtomDefinition temp; diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dHadronDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dHadronDefinition.java index 6b5f41f1c1..6b9e56bbf1 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dHadronDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dHadronDefinition.java @@ -465,7 +465,7 @@ public final class dHadronDefinition extends cElementalDefinition {//TODO Optimi public static void setTransformations(){ //Added to atom map, but should be in its own - cElementalDefinitionStack neutrons=new cElementalDefinitionStack(hadron_n, 1000*AVOGADRO_CONSTANT_144); + cElementalDefinitionStack neutrons=new cElementalDefinitionStack(hadron_n, 1000* AVOGADRO_CONSTANT_144); TRANSFORMATION_INFO.oredictDequantization.put(neutrons.definition,new aOredictDequantizationInfo(neutrons, dust, Materials.Neutronium,1)); bTransformationInfo.oredictQuantization.put( OreDictionary.getOreID(OrePrefixes.ingotHot.name()+Materials.Neutronium.mName), diff --git a/src/main/java/com/github/technus/tectech/thing/item/DebugElementalInstanceContainer_EM.java b/src/main/java/com/github/technus/tectech/thing/item/DebugElementalInstanceContainer_EM.java index 8e9266f060..6850b24e0f 100644 --- a/src/main/java/com/github/technus/tectech/thing/item/DebugElementalInstanceContainer_EM.java +++ b/src/main/java/com/github/technus/tectech/thing/item/DebugElementalInstanceContainer_EM.java @@ -142,10 +142,10 @@ public final class DebugElementalInstanceContainer_EM extends Item implements IE ItemStack that = new ItemStack(this, 1); that.setTagCompound(new NBTTagCompound()); list.add(that); - for(iElementalDefinition defintion: STACKS_REGISTERED){ - list.add(setContent(new ItemStack(this).setStackDisplayName(defintion.getName()+" x"+AVOGADRO_CONSTANT),new cElementalInstanceStackMap(new cElementalInstanceStack(defintion,AVOGADRO_CONSTANT)))); - list.add(setContent(new ItemStack(this).setStackDisplayName(defintion.getName()+" x"+AVOGADRO_CONSTANT_144),new cElementalInstanceStackMap(new cElementalInstanceStack(defintion,AVOGADRO_CONSTANT_144)))); - list.add(setContent(new ItemStack(this).setStackDisplayName(defintion.getName()+" x"+AVOGADRO_CONSTANT*1000),new cElementalInstanceStackMap(new cElementalInstanceStack(defintion,AVOGADRO_CONSTANT*1000)))); + for(iElementalDefinition definition: STACKS_REGISTERED){ + list.add(setContent(new ItemStack(this).setStackDisplayName(definition.getName()+" 1 mol"),new cElementalInstanceStackMap(new cElementalInstanceStack(definition, AVOGADRO_CONSTANT)))); + list.add(setContent(new ItemStack(this).setStackDisplayName(definition.getName()+" 144 mol"),new cElementalInstanceStackMap(new cElementalInstanceStack(definition, AVOGADRO_CONSTANT_144)))); + list.add(setContent(new ItemStack(this).setStackDisplayName(definition.getName()+" 1000 mol"),new cElementalInstanceStackMap(new cElementalInstanceStack(definition, AVOGADRO_CONSTANT *1000)))); } } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ElementalContainer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ElementalContainer.java index 139b203551..10bd099366 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ElementalContainer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ElementalContainer.java @@ -208,7 +208,7 @@ public abstract class GT_MetaTileEntity_Hatch_ElementalContainer extends GT_Meta } public int getMaxStacksCount() { - return mTier * 16; + return mTier * 128; } public double getMaxStackSize() { diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java index 825b07f289..e0398a8fcb 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java @@ -368,7 +368,7 @@ public class GT_MetaTileEntity_EM_collider extends GT_MetaTileEntity_MultiblockB } public static void setValues(int heliumPlasmaValue) { - double MASS_TO_EU_PARTIAL = heliumPlasmaValue / (1.75893000478707E07*AVOGADRO_CONSTANT);//mass diff + double MASS_TO_EU_PARTIAL = heliumPlasmaValue / (1.75893000478707E07* AVOGADRO_CONSTANT);//mass diff MASS_TO_EU_INSTANT = MASS_TO_EU_PARTIAL * 20; STARTUP_COST = -heliumPlasmaValue * 10000; KEEPUP_COST = -heliumPlasmaValue; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java index a46c407325..37e121dd26 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java @@ -50,7 +50,7 @@ public class GT_MetaTileEntity_EM_decay extends GT_MetaTileEntity_MultiblockBase private static Textures.BlockIcons.CustomIcon ScreenOFF; private static Textures.BlockIcons.CustomIcon ScreenON; - public static final double URANIUM_INGOT_MASS_DIFF = 1.6114516E10*AVOGADRO_CONSTANT; + public static final double URANIUM_INGOT_MASS_DIFF = 1.6114516E10* AVOGADRO_CONSTANT; private static final double URANIUM_MASS_TO_EU_PARTIAL = ConfigUtil.getFloat(MainConfig.get(), "balance/energy/generator/nuclear") * 3_000_000.0 / URANIUM_INGOT_MASS_DIFF; public static final double URANIUM_MASS_TO_EU_INSTANT = URANIUM_MASS_TO_EU_PARTIAL * 20; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_ElectromagneticSeparator.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_ElectromagneticSeparator.java index 558ae03e67..40e2942bab 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_ElectromagneticSeparator.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/Behaviour_ElectromagneticSeparator.java @@ -88,7 +88,7 @@ public class Behaviour_ElectromagneticSeparator implements GT_MetaTileEntity_EM_ public Behaviour_ElectromagneticSeparator(int desiredTier){ tier=(byte) desiredTier; ticks =Math.max(20,(1<<(12-desiredTier))*20); - maxCapacity= dAtomDefinition.getSomethingHeavy().getMass()*(2< Date: Sun, 19 Jul 2020 08:26:15 +0100 Subject: Implement Tesla Global List And then when I do it with lists the way Bart suggested it, I have Tec tell me to rewrite everything using interfaces --- .../technus/tectech/loader/TecTechConfig.java | 3 - .../tectech/thing/cover/GT_Cover_TM_TeslaCoil.java | 1 - .../multi/GT_MetaTileEntity_TM_teslaCoil.java | 310 +++++++++------------ .../single/GT_MetaTileEntity_TeslaCoil.java | 56 ++-- 4 files changed, 145 insertions(+), 225 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/loader/TecTechConfig.java b/src/main/java/com/github/technus/tectech/loader/TecTechConfig.java index 030be65f3b..ae9da94b02 100644 --- a/src/main/java/com/github/technus/tectech/loader/TecTechConfig.java +++ b/src/main/java/com/github/technus/tectech/loader/TecTechConfig.java @@ -28,7 +28,6 @@ public class TecTechConfig extends ConfigManager { public int TESLA_MULTI_LOSS_PER_BLOCK_T1; public int TESLA_MULTI_LOSS_PER_BLOCK_T2; public float TESLA_MULTI_OVERDRIVE_LOSS_FACTOR; - public int TESLA_MULTI_SCAN_RANGE;//TODO delete public boolean TESLA_MULTI_GAS_OUTPUT; public int TESLA_SINGLE_LOSS_PER_BLOCK; public float TESLA_SINGLE_OVERDRIVE_LOSS_FACTOR; @@ -54,7 +53,6 @@ public class TecTechConfig extends ConfigManager { TESLA_MULTI_LOSS_PER_BLOCK_T1 = 1; TESLA_MULTI_LOSS_PER_BLOCK_T2 = 1; TESLA_MULTI_OVERDRIVE_LOSS_FACTOR = 0.25F; - TESLA_MULTI_SCAN_RANGE = 40; TESLA_MULTI_GAS_OUTPUT = false; TESLA_SINGLE_LOSS_PER_BLOCK = 1; TESLA_SINGLE_OVERDRIVE_LOSS_FACTOR = 0.25F; @@ -93,7 +91,6 @@ public class TecTechConfig extends ConfigManager { TESLA_MULTI_LOSS_PER_BLOCK_T1 = _mainConfig.getInt("TeslaMultiLossPerBlockT1", "Balance Tweaks", TESLA_MULTI_LOSS_PER_BLOCK_T1, 0, Integer.MAX_VALUE, "Tesla Tower power transmission loss per block per amp using helium or nitrogen plasma"); TESLA_MULTI_LOSS_PER_BLOCK_T2 = _mainConfig.getInt("TeslaMultiLossPerBlockT1", "Balance Tweaks", TESLA_MULTI_LOSS_PER_BLOCK_T2, 0, Integer.MAX_VALUE, "Tesla Tower power transmission loss per block per amp using radon plasma"); TESLA_MULTI_OVERDRIVE_LOSS_FACTOR = _mainConfig.getFloat("TeslaMultiOverdriveLossFactor", "Balance Tweaks", TESLA_MULTI_OVERDRIVE_LOSS_FACTOR, 0, 1, "Additional Tesla Tower power loss per amp as a factor of the tier voltage"); - TESLA_MULTI_SCAN_RANGE = _mainConfig.getInt("TeslaMultiScanRange", "Balance Tweaks", TESLA_MULTI_SCAN_RANGE, 4, 256, "The horizontal radius scanned by the Tesla Tower"); TESLA_MULTI_GAS_OUTPUT = _mainConfig.getBoolean("TeslaMultiMoltenOutput", "Balance Tweaks", TESLA_MULTI_GAS_OUTPUT, "Set to true to enable outputting plasmas as gasses from the tesla tower with a 1:1 ratio"); TESLA_SINGLE_LOSS_PER_BLOCK = _mainConfig.getInt("TeslaSingleLossPerBlock", "Balance Tweaks", TESLA_SINGLE_LOSS_PER_BLOCK, 0, Integer.MAX_VALUE, "Tesla Transceiver power transmission loss per block per amp"); TESLA_SINGLE_OVERDRIVE_LOSS_FACTOR = _mainConfig.getFloat("TeslaSingleOverdriveLossFactor", "Balance Tweaks", TESLA_SINGLE_OVERDRIVE_LOSS_FACTOR, 0, 1, "Additional Tesla Transceiver power loss per amp as a factor of the tier voltage"); diff --git a/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil.java b/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil.java index 8be875ff4f..6442ba51b6 100644 --- a/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil.java @@ -1,7 +1,6 @@ package com.github.technus.tectech.thing.cover; import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.util.GT_CoverBehavior; import gregtech.api.util.GT_Utility; import net.minecraft.entity.player.EntityPlayer; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java index 7d12302477..eca70ca63f 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java @@ -48,8 +48,7 @@ import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStat import static com.github.technus.tectech.util.CommonValues.V; import static com.github.technus.tectech.util.Util.entriesSortedByValues; import static gregtech.api.enums.GT_Values.E; -import static java.lang.Math.max; -import static java.lang.Math.min; +import static java.lang.Math.*; import static net.minecraft.util.StatCollector.translateToLocal; public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_MultiblockBase_EM implements IConstructable { @@ -61,7 +60,6 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock private static final int[] plasmaTierLoss = new int[]{TecTech.configTecTech.TESLA_MULTI_LOSS_PER_BLOCK_T0, TecTech.configTecTech.TESLA_MULTI_LOSS_PER_BLOCK_T1, TecTech.configTecTech.TESLA_MULTI_LOSS_PER_BLOCK_T2}; private static final float overDriveLoss = TecTech.configTecTech.TESLA_MULTI_OVERDRIVE_LOSS_FACTOR;//Default is 0.25F; - private static final int scanRangeXZ = TecTech.configTecTech.TESLA_MULTI_SCAN_RANGE;//Default is 40 private static final boolean doFluidOutput = TecTech.configTecTech.TESLA_MULTI_GAS_OUTPUT; //Default is false //Face icons @@ -73,12 +71,12 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock private FluidStack[] mOutputFluidsQueue; //Used to buffer the fluid outputs, so the tesla takes a second to 'cool' any plasma it would output as a gas - public static final HashSet teslaNodeSet = new HashSet<>(); //Targets for power transmission //TODO Make this fill more efficently and globally + public static final HashSet teslaNodeSet = new HashSet<>(); //Targets for power transmission private final HashSet sparkList = new HashSet<>(); //Thaumcraft lighting coordinate pairs, so we can send them in bursts and save on lag - private final Map eTeslaMap = new HashMap<>(); //Targets for power transmission + private Map teslaNodeMap = new HashMap<>(); //Targets for power transmission private final ArrayList eCapacitorHatches = new ArrayList<>(); //Capacitor hatches which determine the max voltage tier and count of amps - private int scanTime = 0; //Scan timer used for tesla search intervals //TODO Replace with something that fetches from a global map + private int sortTime = 0; //Scan timer used for tesla search intervals private long energyCapacity = 0; //Total energy storage limited by capacitors private long outputVoltageMax = 0; //Tesla voltage output limited by capacitors @@ -88,11 +86,8 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock //Prevents unnecessary offset calculation, saving on lag private byte oldRotation = -1; private byte oldOrientation = -1; - - //Coordinate Arrays - private final Vec3Impl[] scanPosOffsets = new Vec3Impl[10]; - private Vec3Impl posZap = Vec3Impl.NULL_VECTOR;//Location of the bottom middle of the tower, used as the power transfer origin - public Vec3Impl posTop = Vec3Impl.NULL_VECTOR;//Location of the center of the sphere on top of the tower, used as theThaumcraft lightning origin + //Location of the center of the sphere on top of the tower, used as the Thaumcraft lightning and origin + public Vec3Impl posTop = Vec3Impl.NULL_VECTOR; //endregion //region structure @@ -128,8 +123,8 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock //endregion //region parameters - protected Parameters.Group.ParameterIn popogaSetting, histLowSetting, histHighSetting, transferRadiusTowerSetting, transferRadiusTransceiverSetting, transferRadiusCoverUltimateSetting, outputVoltageSetting, outputCurrentSetting, scanTimeMinSetting, overDriveSetting; - protected Parameters.Group.ParameterOut popogaDisplay, transferRadiusTowerDisplay, transferRadiusTransceiverDisplay, transferRadiusCoverUltimateDisplay, outputVoltageDisplay, outputCurrentDisplay, energyCapacityDisplay, energyStoredDisplay, energyFractionDisplay, scanTimeDisplay; + protected Parameters.Group.ParameterIn popogaSetting, histLowSetting, histHighSetting, transferRadiusTowerSetting, transferRadiusTransceiverSetting, transferRadiusCoverUltimateSetting, outputVoltageSetting, outputCurrentSetting, sortTimeMinSetting, overDriveSetting; + protected Parameters.Group.ParameterOut popogaDisplay, transferRadiusTowerDisplay, transferRadiusTransceiverDisplay, transferRadiusCoverUltimateDisplay, outputVoltageDisplay, outputCurrentDisplay, energyCapacityDisplay, energyStoredDisplay, energyFractionDisplay, sortTimeDisplay; private static final INameFunction HYSTERESIS_LOW_SETTING_NAME = (base, p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgi.0");//Hysteresis low setting private static final INameFunction HYSTERESIS_HIGH_SETTING_NAME = (base, p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgi.1");//Hysteresis high setting @@ -294,37 +289,6 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock return 1F * plasmaBoost; } - private void scanForTransmissionTargets(Vec3Impl coordsMin, Vec3Impl coordsMax) { - //This makes sure the minimums are actually smaller than the maximums - int xMin = min(coordsMin.get0(), coordsMax.get0()); - int yMin = min(coordsMin.get1(), coordsMax.get1()); - int zMin = min(coordsMin.get2(), coordsMax.get2()); - //And vice versa - int xMax = max(coordsMin.get0(), coordsMax.get0()); - int yMax = max(coordsMin.get1(), coordsMax.get1()); - int zMax = max(coordsMin.get2(), coordsMax.get2()); - - for (int xPos = xMin; xPos <= xMax; xPos++) { - for (int yPos = yMin; yPos <= yMax; yPos++) { - for (int zPos = zMin; zPos <= zMax; zPos++) { - if (xPos == 0 && yPos == 0 && zPos == 0) { - continue; - } - IGregTechTileEntity node = getBaseMetaTileEntity().getIGregTechTileEntityOffset(xPos, yPos, zPos); - if (node != null) { - IMetaTileEntity nodeInside = node.getMetaTileEntity(); - if (nodeInside instanceof GT_MetaTileEntity_TeslaCoil || - nodeInside instanceof GT_MetaTileEntity_TM_teslaCoil && node.isActive() || - (node.getCoverBehaviorAtSide((byte) 1) instanceof GT_Cover_TM_TeslaCoil)) { - eTeslaMap.put(node, (int) Math.ceil(Math.sqrt(Math.pow(xPos, 2) + Math.pow(yPos, 2) + Math.pow(zPos, 2)))); - } - } - } - } - } - - } - private void thaumLightning(IGregTechTileEntity mte, IGregTechTileEntity node) { byte xR = (byte) (node.getXCoord() - posTop.get0()); byte yR = (byte) (node.getYCoord() - posTop.get1()); @@ -405,26 +369,10 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock oldOrientation = iGregTechTileEntity.getFrontFacing(); //Calculate coordinates of the middle bottom - posZap = getExtendedFacing().getWorldOffset(new Vec3Impl(0, 0, 2)).add(getBaseMetaTileEntity()); + posTop = getExtendedFacing().getWorldOffset(new Vec3Impl(0, 0, 2)).add(getBaseMetaTileEntity()); //Calculate coordinates of the top sphere posTop = getExtendedFacing().getWorldOffset(new Vec3Impl(0, -14, 2)).add(getBaseMetaTileEntity()); - - //Calculate offsets for scanning - scanPosOffsets[0] = getExtendedFacing().getWorldOffset(new Vec3Impl(scanRangeXZ, 0, scanRangeXZ + 3)); - scanPosOffsets[1] = getExtendedFacing().getWorldOffset(new Vec3Impl(-1 * scanRangeXZ, -4, -1 * scanRangeXZ + 3)); - - scanPosOffsets[2] = getExtendedFacing().getWorldOffset(new Vec3Impl(scanRangeXZ, -5, scanRangeXZ + 3)); - scanPosOffsets[3] = getExtendedFacing().getWorldOffset(new Vec3Impl(-1 * scanRangeXZ, -8, -1 * scanRangeXZ + 3)); - - scanPosOffsets[4] = getExtendedFacing().getWorldOffset(new Vec3Impl(scanRangeXZ, -9, scanRangeXZ + 3)); - scanPosOffsets[5] = getExtendedFacing().getWorldOffset(new Vec3Impl(-1 * scanRangeXZ, -12, -1 * scanRangeXZ + 3)); - - scanPosOffsets[6] = getExtendedFacing().getWorldOffset(new Vec3Impl(scanRangeXZ, -13, scanRangeXZ + 3)); - scanPosOffsets[7] = getExtendedFacing().getWorldOffset(new Vec3Impl(-1 * scanRangeXZ, -16, -1 * scanRangeXZ + 3)); - - scanPosOffsets[8] = getExtendedFacing().getWorldOffset(new Vec3Impl(scanRangeXZ, -17, scanRangeXZ + 3)); - scanPosOffsets[9] = getExtendedFacing().getWorldOffset(new Vec3Impl(-1 * scanRangeXZ, -20, -1 * scanRangeXZ + 3)); } return true; } @@ -442,7 +390,7 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock !transferRadiusCoverUltimateSetting.getStatus(false).isOk || !outputVoltageSetting.getStatus(false).isOk || !outputCurrentSetting.getStatus(false).isOk || - !scanTimeMinSetting.getStatus(false).isOk || + !sortTimeMinSetting.getStatus(false).isOk || !overDriveSetting.getStatus(false).isOk ) return false; @@ -558,7 +506,7 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock popogaSetting = hatch_5.makeInParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); popogaSetting = hatch_6.makeInParameter(0, 0, POPOGA_NAME, POPOGA_STATUS); popogaSetting = hatch_6.makeInParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); - scanTimeMinSetting = hatch_7.makeInParameter(0, 100, SCAN_TIME_MIN_SETTING_NAME, SCAN_TIME_MIN_STATUS); + sortTimeMinSetting = hatch_7.makeInParameter(0, 100, SCAN_TIME_MIN_SETTING_NAME, SCAN_TIME_MIN_STATUS); popogaSetting = hatch_7.makeInParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); overDriveSetting = hatch_8.makeInParameter(0, 0, OVERDRIVE_SETTING_NAME, OVERDRIVE_STATUS); popogaSetting = hatch_8.makeInParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); @@ -579,7 +527,7 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock energyCapacityDisplay = hatch_5.makeOutParameter(1, 0, ENERGY_CAPACITY_DISPLAY_NAME, ENERGY_STATUS); energyStoredDisplay = hatch_6.makeOutParameter(0, 0, ENERGY_STORED_DISPLAY_NAME, ENERGY_STATUS); energyFractionDisplay = hatch_6.makeOutParameter(1, 0, ENERGY_FRACTION_DISPLAY_NAME, ENERGY_STATUS); - scanTimeDisplay = hatch_7.makeOutParameter(0, 0, SCAN_TIME_DISPLAY_NAME, SCAN_TIME_STATUS); + sortTimeDisplay = hatch_7.makeOutParameter(0, 0, SCAN_TIME_DISPLAY_NAME, SCAN_TIME_STATUS); popogaDisplay = hatch_7.makeOutParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); popogaDisplay = hatch_8.makeOutParameter(0, 0, POPOGA_NAME, POPOGA_STATUS); popogaDisplay = hatch_8.makeOutParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); @@ -621,120 +569,135 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock } } - @Override - public boolean onRunningTick(ItemStack aStack) { - IGregTechTileEntity mte = getBaseMetaTileEntity(); - //Hysteresis based ePowerPass setting - long energyStored = getEUVar(); - float energyFrac = (float) energyStored / energyCapacity; + public static Map generateTeslaNodeMap(IGregTechTileEntity orgin){ + Map generatedNodeMap = new HashMap<>(); + IMetaTileEntity orginInside = orgin.getMetaTileEntity(); + int orginX; + int orginY; + int orginZ; + if (orginInside instanceof GT_MetaTileEntity_TM_teslaCoil) { + GT_MetaTileEntity_TM_teslaCoil teslaTower = (GT_MetaTileEntity_TM_teslaCoil) orginInside; + orginX = teslaTower.posTop.get0(); + orginY = teslaTower.posTop.get1(); + orginZ = teslaTower.posTop.get2(); + } else { + orginX = orgin.getXCoord(); + orginY = orgin.getYCoord(); + orginZ = orgin.getZCoord(); + } - energyCapacityDisplay.set(energyCapacity); - energyStoredDisplay.set(energyStored); - energyFractionDisplay.set(energyFrac); + for (IGregTechTileEntity node : teslaNodeSet) { + if (node == null) { + //Technically, the Tesla Covers do not remove themselves from the list and this is the code that does + teslaNodeSet.remove(null); + continue; + } else if (node == orgin || orgin.getWorld().provider.dimensionId != node.getWorld().provider.dimensionId) { + //Skip if looking at myself and skip if not in the same dimention + //TODO, INTERDIM? + continue; + } - if (!ePowerPass && energyFrac > histHighSetting.get()) { - ePowerPass = true; - } else if (ePowerPass && energyFrac < histLowSetting.get()) { - ePowerPass = false; + //Makes the target coordinates the center of the sphere of the tower if it has one + IMetaTileEntity nodeInside = node.getMetaTileEntity(); + int targetX; + int targetY; + int targetZ; + if (nodeInside instanceof GT_MetaTileEntity_TM_teslaCoil) { + GT_MetaTileEntity_TM_teslaCoil teslaTower = (GT_MetaTileEntity_TM_teslaCoil) nodeInside; + targetX = teslaTower.posTop.get0(); + targetY = teslaTower.posTop.get1(); + targetZ = teslaTower.posTop.get2(); + } else { + targetX = node.getXCoord(); + targetY = node.getYCoord(); + targetZ = node.getZCoord(); + } + + //Find the xyz offsets and calculate the distance between us and the target + int xPosOffset = targetX - orginX; + int yPosOffset = targetY - orginY; + int zPosOffset = targetZ - orginZ; + int distance = (int) ceil(sqrt(pow(xPosOffset, 2) + pow(yPosOffset, 2) + pow(zPosOffset, 2))); + //Thought we need abs here, we don't. An Integer to the power of two is going to be either 0 or positive. + //We also can just put stuff here without further checks, as we always check the next section + generatedNodeMap.put(node, distance); } + return generatedNodeMap; + } + + public static Map cleanTeslaNodeMap(Map nodeMap, IGregTechTileEntity orgin) { + IMetaTileEntity orginInside = orgin.getMetaTileEntity(); + //Assumes that if the orgin is not a Tesla Tower, it mus be a single block. + boolean isMulti = orginInside instanceof GT_MetaTileEntity_TM_teslaCoil; - //Clean the eTeslaMap - for (Map.Entry Rx : eTeslaMap.entrySet()) { + for (Map.Entry Rx : nodeMap.entrySet()) { + //All the checks need to pass or the target gets removed from the transmission list IGregTechTileEntity node = Rx.getKey(); + //Null check if (node != null) { IMetaTileEntity nodeInside = node.getMetaTileEntity(); + //We need this in a try catch, just as a precaution that a chunk had unloaded or a machine was removed try { + //Is it an Active Tesla Tower with at least some energy capacity? + //Singles and Multis can send power here, so we don't check if (nodeInside instanceof GT_MetaTileEntity_TM_teslaCoil && node.isActive()) { GT_MetaTileEntity_TM_teslaCoil teslaTower = (GT_MetaTileEntity_TM_teslaCoil) nodeInside; if (teslaTower.maxEUStore() > 0) { continue; } - } else if (nodeInside instanceof GT_MetaTileEntity_TeslaCoil) { + //Is it a Tesla Transceiver with at least one battery? + //Only multis can send power to singles + } else if (isMulti && nodeInside instanceof GT_MetaTileEntity_TeslaCoil) { GT_MetaTileEntity_TeslaCoil teslaTransceiver = (GT_MetaTileEntity_TeslaCoil) nodeInside; if (teslaTransceiver.mBatteryCount > 0) { continue; } - } else if ((node.getCoverBehaviorAtSide((byte) 1) instanceof GT_Cover_TM_TeslaCoil) && node.getEUCapacity() > 0) { + //Is it a tile entity with a Tesla Coil Cover? + //Only single can send power to non-Rich edition covers + //Since Rich edition inherits from regular, we need the final check + } else if (!isMulti && node.getCoverBehaviorAtSide((byte) 1) instanceof GT_Cover_TM_TeslaCoil && + node.getEUCapacity() > 0 && !(node.getCoverBehaviorAtSide((byte) 1) instanceof GT_Cover_TM_TeslaCoil_Ultimate)) { + continue; + //Is it a tile entity with a Tesla Coil Cover Rich edition? + //Only multis can send power to Rich edition covers + } else if (isMulti && node.getCoverBehaviorAtSide((byte) 1) instanceof GT_Cover_TM_TeslaCoil_Ultimate && node.getEUCapacity() > 0) { continue; } - } catch (Exception e) { + } catch (Exception ignored) { } } - eTeslaMap.remove(Rx.getKey()); + nodeMap.remove(Rx.getKey()); } + return nodeMap; + } - //Scan for transmission targets - switch (scanTime) { - case 0: - scanTimeDisplay.updateStatus(); - scanForTransmissionTargets(scanPosOffsets[0], scanPosOffsets[1]); - break; - case 20: - scanTimeDisplay.updateStatus(); - scanForTransmissionTargets(scanPosOffsets[2], scanPosOffsets[3]); - break; - case 40: - scanTimeDisplay.updateStatus(); - scanForTransmissionTargets(scanPosOffsets[4], scanPosOffsets[5]); - break; - case 60: - scanTimeDisplay.updateStatus(); - scanForTransmissionTargets(scanPosOffsets[6], scanPosOffsets[7]); - break; - case 80: - scanTimeDisplay.updateStatus(); - scanForTransmissionTargets(scanPosOffsets[8], scanPosOffsets[9]); - break; - default: - if (scanTime == (int) scanTimeMinSetting.get() - 1) { - scanTime = -1; - for (Map.Entry Rx : eTeslaMap.entrySet()) { - IGregTechTileEntity node = Rx.getKey(); - if (node != null) { - IMetaTileEntity nodeInside = node.getMetaTileEntity(); - try { - if (nodeInside instanceof GT_MetaTileEntity_TeslaCoil) { - GT_MetaTileEntity_TeslaCoil teslaCoil = (GT_MetaTileEntity_TeslaCoil) nodeInside; - - int tX = node.getXCoord(); - int tY = node.getYCoord(); - int tZ = node.getZCoord(); - - int tXN = posZap.get0(); - int tYN = posZap.get1(); - int tZN = posZap.get2(); - - int tOffset = (int) Math.ceil(Math.sqrt(Math.pow(tX - tXN, 2) + Math.pow(tY - tYN, 2) + Math.pow(tZ - tZN, 2))); - teslaCoil.eTeslaMap.put(mte, tOffset); - - for (Map.Entry RRx : eTeslaMap.entrySet()) { - IGregTechTileEntity nodeN = RRx.getKey(); - if (nodeN == node) { - continue; - } - tXN = nodeN.getXCoord(); - tYN = nodeN.getYCoord(); - tZN = nodeN.getZCoord(); - tOffset = (int) Math.ceil(Math.sqrt(Math.pow(tX - tXN, 2) + Math.pow(tY - tYN, 2) + Math.pow(tZ - tZN, 2))); - if (tOffset > 20) { - continue; - } - teslaCoil.eTeslaMap.put(nodeN, tOffset); - } - } - } catch (Exception e) { - eTeslaMap.remove(Rx.getKey()); - } - } - } - } - break; + @Override + public boolean onRunningTick(ItemStack aStack) { + IGregTechTileEntity mte = getBaseMetaTileEntity(); + + //Hysteresis based ePowerPass setting + float energyFrac = (float) getEUVar() / energyCapacity; + + energyCapacityDisplay.set(energyCapacity); + energyStoredDisplay.set(getEUVar()); + energyFractionDisplay.set(energyFrac); + + if (!ePowerPass && energyFrac > histHighSetting.get()) { + ePowerPass = true; + } else if (ePowerPass && energyFrac < histLowSetting.get()) { + ePowerPass = false; } - scanTime++; - scanTimeDisplay.set(scanTime); + //Create the teslaNodeMap + if (sortTime == sortTimeMinSetting.get()) { + sortTime = 0; + sortTimeDisplay.updateStatus(); + teslaNodeMap = generateTeslaNodeMap(mte); + } + sortTime++; + sortTimeDisplay.set(sortTime); //Power Limit Settings long outputVoltage; @@ -756,46 +719,23 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock //Stuff to do if ePowerPass if (ePowerPass) { //Range calculation and display - float rangeFrac = (float) ((-0.5 * Math.pow(energyFrac, 2)) + (1.5 * energyFrac)); - int transferRadiusTower = (int) (transferRadiusTowerSetting.get() * getRangeMulti(mTier, vTier) * rangeFrac); + int transferRadiusTower = (int) (transferRadiusTowerSetting.get() * getRangeMulti(mTier, vTier)); transferRadiusTowerDisplay.set(transferRadiusTower); - int transferRadiusTransceiver = (int) (transferRadiusTransceiverSetting.get() * getRangeMulti(mTier, vTier) * rangeFrac); + int transferRadiusTransceiver = (int) (transferRadiusTransceiverSetting.get() * getRangeMulti(mTier, vTier)); transferRadiusTransceiverDisplay.set(transferRadiusTransceiver); - int transferRadiusCoverUltimate = (int) (transferRadiusCoverUltimateSetting.get() * getRangeMulti(mTier, vTier) * rangeFrac); + int transferRadiusCoverUltimate = (int) (transferRadiusCoverUltimateSetting.get() * getRangeMulti(mTier, vTier)); transferRadiusCoverUltimateDisplay.set(transferRadiusCoverUltimate); - //Clean the eTeslaMap - for (Map.Entry Rx : eTeslaMap.entrySet()) { - IGregTechTileEntity node = Rx.getKey(); - if (node != null) { - IMetaTileEntity nodeInside = node.getMetaTileEntity(); - try { - if (nodeInside instanceof GT_MetaTileEntity_TM_teslaCoil && node.isActive()) { - GT_MetaTileEntity_TM_teslaCoil teslaTower = (GT_MetaTileEntity_TM_teslaCoil) nodeInside; - if (teslaTower.maxEUStore() > 0) { - continue; - } - } else if (nodeInside instanceof GT_MetaTileEntity_TeslaCoil) { - GT_MetaTileEntity_TeslaCoil teslaCoil = (GT_MetaTileEntity_TeslaCoil) nodeInside; - if (teslaCoil.getStoredEnergy()[1] > 0) { - continue; - } - } else if ((node.getCoverBehaviorAtSide((byte) 1) instanceof GT_Cover_TM_TeslaCoil) && node.getEUCapacity() > 0) { - continue; - } - } catch (Exception e) { - } - } - eTeslaMap.remove(Rx.getKey()); - } + //Clean the teslaNodeMap + teslaNodeMap = cleanTeslaNodeMap(teslaNodeMap, mte); //Power transfer long sparks = outputCurrent; while (sparks > 0) { boolean overdriveToggle = overDriveSetting.get() > 0; boolean idle = true; - for (Map.Entry Rx : entriesSortedByValues(eTeslaMap)) { - if (energyStored >= (overdriveToggle ? outputVoltage * 2 : outputVoltage)) { + for (Map.Entry Rx : entriesSortedByValues(teslaNodeMap)) { + if (getEUVar() >= (overdriveToggle ? outputVoltage * 2 : outputVoltage)) { IGregTechTileEntity node = Rx.getKey(); IMetaTileEntity nodeInside = node.getMetaTileEntity(); @@ -845,12 +785,12 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock } } outputCurrentDisplay.set(outputCurrent - sparks); - if (scanTime % 60 == 0 && !sparkList.isEmpty()) { + if (sortTime % 60 == 0 && !sparkList.isEmpty()) { NetworkDispatcher.INSTANCE.sendToAllAround(new RendererMessage.RendererData(sparkList), mte.getWorld().provider.dimensionId, - mte.getXCoord(), - mte.getYCoord(), - mte.getZCoord(), + posTop.get0(), + posTop.get1(), + posTop.get2(), 256); } sparkList.clear(); diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java index 47625b999f..657bf6b01a 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java @@ -27,32 +27,25 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Map; -import static com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_TM_teslaCoil.teslaNodeSet; +import static com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_TM_teslaCoil.*; import static com.github.technus.tectech.util.CommonValues.V; import static com.github.technus.tectech.util.Util.entriesSortedByValues; -import static com.github.technus.tectech.util.Util.map; import static com.github.technus.tectech.thing.metaTileEntity.Textures.*; import static java.lang.Math.round; import static net.minecraft.util.StatCollector.translateToLocal; import static net.minecraft.util.StatCollector.translateToLocalFormatted; - public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryBuffer { private final static int perBlockLoss = TecTech.configTecTech.TESLA_SINGLE_LOSS_PER_BLOCK;//Default is 1 private final static float overDriveLoss = TecTech.configTecTech.TESLA_SINGLE_OVERDRIVE_LOSS_FACTOR;//Default is 0.25F - public Map eTeslaMap = new HashMap<>();//Tesla Map to map them tesla bois! + private Map teslaNodeMap = new HashMap<>();//Tesla Map to map them tesla bois! private final static HashSet sparkList = new HashSet<>(); private byte sparkCount = 0; - private final static int maxTier = 4; //Max tier of transceiver - private final static int minTier = 0; //Min tier of transceiver - - private final static int transferRadiusMax = 20; - private final static int transferRadiusMin = 4; - private final int transferRadiusLimitTop = (int) map(mTier + 1, minTier + 1, maxTier + 1, transferRadiusMin, transferRadiusMax); - private final static int transferRadiusLimitBottom = 1; //Minimum user configurable - private int transferRadius = transferRadiusLimitTop; //Default transferRadius setting + private final static int transferRadiusMax = 20; //Maximum user configurable + private final static int transferRadiusMin = 4; //Minimum user configurable + private int transferRadius = 16; //Default transferRadius setting public boolean powerPassToggle = false; //Power Pass for public viewing private final static int histSteps = 20; //Hysteresis Resolution @@ -68,6 +61,9 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB private String clientLocale = "en_US"; + private int sortTime = 0;//Sorting tick counter + private final static int sortTimeMax = 100;//Sorting tick counter limit, so we only sort once every 5 seconds + public GT_MetaTileEntity_TeslaCoil(int aID, String aName, String aNameRegional, int aTier, int aSlotCount) { super(aID, aName, aNameRegional, aTier, "", aSlotCount); Util.setTier(aTier, this); @@ -125,11 +121,11 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB @Override public boolean onWireCutterRightClick(byte aSide, byte aWrenchingSide, EntityPlayer aPlayer, float aX, float aY, float aZ) { if (aPlayer.isSneaking()) { - if (transferRadius > transferRadiusLimitBottom) { + if (transferRadius > transferRadiusMin) { transferRadius--; } } else { - if (transferRadius < 0) { + if (transferRadius < transferRadiusMax) { transferRadius++; } } @@ -171,13 +167,11 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB @Override public ITexture[][][] getTextureSet(ITexture[] aTextures) { ITexture[][][] rTextures = new ITexture[3][17][]; - for (byte i = -1; i < 16; ++i) { rTextures[0][i + 1] = new ITexture[]{MACHINE_CASINGS_TT[this.mTier][i + 1]}; rTextures[1][i + 1] = new ITexture[]{MACHINE_CASINGS_TT[this.mTier][i + 1], TESLA_TRANSCEIVER_TOP_BA}; rTextures[2][i + 1] = new ITexture[]{MACHINE_CASINGS_TT[this.mTier][i + 1], this.mInventory.length == 16 ? OVERLAYS_ENERGY_OUT_POWER_TT[this.mTier] : (this.mInventory.length > 4 ? OVERLAYS_ENERGY_OUT_MULTI_TT[this.mTier] : OVERLAYS_ENERGY_OUT_TT[this.mTier])}; } - return rTextures; } @@ -273,6 +267,13 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB powerPassToggle = false; } + //Create the teslaNodeMap + if (sortTime == sortTimeMax) { + sortTime = 0; + teslaNodeMap = generateTeslaNodeMap(aBaseMetaTileEntity); + } + sortTime++; + //Stuff to do if ePowerPass if (powerPassToggle) { float rangeFrac = (float) ((-0.5 * Math.pow(energyFrac, 2)) + (1.5 * energyFrac)); @@ -282,30 +283,13 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB //Radius for transceiver to cover transfers int transferRadiusCover = (int) (transferRadiusTower / 1.25); - //Clean the eTeslaMap - for (Map.Entry Rx : eTeslaMap.entrySet()) { - IGregTechTileEntity node = Rx.getKey(); - if (node != null) { - IMetaTileEntity nodeInside = node.getMetaTileEntity(); - try { - if (nodeInside instanceof GT_MetaTileEntity_TM_teslaCoil && node.isActive()) { - GT_MetaTileEntity_TM_teslaCoil teslaTower = (GT_MetaTileEntity_TM_teslaCoil) nodeInside; - if (teslaTower.maxEUStore() > 0) { - continue; - } - } else if ((node.getCoverBehaviorAtSide((byte) 1) instanceof GT_Cover_TM_TeslaCoil) && node.getEUCapacity() > 0) { - continue; - } - } catch (Exception e) { - } - } - eTeslaMap.remove(Rx.getKey()); - } + //Clean the teslaNodeMap + teslaNodeMap = cleanTeslaNodeMap(teslaNodeMap, aBaseMetaTileEntity); //Power transfer while (outputCurrent > 0) { boolean idle = true; - for (Map.Entry Rx : entriesSortedByValues(eTeslaMap)) { + for (Map.Entry Rx : entriesSortedByValues(teslaNodeMap)) { if (getEUVar() >= (overdriveToggle ? outputVoltage * 2 : outputVoltage)) { IGregTechTileEntity node = Rx.getKey(); IMetaTileEntity nodeInside = node.getMetaTileEntity(); -- cgit From 209aba66021d742a606e03f5c2691cd5fee92942 Mon Sep 17 00:00:00 2001 From: basdxz Date: Sun, 19 Jul 2020 10:18:09 +0100 Subject: Tweak tesla range and add more config --- .../technus/tectech/loader/TecTechConfig.java | 18 +++++ .../multi/GT_MetaTileEntity_TM_teslaCoil.java | 78 +++++++++++++--------- .../single/GT_MetaTileEntity_TeslaCoil.java | 24 +++---- 3 files changed, 75 insertions(+), 45 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/loader/TecTechConfig.java b/src/main/java/com/github/technus/tectech/loader/TecTechConfig.java index ae9da94b02..cc6afd3f00 100644 --- a/src/main/java/com/github/technus/tectech/loader/TecTechConfig.java +++ b/src/main/java/com/github/technus/tectech/loader/TecTechConfig.java @@ -21,6 +21,11 @@ public class TecTechConfig extends ConfigManager { public boolean DISABLE_BLOCK_HARDNESS_NERF; public float TURRET_DAMAGE_FACTOR; public float TURRET_EXPLOSION_FACTOR; + public int TESLA_MULTI_TOWER_RANGE; + public int TESLA_MULTI_TRANSCEIVER_RANGE; + public int TESLA_MULTI_COVER_RANGE; + public int TESLA_MULTI_PLASMA_RANGE_MULTI_T1; + public int TESLA_MULTI_PLASMA_RANGE_MULTI_T2; public int TESLA_MULTI_HELIUM_PLASMA_PER_SECOND; public int TESLA_MULTI_NITROGEN_PLASMA_PER_SECOND; public int TESLA_MULTI_RADON_PLASMA_PER_SECOND; @@ -29,6 +34,7 @@ public class TecTechConfig extends ConfigManager { public int TESLA_MULTI_LOSS_PER_BLOCK_T2; public float TESLA_MULTI_OVERDRIVE_LOSS_FACTOR; public boolean TESLA_MULTI_GAS_OUTPUT; + public int TESLA_SINGLE_RANGE; public int TESLA_SINGLE_LOSS_PER_BLOCK; public float TESLA_SINGLE_OVERDRIVE_LOSS_FACTOR; @@ -46,6 +52,11 @@ public class TecTechConfig extends ConfigManager { DISABLE_MATERIAL_LOADING_FFS = false; TURRET_DAMAGE_FACTOR = 10; TURRET_EXPLOSION_FACTOR = 1; + TESLA_MULTI_TOWER_RANGE= 32; + TESLA_MULTI_TRANSCEIVER_RANGE= 16; + TESLA_MULTI_COVER_RANGE= 16; + TESLA_MULTI_PLASMA_RANGE_MULTI_T1= 2; + TESLA_MULTI_PLASMA_RANGE_MULTI_T2= 4; TESLA_MULTI_HELIUM_PLASMA_PER_SECOND = 100; TESLA_MULTI_NITROGEN_PLASMA_PER_SECOND = 50; TESLA_MULTI_RADON_PLASMA_PER_SECOND = 50; @@ -54,6 +65,7 @@ public class TecTechConfig extends ConfigManager { TESLA_MULTI_LOSS_PER_BLOCK_T2 = 1; TESLA_MULTI_OVERDRIVE_LOSS_FACTOR = 0.25F; TESLA_MULTI_GAS_OUTPUT = false; + TESLA_SINGLE_RANGE = 20; TESLA_SINGLE_LOSS_PER_BLOCK = 1; TESLA_SINGLE_OVERDRIVE_LOSS_FACTOR = 0.25F; } @@ -84,6 +96,11 @@ public class TecTechConfig extends ConfigManager { DISABLE_MATERIAL_LOADING_FFS = _mainConfig.getBoolean("DisableMaterialLoading", "Debug", DISABLE_MATERIAL_LOADING_FFS, "Set to true to disable gregtech material processing"); + TESLA_MULTI_TOWER_RANGE = _mainConfig.getInt("TeslaMultiTowerRange", "Balance Tweaks", TESLA_MULTI_TOWER_RANGE, 0, Integer.MAX_VALUE, "Tesla Tower to Tower max range"); + TESLA_MULTI_TRANSCEIVER_RANGE = _mainConfig.getInt("TeslaMultiTransceiverRange", "Balance Tweaks", TESLA_MULTI_TRANSCEIVER_RANGE, 0, Integer.MAX_VALUE, "Tesla Tower to Transceiver max range"); + TESLA_MULTI_COVER_RANGE = _mainConfig.getInt("TeslaMultiCoverRange", "Balance Tweaks", TESLA_MULTI_COVER_RANGE, 0, Integer.MAX_VALUE, "Tesla Tower to Tesla Coil Rich Edition Cover max range"); + TESLA_MULTI_PLASMA_RANGE_MULTI_T1 = _mainConfig.getInt("TeslaMultiPlasmaRangeMultiT1", "Balance Tweaks", TESLA_MULTI_PLASMA_RANGE_MULTI_T1, 0, Integer.MAX_VALUE, "Tesla Tower T1 Plasmas Range Multiplier"); + TESLA_MULTI_PLASMA_RANGE_MULTI_T2 = _mainConfig.getInt("TeslaMultiPlasmaRangeMultiT2", "Balance Tweaks", TESLA_MULTI_PLASMA_RANGE_MULTI_T2, 0, Integer.MAX_VALUE, "Tesla Tower T2 Plasmas Range Multiplier"); TESLA_MULTI_HELIUM_PLASMA_PER_SECOND = _mainConfig.getInt("TeslaMultiHeliumPlasmaPerSecond", "Balance Tweaks", TESLA_MULTI_HELIUM_PLASMA_PER_SECOND, 0, Integer.MAX_VALUE, "Tesla Tower helium plasma consumed each second the tesla tower is active"); TESLA_MULTI_NITROGEN_PLASMA_PER_SECOND = _mainConfig.getInt("TeslaMultiNitrogenPlasmaPerSecond", "Balance Tweaks", TESLA_MULTI_NITROGEN_PLASMA_PER_SECOND, 0, Integer.MAX_VALUE, "Tesla Tower nitrogen plasma consumed each second the tesla tower is active"); TESLA_MULTI_RADON_PLASMA_PER_SECOND = _mainConfig.getInt("TeslaMultiRadonPlasmaPerSecond", "Balance Tweaks", TESLA_MULTI_RADON_PLASMA_PER_SECOND, 0, Integer.MAX_VALUE, "Tesla Tower radon plasma consumed each second the tesla tower is active"); @@ -92,6 +109,7 @@ public class TecTechConfig extends ConfigManager { TESLA_MULTI_LOSS_PER_BLOCK_T2 = _mainConfig.getInt("TeslaMultiLossPerBlockT1", "Balance Tweaks", TESLA_MULTI_LOSS_PER_BLOCK_T2, 0, Integer.MAX_VALUE, "Tesla Tower power transmission loss per block per amp using radon plasma"); TESLA_MULTI_OVERDRIVE_LOSS_FACTOR = _mainConfig.getFloat("TeslaMultiOverdriveLossFactor", "Balance Tweaks", TESLA_MULTI_OVERDRIVE_LOSS_FACTOR, 0, 1, "Additional Tesla Tower power loss per amp as a factor of the tier voltage"); TESLA_MULTI_GAS_OUTPUT = _mainConfig.getBoolean("TeslaMultiMoltenOutput", "Balance Tweaks", TESLA_MULTI_GAS_OUTPUT, "Set to true to enable outputting plasmas as gasses from the tesla tower with a 1:1 ratio"); + TESLA_SINGLE_RANGE = _mainConfig.getInt("TeslaSingleRange", "Balance Tweaks", TESLA_SINGLE_RANGE, 0, Integer.MAX_VALUE, "Tesla Transceiver to max range"); TESLA_SINGLE_LOSS_PER_BLOCK = _mainConfig.getInt("TeslaSingleLossPerBlock", "Balance Tweaks", TESLA_SINGLE_LOSS_PER_BLOCK, 0, Integer.MAX_VALUE, "Tesla Transceiver power transmission loss per block per amp"); TESLA_SINGLE_OVERDRIVE_LOSS_FACTOR = _mainConfig.getFloat("TeslaSingleOverdriveLossFactor", "Balance Tweaks", TESLA_SINGLE_OVERDRIVE_LOSS_FACTOR, 0, 1, "Additional Tesla Transceiver power loss per amp as a factor of the tier voltage"); } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java index eca70ca63f..8ab6be3a50 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java @@ -53,6 +53,11 @@ import static net.minecraft.util.StatCollector.translateToLocal; public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_MultiblockBase_EM implements IConstructable { //region variables + private static final int transferRadiusTowerFromConfig = TecTech.configTecTech.TESLA_MULTI_TOWER_RANGE;//Default is 32 + private static final int transferRadiusTransceiverFromConfig = TecTech.configTecTech.TESLA_MULTI_TRANSCEIVER_RANGE;//Default is 16 + private static final int transferRadiusCoverUltimateFromConfig = TecTech.configTecTech.TESLA_MULTI_COVER_RANGE;//Default is 16 + private static final int plasmaRangeMultiT1 = TecTech.configTecTech.TESLA_MULTI_PLASMA_RANGE_MULTI_T1;//Default is 2 + private static final int plasmaRangeMultiT2 = TecTech.configTecTech.TESLA_MULTI_PLASMA_RANGE_MULTI_T2;//Default is 4 private static final int heliumUse = TecTech.configTecTech.TESLA_MULTI_HELIUM_PLASMA_PER_SECOND;//Default is 100 private static final int nitrogenUse = TecTech.configTecTech.TESLA_MULTI_NITROGEN_PLASMA_PER_SECOND;//Default is 50 private static final int radonUse = TecTech.configTecTech.TESLA_MULTI_RADON_PLASMA_PER_SECOND;//Default is 50 @@ -168,17 +173,25 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock if (Double.isNaN(value)) return STATUS_WRONG; value = (int) value; if (value < 0) return STATUS_TOO_LOW; - if (value > 40) return STATUS_TOO_HIGH; - if (value < 32) return STATUS_LOW; + if (value > transferRadiusTowerFromConfig) return STATUS_HIGH; + if (value < transferRadiusTowerFromConfig) return STATUS_LOW; return STATUS_OK; }; - private static final IStatusFunction TRANSFER_RADIUS_TRANSCEIVER_OR_COVER_ULTIMATE_STATUS = (base, p) -> { + private static final IStatusFunction TRANSFER_RADIUS_TRANSCEIVER_STATUS = (base, p) -> { double value = p.get(); if (Double.isNaN(value)) return STATUS_WRONG; value = (int) value; if (value < 0) return STATUS_TOO_LOW; - if (value > 20) return STATUS_TOO_HIGH; - if (value < 16) return STATUS_LOW; + if (value > transferRadiusTransceiverFromConfig) return STATUS_HIGH; + if (value < transferRadiusTransceiverFromConfig) return STATUS_LOW; + return STATUS_OK; + }; private static final IStatusFunction TRANSFER_RADIUS_COVER_ULTIMATE_STATUS = (base, p) -> { + double value = p.get(); + if (Double.isNaN(value)) return STATUS_WRONG; + value = (int) value; + if (value < 0) return STATUS_TOO_LOW; + if (value > transferRadiusCoverUltimateFromConfig) return STATUS_HIGH; + if (value < transferRadiusCoverUltimateFromConfig) return STATUS_LOW; return STATUS_OK; }; private static final IStatusFunction OUTPUT_VOLTAGE_OR_CURRENT_STATUS = (base, p) -> { @@ -215,7 +228,7 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock double value = p.get(); if (Double.isNaN(value)) return STATUS_WRONG; value = (int) value; - if (value == 0 || value == 20 || value == 40 || value == 60 || value == 80) return STATUS_HIGH; + if (value == 0) return STATUS_HIGH; return STATUS_LOW; }; private static final IStatusFunction POWER_STATUS = (base, p) -> { @@ -268,15 +281,16 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock } private float getRangeMulti(int mTier, int vTier) { + //By Default: //Helium and Nitrogen Plasmas will double the range //Radon will quadruple the range int plasmaBoost; switch (plasmaTier) { case 2: - plasmaBoost = 4; + plasmaBoost = plasmaRangeMultiT2; break; case 1: - plasmaBoost = 2; + plasmaBoost = plasmaRangeMultiT1; break; default: plasmaBoost = 1; @@ -351,7 +365,6 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock eCapacitorHatches.clear(); Vec3Impl xyzOffsets; - xyzOffsets = getExtendedFacing().getWorldOffset(new Vec3Impl(0, -1, 1)); mTier = iGregTechTileEntity.getMetaIDOffset(xyzOffsets.get0(), xyzOffsets.get1(), xyzOffsets.get2()); if (mTier == 9){mTier = 6;}//Hacky remap because the ZPM coils were added later @@ -496,10 +509,10 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock popogaSetting = hatch_0.makeInParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); histHighSetting = hatch_1.makeInParameter(0, 0.75, HYSTERESIS_HIGH_SETTING_NAME, HYSTERESIS_HIGH_STATUS); popogaSetting = hatch_1.makeInParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); - transferRadiusTowerSetting = hatch_2.makeInParameter(0, 32, TRANSFER_RADIUS_TOWER_SETTING_NAME, TRANSFER_RADIUS_TOWER_STATUS); + transferRadiusTowerSetting = hatch_2.makeInParameter(0, transferRadiusTowerFromConfig, TRANSFER_RADIUS_TOWER_SETTING_NAME, TRANSFER_RADIUS_TOWER_STATUS); popogaSetting = hatch_2.makeInParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); - transferRadiusTransceiverSetting = hatch_3.makeInParameter(0, 16, TRANSFER_RADIUS_TRANSCEIVER_SETTING_NAME, TRANSFER_RADIUS_TRANSCEIVER_OR_COVER_ULTIMATE_STATUS); - transferRadiusCoverUltimateSetting = hatch_3.makeInParameter(1, 16, TRANSFER_RADIUS_COVER_ULTIMATE_SETTING_NAME, TRANSFER_RADIUS_TRANSCEIVER_OR_COVER_ULTIMATE_STATUS); + transferRadiusTransceiverSetting = hatch_3.makeInParameter(0, transferRadiusTransceiverFromConfig, TRANSFER_RADIUS_TRANSCEIVER_SETTING_NAME, TRANSFER_RADIUS_TRANSCEIVER_STATUS); + transferRadiusCoverUltimateSetting = hatch_3.makeInParameter(1, transferRadiusCoverUltimateFromConfig, TRANSFER_RADIUS_COVER_ULTIMATE_SETTING_NAME, TRANSFER_RADIUS_COVER_ULTIMATE_STATUS); outputVoltageSetting = hatch_4.makeInParameter(0, -1, OUTPUT_VOLTAGE_SETTING_NAME, OUTPUT_VOLTAGE_OR_CURRENT_STATUS); popogaSetting = hatch_4.makeInParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); outputCurrentSetting = hatch_5.makeInParameter(0, -1, OUTPUT_CURRENT_SETTING_NAME, OUTPUT_VOLTAGE_OR_CURRENT_STATUS); @@ -519,8 +532,8 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock popogaDisplay = hatch_1.makeOutParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); transferRadiusTowerDisplay = hatch_2.makeOutParameter(0, 0, TRANSFER_RADIUS_TOWER_DISPLAY_NAME, TRANSFER_RADIUS_TOWER_STATUS); popogaDisplay = hatch_2.makeOutParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); - transferRadiusTransceiverDisplay = hatch_3.makeOutParameter(0, 0, TRANSFER_RADIUS_TRANSCEIVER_DISPLAY_NAME, TRANSFER_RADIUS_TRANSCEIVER_OR_COVER_ULTIMATE_STATUS); - transferRadiusCoverUltimateDisplay = hatch_3.makeOutParameter(1, 0, TRANSFER_RADIUS_COVER_ULTIMATE_DISPLAY_NAME, TRANSFER_RADIUS_TRANSCEIVER_OR_COVER_ULTIMATE_STATUS); + transferRadiusTransceiverDisplay = hatch_3.makeOutParameter(0, 0, TRANSFER_RADIUS_TRANSCEIVER_DISPLAY_NAME, TRANSFER_RADIUS_TRANSCEIVER_STATUS); + transferRadiusCoverUltimateDisplay = hatch_3.makeOutParameter(1, 0, TRANSFER_RADIUS_COVER_ULTIMATE_DISPLAY_NAME, TRANSFER_RADIUS_COVER_ULTIMATE_STATUS); outputVoltageDisplay = hatch_4.makeOutParameter(0, 0, OUTPUT_VOLTAGE_DISPLAY_NAME, POWER_STATUS); popogaDisplay = hatch_4.makeOutParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); outputCurrentDisplay = hatch_5.makeOutParameter(0, 0, OUTPUT_CURRENT_DISPLAY_NAME, POWER_STATUS); @@ -572,19 +585,19 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock public static Map generateTeslaNodeMap(IGregTechTileEntity orgin){ Map generatedNodeMap = new HashMap<>(); - IMetaTileEntity orginInside = orgin.getMetaTileEntity(); - int orginX; - int orginY; - int orginZ; - if (orginInside instanceof GT_MetaTileEntity_TM_teslaCoil) { - GT_MetaTileEntity_TM_teslaCoil teslaTower = (GT_MetaTileEntity_TM_teslaCoil) orginInside; - orginX = teslaTower.posTop.get0(); - orginY = teslaTower.posTop.get1(); - orginZ = teslaTower.posTop.get2(); + IMetaTileEntity originInside = orgin.getMetaTileEntity(); + int originX; + int originY; + int originZ; + if (originInside instanceof GT_MetaTileEntity_TM_teslaCoil) { + GT_MetaTileEntity_TM_teslaCoil teslaTower = (GT_MetaTileEntity_TM_teslaCoil) originInside; + originX = teslaTower.posTop.get0(); + originY = teslaTower.posTop.get1(); + originZ = teslaTower.posTop.get2(); } else { - orginX = orgin.getXCoord(); - orginY = orgin.getYCoord(); - orginZ = orgin.getZCoord(); + originX = orgin.getXCoord(); + originY = orgin.getYCoord(); + originZ = orgin.getZCoord(); } for (IGregTechTileEntity node : teslaNodeSet) { @@ -593,7 +606,7 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock teslaNodeSet.remove(null); continue; } else if (node == orgin || orgin.getWorld().provider.dimensionId != node.getWorld().provider.dimensionId) { - //Skip if looking at myself and skip if not in the same dimention + //Skip if looking at myself and skip if not in the same dimension //TODO, INTERDIM? continue; } @@ -615,9 +628,9 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock } //Find the xyz offsets and calculate the distance between us and the target - int xPosOffset = targetX - orginX; - int yPosOffset = targetY - orginY; - int zPosOffset = targetZ - orginZ; + int xPosOffset = targetX - originX; + int yPosOffset = targetY - originY; + int zPosOffset = targetZ - originZ; int distance = (int) ceil(sqrt(pow(xPosOffset, 2) + pow(yPosOffset, 2) + pow(zPosOffset, 2))); //Thought we need abs here, we don't. An Integer to the power of two is going to be either 0 or positive. //We also can just put stuff here without further checks, as we always check the next section @@ -626,7 +639,7 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock return generatedNodeMap; } - public static Map cleanTeslaNodeMap(Map nodeMap, IGregTechTileEntity orgin) { + public static void cleanTeslaNodeMap(Map nodeMap, IGregTechTileEntity orgin) { IMetaTileEntity orginInside = orgin.getMetaTileEntity(); //Assumes that if the orgin is not a Tesla Tower, it mus be a single block. boolean isMulti = orginInside instanceof GT_MetaTileEntity_TM_teslaCoil; @@ -669,7 +682,6 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock } nodeMap.remove(Rx.getKey()); } - return nodeMap; } @@ -727,7 +739,7 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock transferRadiusCoverUltimateDisplay.set(transferRadiusCoverUltimate); //Clean the teslaNodeMap - teslaNodeMap = cleanTeslaNodeMap(teslaNodeMap, mte); + cleanTeslaNodeMap(teslaNodeMap, mte); //Power transfer long sparks = outputCurrent; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java index 657bf6b01a..fcf85e26c3 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java @@ -36,6 +36,7 @@ import static net.minecraft.util.StatCollector.translateToLocal; import static net.minecraft.util.StatCollector.translateToLocalFormatted; public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryBuffer { + private final static int transferRadiusMax = TecTech.configTecTech.TESLA_SINGLE_RANGE;//Default is 20 private final static int perBlockLoss = TecTech.configTecTech.TESLA_SINGLE_LOSS_PER_BLOCK;//Default is 1 private final static float overDriveLoss = TecTech.configTecTech.TESLA_SINGLE_OVERDRIVE_LOSS_FACTOR;//Default is 0.25F @@ -43,18 +44,17 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB private final static HashSet sparkList = new HashSet<>(); private byte sparkCount = 0; - private final static int transferRadiusMax = 20; //Maximum user configurable - private final static int transferRadiusMin = 4; //Minimum user configurable - private int transferRadius = 16; //Default transferRadius setting + private final static int transferRadiusMin = 4;//Minimum user configurable + private int transferRadius = transferRadiusMax;//Default transferRadius setting - public boolean powerPassToggle = false; //Power Pass for public viewing - private final static int histSteps = 20; //Hysteresis Resolution - private int histSettingLow = 3; //Hysteresis Low Limit - private int histSettingHigh = 15; //Hysteresis High Limit - private final static int histLowLimit = 1; //How low can you configure it? - private final static int histHighLimit = 19; //How high can you configure it? - private float histLow = (float) histSettingLow / histSteps; //Power pass is disabled if power is under this fraction - private float histHigh = (float) histSettingHigh / histSteps; //Power pass is enabled if power is over this fraction + public boolean powerPassToggle = false;//Power Pass for public viewing + private final static int histSteps = 20;//Hysteresis Resolution + private int histSettingLow = 3;//Hysteresis Low Limit + private int histSettingHigh = 15;//Hysteresis High Limit + private final static int histLowLimit = 1;//How low can you configure it? + private final static int histHighLimit = 19;//How high can you configure it? + private float histLow = (float) histSettingLow / histSteps;//Power pass is disabled if power is under this fraction + private float histHigh = (float) histSettingHigh / histSteps;//Power pass is enabled if power is over this fraction private final long outputVoltage = V[mTier]; private boolean overdriveToggle = false; @@ -284,7 +284,7 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB int transferRadiusCover = (int) (transferRadiusTower / 1.25); //Clean the teslaNodeMap - teslaNodeMap = cleanTeslaNodeMap(teslaNodeMap, aBaseMetaTileEntity); + cleanTeslaNodeMap(teslaNodeMap, aBaseMetaTileEntity); //Power transfer while (outputCurrent > 0) { -- cgit From fdb7847bcd0de41a3ff9dc96e5a51038a5e0f609 Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 19 Jul 2020 11:30:33 +0200 Subject: Update decay logic --- .../java/ch/obermuhlner/math/big/BigComplex.java | 556 ------ .../ch/obermuhlner/math/big/BigComplexMath.java | 413 ----- .../ch/obermuhlner/math/big/BigDecimalMath.java | 1671 ----------------- .../java/ch/obermuhlner/math/big/BigFloat.java | 1947 -------------------- .../java/ch/obermuhlner/math/big/BigRational.java | 1103 ----------- .../math/big/DefaultBigDecimalMath.java | 736 -------- .../math/big/internal/AsinCalculator.java | 46 - .../math/big/internal/AtanhCalculator.java | 40 - .../math/big/internal/CosCalculator.java | 48 - .../math/big/internal/CoshCalculator.java | 43 - .../math/big/internal/ExpCalculator.java | 42 - .../math/big/internal/PowerIterator.java | 28 - .../math/big/internal/PowerNIterator.java | 33 - .../math/big/internal/PowerTwoNIterator.java | 33 - .../big/internal/PowerTwoNMinusOneIterator.java | 35 - .../big/internal/PowerTwoNPlusOneIterator.java | 33 - .../math/big/internal/SeriesCalculator.java | 127 -- .../math/big/internal/SinCalculator.java | 49 - .../math/big/internal/SinhCalculator.java | 44 - .../math/big/stream/BigDecimalStream.java | 219 --- .../math/big/stream/BigFloatStream.java | 214 --- .../core/cElementalDecayResult.java | 41 + .../core/cElementalInstanceStackMap.java | 13 +- .../core/stacks/cElementalInstanceStack.java | 136 +- .../multi/GT_MetaTileEntity_EM_collider.java | 18 +- .../multi/GT_MetaTileEntity_EM_decay.java | 6 +- 26 files changed, 119 insertions(+), 7555 deletions(-) delete mode 100644 src/main/java/ch/obermuhlner/math/big/BigComplex.java delete mode 100644 src/main/java/ch/obermuhlner/math/big/BigComplexMath.java delete mode 100644 src/main/java/ch/obermuhlner/math/big/BigDecimalMath.java delete mode 100644 src/main/java/ch/obermuhlner/math/big/BigFloat.java delete mode 100644 src/main/java/ch/obermuhlner/math/big/BigRational.java delete mode 100644 src/main/java/ch/obermuhlner/math/big/DefaultBigDecimalMath.java delete mode 100644 src/main/java/ch/obermuhlner/math/big/internal/AsinCalculator.java delete mode 100644 src/main/java/ch/obermuhlner/math/big/internal/AtanhCalculator.java delete mode 100644 src/main/java/ch/obermuhlner/math/big/internal/CosCalculator.java delete mode 100644 src/main/java/ch/obermuhlner/math/big/internal/CoshCalculator.java delete mode 100644 src/main/java/ch/obermuhlner/math/big/internal/ExpCalculator.java delete mode 100644 src/main/java/ch/obermuhlner/math/big/internal/PowerIterator.java delete mode 100644 src/main/java/ch/obermuhlner/math/big/internal/PowerNIterator.java delete mode 100644 src/main/java/ch/obermuhlner/math/big/internal/PowerTwoNIterator.java delete mode 100644 src/main/java/ch/obermuhlner/math/big/internal/PowerTwoNMinusOneIterator.java delete mode 100644 src/main/java/ch/obermuhlner/math/big/internal/PowerTwoNPlusOneIterator.java delete mode 100644 src/main/java/ch/obermuhlner/math/big/internal/SeriesCalculator.java delete mode 100644 src/main/java/ch/obermuhlner/math/big/internal/SinCalculator.java delete mode 100644 src/main/java/ch/obermuhlner/math/big/internal/SinhCalculator.java delete mode 100644 src/main/java/ch/obermuhlner/math/big/stream/BigDecimalStream.java delete mode 100644 src/main/java/ch/obermuhlner/math/big/stream/BigFloatStream.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalDecayResult.java diff --git a/src/main/java/ch/obermuhlner/math/big/BigComplex.java b/src/main/java/ch/obermuhlner/math/big/BigComplex.java deleted file mode 100644 index a4620ff53b..0000000000 --- a/src/main/java/ch/obermuhlner/math/big/BigComplex.java +++ /dev/null @@ -1,556 +0,0 @@ -package ch.obermuhlner.math.big; - -import java.math.BigDecimal; -import java.math.MathContext; -import java.util.Objects; - -/** - * Represents a complex number consisting of a real and an imaginary {@link BigDecimal} part in the form {@code a + bi}. - * - *

It generally follows the design of {@link BigDecimal} with some convenience improvements like overloaded operator methods.

- * - *

The biggest difference to {@link BigDecimal} is that {@link BigComplex#equals(Object) BigComplex.equals(Object)} implements the mathematical equality - * and not the strict technical equality. - * This was a difficult decision because it means that {@code BigComplex} behaves slightly different than {@link BigDecimal} - * but considering that the strange equality of {@link BigDecimal} is a major source of bugs we - * decided it was worth the slight inconsistency. - * If you need the strict equality use {@link BigComplex#strictEquals(Object)}`.

- * - *

This class is immutable and therefore inherently thread safe.

- */ -public final class BigComplex { - - /** - * Zero represented as complex number. - */ - public static final BigComplex ZERO = new BigComplex(BigDecimal.ZERO, BigDecimal.ZERO); - - /** - * Real 1 represented as complex number. - */ - public static final BigComplex ONE = new BigComplex(BigDecimal.ONE, BigDecimal.ZERO); - - /** - * Imaginary 1 represented as complex number. - */ - public static final BigComplex I = new BigComplex(BigDecimal.ZERO, BigDecimal.ONE); - - /** - * The real {@link BigDecimal} part of this complex number. - */ - public final BigDecimal re; - - /** - * The imaginary {@link BigDecimal} part of this complex number. - */ - public final BigDecimal im; - - private BigComplex(BigDecimal re, BigDecimal im) { - this.re = re; - this.im = im; - } - - /** - * Calculates the addition of the given complex value to this complex number. - * - *

This methods does not modify this instance.

- * - * @param value the {@link BigComplex} value to add - * @return the calculated {@link BigComplex} result - */ - public BigComplex add(BigComplex value) { - return valueOf( - re.add(value.re), - im.add(value.im)); - } - - /** - * Calculates the addition of the given complex value to this complex number using the specified {@link MathContext}. - * - *

This methods does not modify this instance.

- * - * @param value the {@link BigComplex} value to add - * @param mathContext the {@link MathContext} used to calculate the result - * @return the calculated {@link BigComplex} result - */ - public BigComplex add(BigComplex value, MathContext mathContext) { - return valueOf( - re.add(value.re, mathContext), - im.add(value.im, mathContext)); - } - - /** - * Calculates the addition of the given real {@link BigDecimal} value to this complex number using the specified {@link MathContext}. - * - *

This methods does not modify this instance.

- * - * @param value the real {@link BigDecimal} value to add - * @param mathContext the {@link MathContext} used to calculate the result - * @return the calculated {@link BigComplex} result - */ - public BigComplex add(BigDecimal value, MathContext mathContext) { - return valueOf( - re.add(value, mathContext), - im); - } - - /** - * Calculates the addition of the given real {@link BigDecimal} value to this complex number. - * - *

This methods does not modify this instance.

- * - * @param value the real {@link BigDecimal} value to add - * @return the calculated {@link BigComplex} result - */ - public BigComplex add(BigDecimal value) { - return valueOf( - re.add(value), - im); - } - - /** - * Calculates the addition of the given real {@code double} value to this complex number. - * - *

This methods does not modify this instance.

- * - * @param value the real {@code double} value to add - * @return the calculated {@link BigComplex} result - */ - public BigComplex add(double value) { - return add(BigDecimal.valueOf(value)); - } - - /** - * Calculates the subtraction of the given complex value from this complex number. - * - *

This methods does not modify this instance.

- * - * @param value the {@link BigComplex} value to subtract - * @return the calculated {@link BigComplex} result - */ - public BigComplex subtract(BigComplex value) { - return valueOf( - re.subtract(value.re), - im.subtract(value.im)); - } - - /** - * Calculates the subtraction of the given complex value from this complex number using the specified {@link MathContext}. - * - *

This methods does not modify this instance.

- * - * @param value the {@link BigComplex} value to subtract - * @param mathContext the {@link MathContext} used to calculate the result - * @return the calculated {@link BigComplex} result - */ - public BigComplex subtract(BigComplex value, MathContext mathContext) { - return valueOf( - re.subtract(value.re, mathContext), - im.subtract(value.im, mathContext)); - } - - /** - * Calculates the subtraction of the given real {@link BigDecimal} value from this complex number using the specified {@link MathContext}. - * - *

This methods does not modify this instance.

- * - * @param value the real {@link BigDecimal} value to add - * @param mathContext the {@link MathContext} used to calculate the result - * @return the calculated {@link BigComplex} result - */ - public BigComplex subtract(BigDecimal value, MathContext mathContext) { - return valueOf( - re.subtract(value, mathContext), - im); - } - - /** - * Calculates the subtraction of the given real {@link BigDecimal} value from this complex number. - * - *

This methods does not modify this instance.

- * - * @param value the real {@link BigDecimal} value to subtract - * @return the calculated {@link BigComplex} result - */ - public BigComplex subtract(BigDecimal value) { - return valueOf( - re.subtract(value), - im); - } - - /** - * Calculates the subtraction of the given real {@code double} value from this complex number. - * - *

This methods does not modify this instance.

- * - * @param value the real {@code double} value to subtract - * @return the calculated {@link BigComplex} result - */ - public BigComplex subtract(double value) { - return subtract(BigDecimal.valueOf(value)); - } - - /** - * Calculates the multiplication of the given complex value to this complex number. - * - *

This methods does not modify this instance.

- * - * @param value the {@link BigComplex} value to multiply - * @return the calculated {@link BigComplex} result - */ - public BigComplex multiply(BigComplex value) { - return valueOf( - re.multiply(value.re).subtract(im.multiply(value.im)), - re.multiply(value.im).add(im.multiply(value.re))); - } - - /** - * Calculates the multiplication of the given complex value with this complex number using the specified {@link MathContext}. - * - *

This methods does not modify this instance.

- * - * @param value the {@link BigComplex} value to multiply - * @param mathContext the {@link MathContext} used to calculate the result - * @return the calculated {@link BigComplex} result - */ - public BigComplex multiply(BigComplex value, MathContext mathContext) { - return valueOf( - re.multiply(value.re, mathContext).subtract(im.multiply(value.im, mathContext), mathContext), - re.multiply(value.im, mathContext).add(im.multiply(value.re, mathContext), mathContext)); - } - - /** - * Calculates the multiplication of the given real {@link BigDecimal} value with this complex number using the specified {@link MathContext}. - * - *

This methods does not modify this instance.

- * - * @param value the real {@link BigDecimal} value to multiply - * @param mathContext the {@link MathContext} used to calculate the result - * @return the calculated {@link BigComplex} result - */ - public BigComplex multiply(BigDecimal value, MathContext mathContext) { - return valueOf( - re.multiply(value, mathContext), - im.multiply(value, mathContext)); - } - - /** - * Calculates the multiplication of the given real {@link BigDecimal} value with this complex number. - * - *

This methods does not modify this instance.

- * - * @param value the real {@link BigDecimal} value to multiply - * @return the calculated {@link BigComplex} result - */ - public BigComplex multiply(BigDecimal value) { - return valueOf( - re.multiply(value), - im.multiply(value)); - } - - /** - * Calculates the multiplication of the given real {@code double} value with this complex number. - * - *

This methods does not modify this instance.

- * - * @param value the real {@code double} value to multiply - * @return the calculated {@link BigComplex} result - */ - public BigComplex multiply(double value) { - return multiply(BigDecimal.valueOf(value)); - } - - /** - * Calculates this complex number divided by the given complex value using the specified {@link MathContext}. - * - *

This methods does not modify this instance.

- * - * @param value the {@link BigComplex} value to divide by - * @param mathContext the {@link MathContext} used to calculate the result - * @return the calculated {@link BigComplex} result - */ - public BigComplex divide(BigComplex value, MathContext mathContext) { - return multiply(value.reciprocal(mathContext), mathContext); - } - - /** - * Calculates this complex number divided by the given real {@link BigDecimal} value using the specified {@link MathContext}. - * - *

This methods does not modify this instance.

- * - * @param value the {@link BigDecimal} value to divide by - * @param mathContext the {@link MathContext} used to calculate the result - * @return the calculated {@link BigComplex} result - */ - public BigComplex divide(BigDecimal value, MathContext mathContext) { - return valueOf( - re.divide(value, mathContext), - im.divide(value, mathContext)); - } - - /** - * Calculates this complex number divided by the given real {@code double} value using the specified {@link MathContext}. - * - *

This methods does not modify this instance.

- * - * @param value the {@code double} value to divide by - * @param mathContext the {@link MathContext} used to calculate the result - * @return the calculated {@link BigComplex} result - */ - public BigComplex divide(double value, MathContext mathContext) { - return divide(BigDecimal.valueOf(value), mathContext); - } - - /** - * Calculates the reciprocal of this complex number using the specified {@link MathContext}. - * - *

This methods does not modify this instance.

- * - * @param mathContext the {@link MathContext} used to calculate the result - * @return the calculated {@link BigComplex} result - */ - public BigComplex reciprocal(MathContext mathContext) { - BigDecimal scale = absSquare(mathContext); - return valueOf( - re.divide(scale, mathContext), - im.negate().divide(scale, mathContext)); - } - - /** - * Calculates the conjugate {@code a - bi} of this complex number. - * - *

This methods does not modify this instance.

- * - * @return the calculated {@link BigComplex} result - */ - public BigComplex conjugate() { - return valueOf(re, im.negate()); - } - - /** - * Calculates the negation {@code -a - bi} of this complex number. - * - *

This methods does not modify this instance.

- * - * @return the calculated {@link BigComplex} result - */ - public BigComplex negate() { - return valueOf(re.negate(), im.negate()); - } - - /** - * Calculates the absolute value (also known as magnitude, length or radius) of this complex number. - * - *

This method is slower than {@link #absSquare(MathContext)} since it needs to calculate the {@link BigDecimalMath#sqrt(BigDecimal, MathContext)}.

- * - *

This methods does not modify this instance.

- * - * @param mathContext the {@link MathContext} used to calculate the result - * @return the calculated {@link BigComplex} result - * @see #absSquare(MathContext) - */ - public BigDecimal abs(MathContext mathContext) { - return BigDecimalMath.sqrt(absSquare(mathContext), mathContext); - } - - /** - * Calculates the angle in radians (also known as argument) of this complex number. - * - *

This methods does not modify this instance.

- * - * @param mathContext the {@link MathContext} used to calculate the result - * @return the calculated {@link BigComplex} result - */ - public BigDecimal angle(MathContext mathContext) { - return BigDecimalMath.atan2(im, re, mathContext); - } - - /** - * Calculates the square of the absolute value of this complex number. - * - *

This method is faster than {@link #abs(MathContext)} since it does not need to calculate the {@link BigDecimalMath#sqrt(BigDecimal, MathContext)}.

- * - *

This methods does not modify this instance.

- * - * @param mathContext the {@link MathContext} used to calculate the result - * @return the calculated {@link BigComplex} result - * @see #abs(MathContext) - */ - public BigDecimal absSquare(MathContext mathContext) { - return re.multiply(re, mathContext).add(im.multiply(im, mathContext), mathContext); - } - - /** - * Returns whether this complex number only has a real part (the imaginary part is 0). - * - * @return {@code true} if this complex number only has a real part, {@code false} if the imaginary part is not 0 - */ - public boolean isReal() { - return im.signum() == 0; - } - - /** - * Returns the real part of this complex number as {@link BigComplex} number. - * - * @return the real part as as {@link BigComplex} number - */ - public BigComplex re() { - return valueOf(re, BigDecimal.ZERO); - } - - /** - * Returns the imaginary part of this complex number as {@link BigComplex} number. - * - * @return the imaginary part as as {@link BigComplex} number - */ - public BigComplex im() { - return valueOf(BigDecimal.ZERO, im); - } - - /** - * Returns this complex nuber rounded to the specified precision. - * - *

This methods does not modify this instance.

- * - * @param mathContext the {@link MathContext} used to calculate the result - * @return the rounded {@link BigComplex} result - */ - public BigComplex round(MathContext mathContext) { - return valueOf(re.round(mathContext), im.round(mathContext)); - } - - @Override - public int hashCode() { - return Objects.hash(re, im); - } - - /** - * {@inheritDoc} - * - *

Contrary to {@link BigDecimal#equals(Object)} this method implements mathematical equality - * (by calling {@link BigDecimal#compareTo(BigDecimal)} on the real and imaginary parts) - * instead of strict equality.

- * - * @see #strictEquals(Object) - */ - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - BigComplex other = (BigComplex) obj; - - return re.compareTo(other.re) == 0 && im.compareTo(other.im) == 0; - } - - /** - * Returns whether the real and imaginary parts of this complex number are strictly equal. - * - *

This method uses the strict equality as defined by {@link BigDecimal#equals(Object)} on the real and imaginary parts.

- *

Please note that {@link #equals(Object) BigComplex.equals(Object)} implements mathematical equality instead - * (by calling {@link BigDecimal#compareTo(BigDecimal) on the real and imaginary parts}).

- * - * @param obj the object to compare for strict equality - * @return {@code true} if the specified object is strictly equal to this complex number - * @see #equals(Object) - */ - public boolean strictEquals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - BigComplex other = (BigComplex) obj; - - return re.equals(other.re) && im.equals(other.im); - } - - @Override - public String toString() { - if (im.signum() >= 0) { - return "(" + re + " + " + im + " i)"; - } else { - return "(" + re + " - " + im.negate() + " i)"; - } - } - - /** - * Returns a complex number with the specified real {@link BigDecimal} part. - * - * @param real the real {@link BigDecimal} part - * @return the complex number - */ - public static BigComplex valueOf(BigDecimal real) { - return valueOf(real, BigDecimal.ZERO); - } - - /** - * Returns a complex number with the specified real {@code double} part. - * - * @param real the real {@code double} part - * @return the complex number - */ - public static BigComplex valueOf(double real) { - return valueOf(BigDecimal.valueOf(real), BigDecimal.ZERO); - } - - /** - * Returns a complex number with the specified real and imaginary {@code double} parts. - * - * @param real the real {@code double} part - * @param imaginary the imaginary {@code double} part - * @return the complex number - */ - public static BigComplex valueOf(double real, double imaginary) { - return valueOf(BigDecimal.valueOf(real), BigDecimal.valueOf(imaginary)); - } - - /** - * Returns a complex number with the specified real and imaginary {@link BigDecimal} parts. - * - * @param real the real {@link BigDecimal} part - * @param imaginary the imaginary {@link BigDecimal} part - * @return the complex number - */ - public static BigComplex valueOf(BigDecimal real, BigDecimal imaginary) { - if (real.signum() == 0) { - if (imaginary.signum() == 0) { - return ZERO; - } - if (imaginary.compareTo(BigDecimal.ONE) == 0) { - return I; - } - } - if (imaginary.signum() == 0 && real.compareTo(BigDecimal.ONE) == 0) { - return ONE; - } - - return new BigComplex(real, imaginary); - } - - /** - * Returns a complex number with the specified polar {@link BigDecimal} radius and angle using the specified {@link MathContext}. - * - * @param radius the {@link BigDecimal} radius of the polar representation - * @param angle the {@link BigDecimal} angle in radians of the polar representation - * @param mathContext the {@link MathContext} used to calculate the result - * @return the complex number - */ - public static BigComplex valueOfPolar(BigDecimal radius, BigDecimal angle, MathContext mathContext) { - if (radius.signum() == 0) { - return ZERO; - } - - return valueOf( - radius.multiply(BigDecimalMath.cos(angle, mathContext), mathContext), - radius.multiply(BigDecimalMath.sin(angle, mathContext), mathContext)); - } - - public static BigComplex valueOfPolar(double radius, double angle, MathContext mathContext) { - return valueOfPolar(BigDecimal.valueOf(radius), BigDecimal.valueOf(angle), mathContext); - } -} diff --git a/src/main/java/ch/obermuhlner/math/big/BigComplexMath.java b/src/main/java/ch/obermuhlner/math/big/BigComplexMath.java deleted file mode 100644 index a73d9bccdd..0000000000 --- a/src/main/java/ch/obermuhlner/math/big/BigComplexMath.java +++ /dev/null @@ -1,413 +0,0 @@ -package ch.obermuhlner.math.big; - -import java.math.BigDecimal; -import java.math.MathContext; -import java.util.List; - -import static ch.obermuhlner.math.big.BigComplex.I; - -/** - * Provides advanced functions operating on {@link BigComplex}s. - */ -public class BigComplexMath { - - private static final BigDecimal TWO = BigDecimal.valueOf(2); - - /** - * Calculates the reciprocal of the given complex number using the specified {@link MathContext}. - * - * @param x the complex number to calculate the reciprocal - * @param mathContext the {@link MathContext} used to calculate the result - * @return the calculated {@link BigComplex} result - * @see BigComplex#reciprocal(MathContext) - */ - public static BigComplex reciprocal(BigComplex x, MathContext mathContext) { - return x.reciprocal(mathContext); - } - - /** - * Calculates the conjugate of the given complex number using the specified {@link MathContext}. - * - * @param x the complex number to calculate the conjugate - * @return the calculated {@link BigComplex} result - * @see BigComplex#conjugate() - */ - public static BigComplex conjugate(BigComplex x) { - return x.conjugate(); - } - - /** - * Calculates the absolute value (also known as magnitude, length or radius) of the given complex number using the specified {@link MathContext}. - * - * @param x the complex number to calculate the absolute value - * @param mathContext the {@link MathContext} used to calculate the result - * @return the calculated {@link BigComplex} result - * @see BigComplex#abs(MathContext) - */ - public static BigDecimal abs(BigComplex x, MathContext mathContext) { - return x.abs(mathContext); - } - - /** - * Calculates the square of the absolute value (also known as magnitude, length or radius) of the given complex number using the specified {@link MathContext}. - * - * @param x the complex number to calculate the square of the absolute value - * @param mathContext the {@link MathContext} used to calculate the result - * @return the calculated {@link BigComplex} result - * @see BigComplex#absSquare(MathContext) - */ - public static BigDecimal absSquare(BigComplex x, MathContext mathContext) { - return x.absSquare(mathContext); - } - - /** - * Calculates the angle in radians of the given complex number using the specified {@link MathContext}. - * - * @param x the complex number to calculate the angle - * @param mathContext the {@link MathContext} used to calculate the result - * @return the calculated {@link BigComplex} angle in radians - * @see BigComplex#angle(MathContext) - */ - public static BigDecimal angle(BigComplex x, MathContext mathContext) { - return x.angle(mathContext); - } - - /** - * Calculates the factorial of the specified {@link BigComplex}. - * - *

This implementation uses - * Spouge's approximation - * to calculate the factorial for non-integer values.

- * - *

This involves calculating a series of constants that depend on the desired precision. - * Since this constant calculation is quite expensive (especially for higher precisions), - * the constants for a specific precision will be cached - * and subsequent calls to this method with the same precision will be much faster.

- * - *

It is therefore recommended to do one call to this method with the standard precision of your application during the startup phase - * and to avoid calling it with many different precisions.

- * - *

See: Wikipedia: Factorial - Extension of factorial to non-integer values of argument

- * - * @param x the {@link BigComplex} - * @param mathContext the {@link MathContext} used for the result - * @return the factorial {@link BigComplex} - * @throws ArithmeticException if x is a negative integer value (-1, -2, -3, ...) - * @see BigDecimalMath#factorial(BigDecimal, MathContext) - * @see #gamma(BigComplex, MathContext) - */ - public static BigComplex factorial(BigComplex x, MathContext mathContext) { - if (x.isReal() && BigDecimalMath.isIntValue(x.re)) { - return BigComplex.valueOf(BigDecimalMath.factorial(x.re.intValueExact()).round(mathContext)); - } - - // https://en.wikipedia.org/wiki/Spouge%27s_approximation - MathContext mc = new MathContext(mathContext.getPrecision() * 2, mathContext.getRoundingMode()); - - int a = mathContext.getPrecision() * 13 / 10; - List constants = BigDecimalMath.getSpougeFactorialConstants(a); - - BigDecimal bigA = BigDecimal.valueOf(a); - - boolean negative = false; - BigComplex factor = BigComplex.valueOf(constants.get(0)); - for (int k = 1; k < a; k++) { - BigDecimal bigK = BigDecimal.valueOf(k); - factor = factor.add(BigComplex.valueOf(constants.get(k)).divide(x.add(bigK), mc), mc); - negative = !negative; - } - - BigComplex result = pow(x.add(bigA, mc), x.add(BigDecimal.valueOf(0.5), mc), mc); - result = result.multiply(exp(x.negate().subtract(bigA, mc), mc), mc); - result = result.multiply(factor, mc); - - return result.round(mathContext); - } - - /** - * Calculates the gamma function of the specified {@link BigComplex}. - * - *

This implementation uses {@link #factorial(BigComplex, MathContext)} internally, - * therefore the performance implications described there apply also for this method. - * - *

See: Wikipedia: Gamma function

- * - * @param x the {@link BigComplex} - * @param mathContext the {@link MathContext} used for the result - * @return the gamma {@link BigComplex} - * @throws ArithmeticException if x-1 is a negative integer value (-1, -2, -3, ...) - * @see BigDecimalMath#gamma(BigDecimal, MathContext) - * @see #factorial(BigComplex, MathContext) - */ - public static BigComplex gamma(BigComplex x, MathContext mathContext) { - return factorial(x.subtract(BigComplex.ONE), mathContext); - } - - - /** - * Calculates the natural exponent of {@link BigComplex} x (ex) in the complex domain. - * - *

See: Wikipedia: Exponent (Complex plane)

- * - * @param x the {@link BigComplex} to calculate the exponent for - * @param mathContext the {@link MathContext} used for the result - * @return the calculated exponent {@link BigComplex} with the precision specified in the mathContext - */ - public static BigComplex exp(BigComplex x, MathContext mathContext) { - MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); - - BigDecimal expRe = BigDecimalMath.exp(x.re, mc); - return BigComplex.valueOf( - expRe.multiply(BigDecimalMath.cos(x.im, mc), mc).round(mathContext), - expRe.multiply(BigDecimalMath.sin(x.im, mc), mc)).round(mathContext); - } - - /** - * Calculates the sine (sinus) of {@link BigComplex} x in the complex domain. - * - *

See: Wikipedia: Sine (Sine with a complex argument)

- * - * @param x the {@link BigComplex} to calculate the sine for - * @param mathContext the {@link MathContext} used for the result - * @return the calculated sine {@link BigComplex} with the precision specified in the mathContext - */ - public static BigComplex sin(BigComplex x, MathContext mathContext) { - MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); - - return BigComplex.valueOf( - BigDecimalMath.sin(x.re, mc).multiply(BigDecimalMath.cosh(x.im, mc), mc).round(mathContext), - BigDecimalMath.cos(x.re, mc).multiply(BigDecimalMath.sinh(x.im, mc), mc).round(mathContext)); - } - - /** - * Calculates the cosine (cosinus) of {@link BigComplex} x in the complex domain. - * - * @param x the {@link BigComplex} to calculate the cosine for - * @param mathContext the {@link MathContext} used for the result - * @return the calculated cosine {@link BigComplex} with the precision specified in the mathContext - */ - public static BigComplex cos(BigComplex x, MathContext mathContext) { - MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); - - return BigComplex.valueOf( - BigDecimalMath.cos(x.re, mc).multiply(BigDecimalMath.cosh(x.im, mc), mc).round(mathContext), - BigDecimalMath.sin(x.re, mc).multiply(BigDecimalMath.sinh(x.im, mc), mc).negate().round(mathContext)); - } - - // - // http://scipp.ucsc.edu/~haber/archives/physics116A10/arc_10.pdf - - /** - * Calculates the tangens of {@link BigComplex} x in the complex domain. - * - * @param x the {@link BigComplex} to calculate the tangens for - * @param mathContext the {@link MathContext} used for the result - * @return the calculated tangens {@link BigComplex} with the precision specified in the mathContext - */ - public static BigComplex tan(BigComplex x, MathContext mathContext) { - MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); - - return sin(x, mc).divide(cos(x, mc), mc).round(mathContext); - } - - /** - * Calculates the arc tangens (inverted tangens) of {@link BigComplex} x in the complex domain. - * - *

See: Wikipedia: Inverse trigonometric functions (Extension to complex plane)

- * - * @param x the {@link BigComplex} to calculate the arc tangens for - * @param mathContext the {@link MathContext} used for the result - * @return the calculated arc tangens {@link BigComplex} with the precision specified in the mathContext - */ - public static BigComplex atan(BigComplex x, MathContext mathContext) { - MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); - - return log(I.subtract(x, mc).divide(I.add(x, mc), mc), mc).divide(I, mc).divide(TWO, mc).round(mathContext); - } - - /** - * Calculates the arc cotangens (inverted cotangens) of {@link BigComplex} x in the complex domain. - * - *

See: Wikipedia: Inverse trigonometric functions (Extension to complex plane)

- * - * @param x the {@link BigComplex} to calculate the arc cotangens for - * @param mathContext the {@link MathContext} used for the result - * @return the calculated arc cotangens {@link BigComplex} with the precision specified in the mathContext - */ - public static BigComplex acot(BigComplex x, MathContext mathContext) { - MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); - - return log(x.add(I, mc).divide(x.subtract(I, mc), mc), mc).divide(I, mc).divide(TWO, mc).round(mathContext); - } - - /** - * Calculates the arc sine (inverted sine) of {@link BigComplex} x in the complex domain. - * - *

See: Wikipedia: Inverse trigonometric functions (Extension to complex plane)

- * - * @param x the {@link BigComplex} to calculate the arc sine for - * @param mathContext the {@link MathContext} used for the result - * @return the calculated arc sine {@link BigComplex} with the precision specified in the mathContext - */ - public static BigComplex asin(BigComplex x, MathContext mathContext) { - MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); - - return I.negate().multiply(log(I.multiply(x, mc).add(sqrt(BigComplex.ONE.subtract(x.multiply(x, mc), mc), mc), mc), mc), mc).round(mathContext); - } - - /** - * Calculates the arc cosine (inverted cosine) of {@link BigComplex} x in the complex domain. - * - *

See: Wikipedia: Inverse trigonometric functions (Extension to complex plane)

- * - * @param x the {@link BigComplex} to calculate the arc cosine for - * @param mathContext the {@link MathContext} used for the result - * @return the calculated arc cosine {@link BigComplex} with the precision specified in the mathContext - */ - public static BigComplex acos(BigComplex x, MathContext mathContext) { - MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); - - return I.negate().multiply(log(x.add(sqrt(x.multiply(x, mc).subtract(BigComplex.ONE, mc), mc), mc), mc), mc).round(mathContext); - } - - /** - * Calculates the square root of {@link BigComplex} x in the complex domain (sqrt x). - * - *

See Wikipedia: Square root (Square root of an imaginary number)

- * - * @param x the {@link BigComplex} to calculate the square root for - * @param mathContext the {@link MathContext} used for the result - * @return the calculated square root {@link BigComplex} with the precision specified in the mathContext - */ - public static BigComplex sqrt(BigComplex x, MathContext mathContext) { - // https://math.stackexchange.com/questions/44406/how-do-i-get-the-square-root-of-a-complex-number - MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); - - BigDecimal magnitude = x.abs(mc); - - BigComplex a = x.add(magnitude, mc); - return a.divide(a.abs(mc), mc).multiply(BigDecimalMath.sqrt(magnitude, mc), mc).round(mathContext); - } - - /** - * Calculates the natural logarithm of {@link BigComplex} x in the complex domain. - * - *

See: Wikipedia: Complex logarithm

- * - * @param x the {@link BigComplex} to calculate the natural logarithm for - * @param mathContext the {@link MathContext} used for the result - * @return the calculated natural logarithm {@link BigComplex} with the precision specified in the mathContext - */ - public static BigComplex log(BigComplex x, MathContext mathContext) { - // https://en.wikipedia.org/wiki/Complex_logarithm - MathContext mc1 = new MathContext(mathContext.getPrecision() + 20, mathContext.getRoundingMode()); - MathContext mc2 = new MathContext(mathContext.getPrecision() + 5, mathContext.getRoundingMode()); - - return BigComplex.valueOf( - BigDecimalMath.log(x.abs(mc1), mc1).round(mathContext), - x.angle(mc2)).round(mathContext); - } - - /** - * Calculates {@link BigComplex} x to the power of long y (xy). - * - *

The implementation tries to minimize the number of multiplications of {@link BigComplex x} (using squares whenever possible).

- * - *

See: Wikipedia: Exponentiation - efficient computation

- * - * @param x the {@link BigComplex} value to take to the power - * @param y the long value to serve as exponent - * @param mathContext the {@link MathContext} used for the result - * @return the calculated x to the power of y with the precision specified in the mathContext - */ - public static BigComplex pow(BigComplex x, long y, MathContext mathContext) { - MathContext mc = new MathContext(mathContext.getPrecision() + 10, mathContext.getRoundingMode()); - - if (y < 0) { - return BigComplex.ONE.divide(pow(x, -y, mc), mc).round(mathContext); - } - - BigComplex result = BigComplex.ONE; - while (y > 0) { - if ((y & 1) == 1) { - // odd exponent -> multiply result with x - result = result.multiply(x, mc); - y -= 1; - } - - if (y > 0) { - // even exponent -> square x - x = x.multiply(x, mc); - } - - y >>= 1; - } - - return result.round(mathContext); - } - - /** - * Calculates {@link BigComplex} x to the power of {@link BigDecimal} y (xy). - * - * @param x the {@link BigComplex} value to take to the power - * @param y the {@link BigDecimal} value to serve as exponent - * @param mathContext the {@link MathContext} used for the result - * @return the calculated x to the power of y with the precision specified in the mathContext - */ - public static BigComplex pow(BigComplex x, BigDecimal y, MathContext mathContext) { - MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); - - BigDecimal angleTimesN = x.angle(mc).multiply(y, mc); - return BigComplex.valueOf( - BigDecimalMath.cos(angleTimesN, mc), - BigDecimalMath.sin(angleTimesN, mc)).multiply(BigDecimalMath.pow(x.abs(mc), y, mc), mc).round(mathContext); - } - - /** - * Calculates {@link BigComplex} x to the power of {@link BigComplex} y (xy). - * - * @param x the {@link BigComplex} value to take to the power - * @param y the {@link BigComplex} value to serve as exponent - * @param mathContext the {@link MathContext} used for the result - * @return the calculated x to the power of y with the precision specified in the mathContext - */ - public static BigComplex pow(BigComplex x, BigComplex y, MathContext mathContext) { - MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); - - return exp(y.multiply(log(x, mc), mc), mc).round(mathContext); - } - - /** - * Calculates the {@link BigDecimal} n'th root of {@link BigComplex} x (nsqrt x). - * - *

See Wikipedia: Square root

- * @param x the {@link BigComplex} value to calculate the n'th root - * @param n the {@link BigDecimal} defining the root - * @param mathContext the {@link MathContext} used for the result - * - * @return the calculated n'th root of x with the precision specified in the mathContext - */ - public static BigComplex root(BigComplex x, BigDecimal n, MathContext mathContext) { - MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); - - return pow(x, BigDecimal.ONE.divide(n, mc), mc).round(mathContext); - } - - /** - * Calculates the {@link BigComplex} n'th root of {@link BigComplex} x (nsqrt x). - * - *

See Wikipedia: Square root

- * @param x the {@link BigComplex} value to calculate the n'th root - * @param n the {@link BigComplex} defining the root - * @param mathContext the {@link MathContext} used for the result - * - * @return the calculated n'th root of x with the precision specified in the mathContext - */ - public static BigComplex root(BigComplex x, BigComplex n, MathContext mathContext) { - MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); - - return pow(x, BigComplex.ONE.divide(n, mc), mc).round(mathContext); - } - - // TODO add root() for the k'th root - https://math.stackexchange.com/questions/322481/principal-nth-root-of-a-complex-number -} diff --git a/src/main/java/ch/obermuhlner/math/big/BigDecimalMath.java b/src/main/java/ch/obermuhlner/math/big/BigDecimalMath.java deleted file mode 100644 index 552331f3b4..0000000000 --- a/src/main/java/ch/obermuhlner/math/big/BigDecimalMath.java +++ /dev/null @@ -1,1671 +0,0 @@ -package ch.obermuhlner.math.big; - -import static java.math.BigDecimal.ONE; -import static java.math.BigDecimal.TEN; -import static java.math.BigDecimal.ZERO; -import static java.math.BigDecimal.valueOf; - -import java.math.BigDecimal; -import java.math.MathContext; -import java.util.*; - -import ch.obermuhlner.math.big.internal.AsinCalculator; -import ch.obermuhlner.math.big.internal.CosCalculator; -import ch.obermuhlner.math.big.internal.CoshCalculator; -import ch.obermuhlner.math.big.internal.ExpCalculator; -import ch.obermuhlner.math.big.internal.SinCalculator; -import ch.obermuhlner.math.big.internal.SinhCalculator; - -/** - * Provides advanced functions operating on {@link BigDecimal}s. - */ -public class BigDecimalMath { - - private static final BigDecimal TWO = valueOf(2); - private static final BigDecimal THREE = valueOf(3); - private static final BigDecimal MINUS_ONE = valueOf(-1); - private static final BigDecimal ONE_HALF = valueOf(0.5); - - private static final BigDecimal DOUBLE_MAX_VALUE = BigDecimal.valueOf(Double.MAX_VALUE); - - private static volatile BigDecimal log2Cache; - private static final Object log2CacheLock = new Object(); - - private static volatile BigDecimal log3Cache; - private static final Object log3CacheLock = new Object(); - - private static volatile BigDecimal log10Cache; - private static final Object log10CacheLock = new Object(); - - private static volatile BigDecimal piCache; - private static final Object piCacheLock = new Object(); - - private static volatile BigDecimal eCache; - private static final Object eCacheLock = new Object(); - - private static final BigDecimal ROUGHLY_TWO_PI = new BigDecimal("3.141592653589793").multiply(TWO); - - private static final int EXPECTED_INITIAL_PRECISION = 15; - - private static BigDecimal[] factorialCache = new BigDecimal[100]; - - static { - BigDecimal result = ONE; - factorialCache[0] = result; - for (int i = 1; i < factorialCache.length; i++) { - result = result.multiply(valueOf(i)); - factorialCache[i] = result; - } - } - - private static final Map> spougeFactorialConstantsCache = new HashMap<>(); - private static final Object spougeFactorialConstantsCacheLock = new Object(); - - private BigDecimalMath() { - // prevent instances - } - - /** - * Creates a {@link BigDecimal} from the specified String representation. - * - *

This method is equivalent to the String constructor {@link BigDecimal#BigDecimal(String)} - * but has been optimized for large strings (several thousand digits).

- * - * @param string the String representation - * @return the created {@link BigDecimal} - * @throws NumberFormatException if string is not a valid representation of a {@link BigDecimal} - * @see BigDecimal#BigDecimal(String) - * @see #toBigDecimal(String, MathContext) - */ - public static BigDecimal toBigDecimal(String string) { - return toBigDecimal(string, MathContext.UNLIMITED); - } - - /** - * Creates a {@link BigDecimal} from the specified String representation. - * - *

This method is equivalent to the String constructor {@link BigDecimal#BigDecimal(String, MathContext)} - * but has been optimized for large strings (several thousand digits).

- * - * @param string the string representation - * @param mathContext the {@link MathContext} used for the result - * @return the created {@link BigDecimal} - * @throws NumberFormatException if string is not a valid representation of a {@link BigDecimal} - * @throws ArithmeticException if the result is inexact but the rounding mode is {@code UNNECESSARY} - * @see BigDecimal#BigDecimal(String, MathContext) - * @see #toBigDecimal(String) - */ - public static BigDecimal toBigDecimal(String string, MathContext mathContext) { - int len = string.length(); - if (len < 600) { - return new BigDecimal(string, mathContext); - } - - int splitLength = len / (len >= 10000 ? 8 : 5); - return toBigDecimal(string, mathContext, splitLength); - } - - static BigDecimal toBigDecimal(String string, MathContext mathContext, int splitLength) { - int len = string.length(); - - if (len < splitLength) { - return new BigDecimal(string, mathContext); - } - - char[] chars = string.toCharArray(); - - boolean numberHasSign = false; - boolean negative = false; - int numberIndex = 0; - int dotIndex = -1; - int expIndex = -1; - boolean expHasSign = false; - int scale = 0; - - for (int i = 0; i < len; i++) { - char c = chars[i]; - switch (c) { - case '+': - if (expIndex >= 0) { - if (expHasSign) { - throw new NumberFormatException("Multiple signs in exponent"); - } - expHasSign = true; - } else { - if (numberHasSign) { - throw new NumberFormatException("Multiple signs in number"); - } - numberHasSign = true; - numberIndex = i + 1; - } - break; - case '-': - if (expIndex >= 0) { - if (expHasSign) { - throw new NumberFormatException("Multiple signs in exponent"); - } - expHasSign = true; - } else { - if (numberHasSign) { - throw new NumberFormatException("Multiple signs in number"); - } - numberHasSign = true; - negative = true; - numberIndex = i + 1; - } - break; - case 'e': - case 'E': - if (expIndex >= 0) { - throw new NumberFormatException("Multiple exponent markers"); - } - expIndex = i; - break; - case '.': - if (dotIndex >= 0) { - throw new NumberFormatException("Multiple decimal points"); - } - dotIndex = i; - break; - default: - if (dotIndex >= 0 && expIndex == -1) { - scale++; - } - } - } - - int numberEndIndex; - int exp = 0; - if (expIndex >= 0) { - numberEndIndex = expIndex; - String expString = new String(chars, expIndex + 1, len - expIndex - 1); - exp = Integer.parseInt(expString); - scale = adjustScale(scale, exp); - } else { - numberEndIndex = len; - } - - BigDecimal result; - - if (dotIndex >= 0) { - int leftLength = dotIndex - numberIndex; - BigDecimal bigDecimalLeft = toBigDecimalRecursive(chars, numberIndex, leftLength, exp, splitLength); - int rightLength = numberEndIndex - dotIndex - 1; - BigDecimal bigDecimalRight = toBigDecimalRecursive(chars, dotIndex + 1, rightLength, exp-rightLength, splitLength); - result = bigDecimalLeft.add(bigDecimalRight); - } else { - result = toBigDecimalRecursive(chars, numberIndex, numberEndIndex - numberIndex, exp, splitLength); - } - - if (scale != 0) { - result = result.setScale(scale); - } - - if (negative) { - result = result.negate(); - } - - if (mathContext.getPrecision() != 0) { - result = result.round(mathContext); - } - - return result; - } - - private static int adjustScale(int scale, long exp) { - long adjustedScale = scale - exp; - if (adjustedScale > Integer.MAX_VALUE || adjustedScale < Integer.MIN_VALUE) - throw new NumberFormatException("Scale out of range: " + adjustedScale + " while adjusting scale " + scale + " to exponent " + exp); - return (int) adjustedScale; - } - - private static BigDecimal toBigDecimalRecursive(char[] chars, int offset, int length, int scale, int splitLength) { - if (length > splitLength) { - int mid = length / 2; - BigDecimal bigDecimalLeft = toBigDecimalRecursive(chars, offset, mid, scale + length - mid, splitLength); - BigDecimal bigDecimalRight = toBigDecimalRecursive(chars, offset + mid, length - mid, scale, splitLength); - return bigDecimalLeft.add(bigDecimalRight); - } - if (length == 0) { - return BigDecimal.ZERO; - } - return new BigDecimal(chars, offset, length).movePointRight(scale); - } - - /** - * Returns whether the specified {@link BigDecimal} value can be represented as int. - * - *

If this returns true you can call {@link BigDecimal#intValueExact()} without fear of an {@link ArithmeticException}.

- * - * @param value the {@link BigDecimal} to check - * @return true if the value can be represented as int value - */ - public static boolean isIntValue(BigDecimal value) { - // TODO impl isIntValue() without exceptions - try { - value.intValueExact(); - return true; - } catch (ArithmeticException ex) { - // ignored - } - return false; - } - - /** - * Returns whether the specified {@link BigDecimal} value can be represented as long. - * - *

If this returns true you can call {@link BigDecimal#longValueExact()} without fear of an {@link ArithmeticException}.

- * - * @param value the {@link BigDecimal} to check - * @return true if the value can be represented as long value - */ - public static boolean isLongValue(BigDecimal value) { - // TODO impl isLongValue() without exceptions - try { - value.longValueExact(); - return true; - } catch (ArithmeticException ex) { - // ignored - } - return false; - } - - /** - * Returns whether the specified {@link BigDecimal} value can be represented as double. - * - *

If this returns true you can call {@link BigDecimal#doubleValue()} - * without fear of getting {@link Double#POSITIVE_INFINITY} or {@link Double#NEGATIVE_INFINITY} as result.

- * - *

Example: BigDecimalMath.isDoubleValue(new BigDecimal("1E309")) returns false, - * because new BigDecimal("1E309").doubleValue() returns Infinity.

- * - *

Note: This method does not check for possible loss of precision.

- * - *

For example BigDecimalMath.isDoubleValue(new BigDecimal("1.23400000000000000000000000000000001")) will return true, - * because new BigDecimal("1.23400000000000000000000000000000001").doubleValue() returns a valid double value, - * although it loses precision and returns 1.234.

- * - *

BigDecimalMath.isDoubleValue(new BigDecimal("1E-325")) will return true - * although this value is smaller than {@link Double#MIN_VALUE} (and therefore outside the range of values that can be represented as double) - * because new BigDecimal("1E-325").doubleValue() returns 0 which is a legal value with loss of precision.

- * - * @param value the {@link BigDecimal} to check - * @return true if the value can be represented as double value - */ - public static boolean isDoubleValue(BigDecimal value) { - if (value.compareTo(DOUBLE_MAX_VALUE) > 0) { - return false; - } - if (value.compareTo(DOUBLE_MAX_VALUE.negate()) < 0) { - return false; - } - - return true; - } - - /** - * Returns the mantissa of the specified {@link BigDecimal} written as mantissa * 10exponent. - * - *

The mantissa is defined as having exactly 1 digit before the decimal point.

- * - * @param value the {@link BigDecimal} - * @return the mantissa - * @see #exponent(BigDecimal) - */ - public static BigDecimal mantissa(BigDecimal value) { - int exponent = exponent(value); - if (exponent == 0) { - return value; - } - - return value.movePointLeft(exponent); - } - - /** - * Returns the exponent of the specified {@link BigDecimal} written as mantissa * 10exponent. - * - *

The mantissa is defined as having exactly 1 digit before the decimal point.

- * - * @param value the {@link BigDecimal} - * @return the exponent - * @see #mantissa(BigDecimal) - */ - public static int exponent(BigDecimal value) { - return value.precision() - value.scale() - 1; - } - - /** - * Returns the number of significant digits of the specified {@link BigDecimal}. - * - *

The result contains the number of all digits before the decimal point and - * all digits after the decimal point excluding trailing zeroes.

- * - *

Examples:

- *
    - *
  • significantDigits(new BigDecimal("12300.00")) returns 5
  • - *
  • significantDigits(new BigDecimal("1.23000")) returns 3
  • - *
  • significantDigits(new BigDecimal("0.00012300")) returns 3
  • - *
  • significantDigits(new BigDecimal("12300.4500")) returns 7
  • - *
- * - *

See: Wikipedia: Significant figures

- * - * @param value the {@link BigDecimal} - * @return the number of significant digits - * @see BigDecimal#stripTrailingZeros() - * @see BigDecimal#precision() - */ - public static int significantDigits(BigDecimal value) { - BigDecimal stripped = value.stripTrailingZeros(); - if (stripped.scale() >= 0) { - return stripped.precision(); - } else { - return stripped.precision() - stripped.scale(); - } - } - - /** - * Returns the integral part of the specified {@link BigDecimal} (left of the decimal point). - * - * @param value the {@link BigDecimal} - * @return the integral part - * @see #fractionalPart(BigDecimal) - */ - public static BigDecimal integralPart(BigDecimal value) { - return value.setScale(0, BigDecimal.ROUND_DOWN); - } - - /** - * Returns the fractional part of the specified {@link BigDecimal} (right of the decimal point). - * - * @param value the {@link BigDecimal} - * @return the fractional part - * @see #integralPart(BigDecimal) - */ - public static BigDecimal fractionalPart(BigDecimal value) { - return value.subtract(integralPart(value)); - } - - /** - * Rounds the specified {@link BigDecimal} to the precision of the specified {@link MathContext}. - * - *

This method calls {@link BigDecimal#round(MathContext)}.

- * - * @param value the {@link BigDecimal} to round - * @param mathContext the {@link MathContext} used for the result - * @return the rounded {@link BigDecimal} value - * @see BigDecimal#round(MathContext) - * @see BigDecimalMath#roundWithTrailingZeroes(BigDecimal, MathContext) - */ - public static BigDecimal round(BigDecimal value, MathContext mathContext) { - return value.round(mathContext); - } - - /** - * Rounds the specified {@link BigDecimal} to the precision of the specified {@link MathContext} including trailing zeroes. - * - *

This method is similar to {@link BigDecimal#round(MathContext)} but does not remove the trailing zeroes.

- * - *

Example:

-
-MathContext mc = new MathContext(5);
-System.out.println(BigDecimalMath.roundWithTrailingZeroes(new BigDecimal("1.234567"), mc));    // 1.2346
-System.out.println(BigDecimalMath.roundWithTrailingZeroes(new BigDecimal("123.4567"), mc));    // 123.46
-System.out.println(BigDecimalMath.roundWithTrailingZeroes(new BigDecimal("0.001234567"), mc)); // 0.0012346
-System.out.println(BigDecimalMath.roundWithTrailingZeroes(new BigDecimal("1.23"), mc));        // 1.2300
-System.out.println(BigDecimalMath.roundWithTrailingZeroes(new BigDecimal("1.230000"), mc));    // 1.2300
-System.out.println(BigDecimalMath.roundWithTrailingZeroes(new BigDecimal("0.00123"), mc));     // 0.0012300
-System.out.println(BigDecimalMath.roundWithTrailingZeroes(new BigDecimal("0"), mc));           // 0.0000
-System.out.println(BigDecimalMath.roundWithTrailingZeroes(new BigDecimal("0.00000000"), mc));  // 0.0000
-
- * - * @param value the {@link BigDecimal} to round - * @param mathContext the {@link MathContext} used for the result - * @return the rounded {@link BigDecimal} value including trailing zeroes - * @see BigDecimal#round(MathContext) - * @see BigDecimalMath#round(BigDecimal, MathContext) - */ - public static BigDecimal roundWithTrailingZeroes(BigDecimal value, MathContext mathContext) { - if (value.precision() == mathContext.getPrecision()) { - return value; - } - if (value.signum() == 0) { - return BigDecimal.ZERO.setScale(mathContext.getPrecision() - 1); - } - - try { - BigDecimal stripped = value.stripTrailingZeros(); - int exponentStripped = exponent(stripped); // value.precision() - value.scale() - 1; - - BigDecimal zero; - if (exponentStripped < -1) { - zero = BigDecimal.ZERO.setScale(mathContext.getPrecision() - exponentStripped); - } else { - zero = BigDecimal.ZERO.setScale(mathContext.getPrecision() + exponentStripped + 1); - } - return stripped.add(zero, mathContext); - } catch (ArithmeticException ex) { - return value.round(mathContext); - } - } - - /** - * Calculates the reciprocal of the specified {@link BigDecimal}. - * - * @param x the {@link BigDecimal} - * @param mathContext the {@link MathContext} used for the result - * @return the reciprocal {@link BigDecimal} - * @throws ArithmeticException if x = 0 - * @throws ArithmeticException if the result is inexact but the - * rounding mode is {@code UNNECESSARY} or - * {@code mc.precision == 0} and the quotient has a - * non-terminating decimal expansion. - */ - public static BigDecimal reciprocal(BigDecimal x, MathContext mathContext) { - return BigDecimal.ONE.divide(x, mathContext); - } - - /** - * Calculates the factorial of the specified integer argument. - * - *

factorial = 1 * 2 * 3 * ... n

- * - * @param n the {@link BigDecimal} - * @return the factorial {@link BigDecimal} - * @throws ArithmeticException if x < 0 - */ - public static BigDecimal factorial(int n) { - if (n < 0) { - throw new ArithmeticException("Illegal factorial(n) for n < 0: n = " + n); - } - if (n < factorialCache.length) { - return factorialCache[n]; - } - - BigDecimal result = factorialCache[factorialCache.length - 1]; - return result.multiply(factorialRecursion(factorialCache.length, n)); - } - - private static BigDecimal factorialLoop(int n1, final int n2) { - final long limit = Long.MAX_VALUE / n2; - long accu = 1; - BigDecimal result = BigDecimal.ONE; - while (n1 <= n2) { - if (accu <= limit) { - accu *= n1; - } else { - result = result.multiply(BigDecimal.valueOf(accu)); - accu = n1; - } - n1++; - } - return result.multiply(BigDecimal.valueOf(accu)); - } - - private static BigDecimal factorialRecursion(final int n1, final int n2) { - int threshold = n1 > 200 ? 80 : 150; - if (n2 - n1 < threshold) { - return factorialLoop(n1, n2); - } - final int mid = (n1 + n2) >> 1; - return factorialRecursion(mid + 1, n2).multiply(factorialRecursion(n1, mid)); - } - - /** - * Calculates the factorial of the specified {@link BigDecimal}. - * - *

This implementation uses - * Spouge's approximation - * to calculate the factorial for non-integer values.

- * - *

This involves calculating a series of constants that depend on the desired precision. - * Since this constant calculation is quite expensive (especially for higher precisions), - * the constants for a specific precision will be cached - * and subsequent calls to this method with the same precision will be much faster.

- * - *

It is therefore recommended to do one call to this method with the standard precision of your application during the startup phase - * and to avoid calling it with many different precisions.

- * - *

See: Wikipedia: Factorial - Extension of factorial to non-integer values of argument

- * - * @param x the {@link BigDecimal} - * @param mathContext the {@link MathContext} used for the result - * @return the factorial {@link BigDecimal} - * @throws ArithmeticException if x is a negative integer value (-1, -2, -3, ...) - * @throws UnsupportedOperationException if x is a non-integer value and the {@link MathContext} has unlimited precision - * @see #factorial(int) - * @see #gamma(BigDecimal, MathContext) - */ - public static BigDecimal factorial(BigDecimal x, MathContext mathContext) { - if (isIntValue(x)) { - return round(factorial(x.intValueExact()), mathContext); - } - - // https://en.wikipedia.org/wiki/Spouge%27s_approximation - checkMathContext(mathContext); - MathContext mc = new MathContext(mathContext.getPrecision() << 1, mathContext.getRoundingMode()); - - int a = mathContext.getPrecision() * 13 / 10; - List constants = getSpougeFactorialConstants(a); - - BigDecimal bigA = BigDecimal.valueOf(a); - - boolean negative = false; - BigDecimal factor = constants.get(0); - for (int k = 1; k < a; k++) { - BigDecimal bigK = BigDecimal.valueOf(k); - factor = factor.add(constants.get(k).divide(x.add(bigK), mc)); - negative = !negative; - } - - BigDecimal result = pow(x.add(bigA), x.add(BigDecimal.valueOf(0.5)), mc); - result = result.multiply(exp(x.negate().subtract(bigA), mc)); - result = result.multiply(factor); - - return round(result, mathContext); - } - - static List getSpougeFactorialConstants(int a) { - synchronized (spougeFactorialConstantsCacheLock) { - return spougeFactorialConstantsCache.computeIfAbsent(a, key -> { - List constants = new ArrayList<>(a); - MathContext mc = new MathContext(a * 15 / 10); - - BigDecimal c0 = sqrt(pi(mc).multiply(TWO, mc), mc); - constants.add(c0); - - boolean negative = false; - for (int k = 1; k < a; k++) { - BigDecimal bigK = BigDecimal.valueOf(k); - long deltaAK = (long)a - k; - BigDecimal ck = pow(BigDecimal.valueOf(deltaAK), bigK.subtract(ONE_HALF), mc); - ck = ck.multiply(exp(BigDecimal.valueOf(deltaAK), mc), mc); - ck = ck.divide(factorial(k - 1), mc); - if (negative) { - ck = ck.negate(); - } - constants.add(ck); - - negative = !negative; - } - - return Collections.unmodifiableList(constants); - }); - } - } - - /** - * Calculates the gamma function of the specified {@link BigDecimal}. - * - *

This implementation uses {@link #factorial(BigDecimal, MathContext)} internally, - * therefore the performance implications described there apply also for this method. - * - *

See: Wikipedia: Gamma function

- * - * @param x the {@link BigDecimal} - * @param mathContext the {@link MathContext} used for the result - * @return the gamma {@link BigDecimal} - * @throws ArithmeticException if x-1 is a negative integer value (-1, -2, -3, ...) - * @throws UnsupportedOperationException if x is a non-integer value and the {@link MathContext} has unlimited precision - * @see #factorial(BigDecimal, MathContext) - */ - public static BigDecimal gamma(BigDecimal x, MathContext mathContext) { - return factorial(x.subtract(ONE), mathContext); - } - - /** - * Calculates the Bernoulli number for the specified index. - * - *

This function calculates the first Bernoulli numbers and therefore bernoulli(1) returns -0.5

- *

Note that bernoulli(x) for all odd x > 1 returns 0

- *

See: Wikipedia: Bernoulli number

- * - * @param n the index of the Bernoulli number to be calculated (starting at 0) - * @param mathContext the {@link MathContext} used for the result - * @return the Bernoulli number for the specified index - * @throws ArithmeticException if x < 0 - * @throws ArithmeticException if the result is inexact but the - * rounding mode is {@code UNNECESSARY} or - * {@code mc.precision == 0} and the quotient has a - * non-terminating decimal expansion. - */ - public static BigDecimal bernoulli(int n, MathContext mathContext) { - if (n < 0) { - throw new ArithmeticException("Illegal bernoulli(n) for n < 0: n = " + n); - } - - BigRational b = BigRational.bernoulli(n); - return b.toBigDecimal(mathContext); - } - - /** - * Calculates {@link BigDecimal} x to the power of {@link BigDecimal} y (xy). - * - * @param x the {@link BigDecimal} value to take to the power - * @param y the {@link BigDecimal} value to serve as exponent - * @param mathContext the {@link MathContext} used for the result - * @return the calculated x to the power of y with the precision specified in the mathContext - * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision - * @see #pow(BigDecimal, long, MathContext) - */ - public static BigDecimal pow(BigDecimal x, BigDecimal y, MathContext mathContext) { - checkMathContext(mathContext); - if (x.signum() == 0) { - switch (y.signum()) { - case 0 : return round(ONE, mathContext); - case 1 : return round(ZERO, mathContext); - } - } - - // TODO optimize y=0, y=1, y=10^k, y=-1, y=-10^k - - try { - long longValue = y.longValueExact(); - return pow(x, longValue, mathContext); - } catch (ArithmeticException ex) { - // ignored - } - - if (fractionalPart(y).signum() == 0) { - return powInteger(x, y, mathContext); - } - - // x^y = exp(y*log(x)) - MathContext mc = new MathContext(mathContext.getPrecision() + 6, mathContext.getRoundingMode()); - BigDecimal result = exp(y.multiply(log(x, mc), mc), mc); - - return round(result, mathContext); - } - - /** - * Calculates {@link BigDecimal} x to the power of long y (xy). - * - *

The implementation tries to minimize the number of multiplications of {@link BigDecimal x} (using squares whenever possible).

- * - *

See: Wikipedia: Exponentiation - efficient computation

- * - * @param x the {@link BigDecimal} value to take to the power - * @param y the long value to serve as exponent - * @param mathContext the {@link MathContext} used for the result - * @return the calculated x to the power of y with the precision specified in the mathContext - * @throws ArithmeticException if y is negative and the result is inexact but the - * rounding mode is {@code UNNECESSARY} or - * {@code mc.precision == 0} and the quotient has a - * non-terminating decimal expansion. - * @throws ArithmeticException if the rounding mode is - * {@code UNNECESSARY} and the - * {@code BigDecimal} operation would require rounding. - */ - public static BigDecimal pow(BigDecimal x, long y, MathContext mathContext) { - MathContext mc = mathContext.getPrecision() == 0 ? mathContext : new MathContext(mathContext.getPrecision() + 10, mathContext.getRoundingMode()); - - // TODO optimize y=0, y=1, y=10^k, y=-1, y=-10^k - - if (y < 0) { - BigDecimal value = reciprocal(pow(x, -y, mc), mc); - return round(value, mathContext); - } - - BigDecimal result = ONE; - while (y > 0) { - if ((y & 1) == 1) { - // odd exponent -> multiply result with x - result = result.multiply(x, mc); - y -= 1; - } - - if (y > 0) { - // even exponent -> square x - x = x.multiply(x, mc); - } - - y >>= 1; - } - - return round(result, mathContext); - } - - /** - * Calculates {@link BigDecimal} x to the power of the integer value y (xy). - * - *

The value y MUST be an integer value.

- * - * @param x the {@link BigDecimal} value to take to the power - * @param integerY the {@link BigDecimal} integer value to serve as exponent - * @param mathContext the {@link MathContext} used for the result - * @return the calculated x to the power of y with the precision specified in the mathContext - * @see #pow(BigDecimal, long, MathContext) - */ - private static BigDecimal powInteger(BigDecimal x, BigDecimal integerY, MathContext mathContext) { - if (fractionalPart(integerY).signum() != 0) { - throw new IllegalArgumentException("Not integer value: " + integerY); - } - - if (integerY.signum() < 0) { - return ONE.divide(powInteger(x, integerY.negate(), mathContext), mathContext); - } - - MathContext mc = new MathContext(Math.max(mathContext.getPrecision(), -integerY.scale()) + 30, mathContext.getRoundingMode()); - - BigDecimal result = ONE; - while (integerY.signum() > 0) { - BigDecimal halfY = integerY.divide(TWO, mc); - - if (fractionalPart(halfY).signum() != 0) { - // odd exponent -> multiply result with x - result = result.multiply(x, mc); - integerY = integerY.subtract(ONE); - halfY = integerY.divide(TWO, mc); - } - - if (halfY.signum() > 0) { - // even exponent -> square x - x = x.multiply(x, mc); - } - - integerY = halfY; - } - - return round(result, mathContext); - } - - /** - * Calculates the square root of {@link BigDecimal} x. - * - *

See Wikipedia: Square root

- * - * @param x the {@link BigDecimal} value to calculate the square root - * @param mathContext the {@link MathContext} used for the result - * @return the calculated square root of x with the precision specified in the mathContext - * @throws ArithmeticException if x < 0 - * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision - */ - public static BigDecimal sqrt(BigDecimal x, MathContext mathContext) { - checkMathContext(mathContext); - switch (x.signum()) { - case 0: - return ZERO; - case -1: - throw new ArithmeticException("Illegal sqrt(x) for x < 0: x = " + x); - } - - int maxPrecision = mathContext.getPrecision() + 6; - BigDecimal acceptableError = ONE.movePointLeft(mathContext.getPrecision() + 1); - - BigDecimal result; - int adaptivePrecision; - if (isDoubleValue(x)) { - result = BigDecimal.valueOf(Math.sqrt(x.doubleValue())); - adaptivePrecision = EXPECTED_INITIAL_PRECISION; - } else { - result = x.multiply(ONE_HALF, mathContext); - adaptivePrecision = 1; - } - - BigDecimal last; - - if (adaptivePrecision < maxPrecision) { - if (result.multiply(result).compareTo(x) == 0) { - return round(result, mathContext); // early exit if x is a square number - } - - do { - last = result; - adaptivePrecision <<= 1; - if (adaptivePrecision > maxPrecision) { - adaptivePrecision = maxPrecision; - } - MathContext mc = new MathContext(adaptivePrecision, mathContext.getRoundingMode()); - result = x.divide(result, mc).add(last).multiply(ONE_HALF, mc); - } - while (adaptivePrecision < maxPrecision || result.subtract(last).abs().compareTo(acceptableError) > 0); - } - - return round(result, mathContext); - } - - /** - * Calculates the n'th root of {@link BigDecimal} x. - * - *

See Wikipedia: Square root

- * @param x the {@link BigDecimal} value to calculate the n'th root - * @param n the {@link BigDecimal} defining the root - * @param mathContext the {@link MathContext} used for the result - * - * @return the calculated n'th root of x with the precision specified in the mathContext - * @throws ArithmeticException if x < 0 - * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision - */ - public static BigDecimal root(BigDecimal x, BigDecimal n, MathContext mathContext) { - checkMathContext(mathContext); - switch (x.signum()) { - case 0: - return ZERO; - case -1: - throw new ArithmeticException("Illegal root(x) for x < 0: x = " + x); - } - - if (n.compareTo(BigDecimal.ONE) <= 0) { - MathContext mc = new MathContext(mathContext.getPrecision() + 6, mathContext.getRoundingMode()); - return pow(x, BigDecimal.ONE.divide(n, mc), mathContext); - } - - int maxPrecision = mathContext.getPrecision() + 4; - BigDecimal acceptableError = ONE.movePointLeft(mathContext.getPrecision() + 1); - - BigDecimal nMinus1 = n.subtract(ONE); - BigDecimal result = x.divide(TWO, MathContext.DECIMAL32); - int adaptivePrecision = 2; // first approximation has really bad precision - BigDecimal step; - - do { - adaptivePrecision *= 3; - if (adaptivePrecision > maxPrecision) { - adaptivePrecision = maxPrecision; - } - MathContext mc = new MathContext(adaptivePrecision, mathContext.getRoundingMode()); - - step = x.divide(pow(result, nMinus1, mc), mc).subtract(result).divide(n, mc); - result = result.add(step); - } while (adaptivePrecision < maxPrecision || step.abs().compareTo(acceptableError) > 0); - - return round(result, mathContext); - } - - /** - * Calculates the natural logarithm of {@link BigDecimal} x. - * - *

See: Wikipedia: Natural logarithm

- * - * @param x the {@link BigDecimal} to calculate the natural logarithm for - * @param mathContext the {@link MathContext} used for the result - * @return the calculated natural logarithm {@link BigDecimal} with the precision specified in the mathContext - * @throws ArithmeticException if x <= 0 - * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision - */ - public static BigDecimal log(BigDecimal x, MathContext mathContext) { - checkMathContext(mathContext); - if (x.signum() <= 0) { - throw new ArithmeticException("Illegal log(x) for x <= 0: x = " + x); - } - if (x.compareTo(ONE) == 0) { - return ZERO; - } - - BigDecimal result; - switch (x.compareTo(TEN)) { - case 0: - result = logTen(mathContext); - break; - case 1: - result = logUsingExponent(x, mathContext); - break; - default : - result = logUsingTwoThree(x, mathContext); - } - - return round(result, mathContext); - } - - /** - * Calculates the logarithm of {@link BigDecimal} x to the base 2. - * - * @param x the {@link BigDecimal} to calculate the logarithm base 2 for - * @param mathContext the {@link MathContext} used for the result - * @return the calculated natural logarithm {@link BigDecimal} to the base 2 with the precision specified in the mathContext - * @throws ArithmeticException if x <= 0 - * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision - */ - public static BigDecimal log2(BigDecimal x, MathContext mathContext) { - checkMathContext(mathContext); - MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); - - BigDecimal result = log(x, mc).divide(logTwo(mc), mc); - return round(result, mathContext); - } - - /** - * Calculates the logarithm of {@link BigDecimal} x to the base 10. - * - * @param x the {@link BigDecimal} to calculate the logarithm base 10 for - * @param mathContext the {@link MathContext} used for the result - * @return the calculated natural logarithm {@link BigDecimal} to the base 10 with the precision specified in the mathContext - * @throws ArithmeticException if x <= 0 - * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision - */ - public static BigDecimal log10(BigDecimal x, MathContext mathContext) { - checkMathContext(mathContext); - MathContext mc = new MathContext(mathContext.getPrecision() + 2, mathContext.getRoundingMode()); - - BigDecimal result = log(x, mc).divide(logTen(mc), mc); - return round(result, mathContext); - } - - private static BigDecimal logUsingNewton(BigDecimal x, MathContext mathContext) { - // https://en.wikipedia.org/wiki/Natural_logarithm in chapter 'High Precision' - // y = y + 2 * (x-exp(y)) / (x+exp(y)) - - int maxPrecision = mathContext.getPrecision() + 20; - BigDecimal acceptableError = ONE.movePointLeft(mathContext.getPrecision() + 1); - //System.out.println("logUsingNewton(" + x + " " + mathContext + ") precision " + maxPrecision); - - BigDecimal result; - int adaptivePrecision; - double doubleX = x.doubleValue(); - if (doubleX > 0.0 && isDoubleValue(x)) { - result = BigDecimal.valueOf(Math.log(doubleX)); - adaptivePrecision = EXPECTED_INITIAL_PRECISION; - } else { - result = x.divide(TWO, mathContext); - adaptivePrecision = 1; - } - - BigDecimal step; - - do { - adaptivePrecision *= 3; - if (adaptivePrecision > maxPrecision) { - adaptivePrecision = maxPrecision; - } - MathContext mc = new MathContext(adaptivePrecision, mathContext.getRoundingMode()); - - BigDecimal expY = BigDecimalMath.exp(result, mc); - step = TWO.multiply(x.subtract(expY)).divide(x.add(expY), mc); - //System.out.println(" step " + step + " adaptivePrecision=" + adaptivePrecision); - result = result.add(step); - } while (adaptivePrecision < maxPrecision || step.abs().compareTo(acceptableError) > 0); - - return result; - } - - private static BigDecimal logUsingExponent(BigDecimal x, MathContext mathContext) { - MathContext mcDouble = new MathContext(mathContext.getPrecision() << 1, mathContext.getRoundingMode()); - MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); - //System.out.println("logUsingExponent(" + x + " " + mathContext + ") precision " + mc); - - int exponent = exponent(x); - BigDecimal mantissa = mantissa(x); - - BigDecimal result = logUsingTwoThree(mantissa, mc); - if (exponent != 0) { - result = result.add(valueOf(exponent).multiply(logTen(mcDouble), mc)); - } - return result; - } - - private static BigDecimal logUsingTwoThree(BigDecimal x, MathContext mathContext) { - MathContext mcDouble = new MathContext(mathContext.getPrecision() << 1, mathContext.getRoundingMode()); - MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); - //System.out.println("logUsingTwoThree(" + x + " " + mathContext + ") precision " + mc); - - int factorOfTwo = 0; - int powerOfTwo = 1; - int factorOfThree = 0; - int powerOfThree = 1; - - double value = x.doubleValue(); - if (value < 0.01) { - // do nothing - } else if (value < 0.1) { // never happens when called by logUsingExponent() - while (value < 0.6) { - value *= 2; - factorOfTwo--; - powerOfTwo <<= 1; - } - } - else if (value < 0.115) { // (0.1 - 0.11111 - 0.115) -> (0.9 - 1.0 - 1.035) - factorOfThree = -2; - powerOfThree = 9; - } - else if (value < 0.14) { // (0.115 - 0.125 - 0.14) -> (0.92 - 1.0 - 1.12) - factorOfTwo = -3; - powerOfTwo = 8; - } - else if (value < 0.2) { // (0.14 - 0.16667 - 0.2) - (0.84 - 1.0 - 1.2) - factorOfTwo = -1; - powerOfTwo = 2; - factorOfThree = -1; - powerOfThree = 3; - } - else if (value < 0.3) { // (0.2 - 0.25 - 0.3) -> (0.8 - 1.0 - 1.2) - factorOfTwo = -2; - powerOfTwo = 4; - } - else if (value < 0.42) { // (0.3 - 0.33333 - 0.42) -> (0.9 - 1.0 - 1.26) - factorOfThree = -1; - powerOfThree = 3; - } - else if (value < 0.7) { // (0.42 - 0.5 - 0.7) -> (0.84 - 1.0 - 1.4) - factorOfTwo = -1; - powerOfTwo = 2; - } - else if (value < 1.4) { // (0.7 - 1.0 - 1.4) -> (0.7 - 1.0 - 1.4) - // do nothing - } - else if (value < 2.5) { // (1.4 - 2.0 - 2.5) -> (0.7 - 1.0 - 1.25) - factorOfTwo = 1; - powerOfTwo = 2; - } - else if (value < 3.5) { // (2.5 - 3.0 - 3.5) -> (0.833333 - 1.0 - 1.166667) - factorOfThree = 1; - powerOfThree = 3; - } - else if (value < 5.0) { // (3.5 - 4.0 - 5.0) -> (0.875 - 1.0 - 1.25) - factorOfTwo = 2; - powerOfTwo = 4; - } - else if (value < 7.0) { // (5.0 - 6.0 - 7.0) -> (0.833333 - 1.0 - 1.166667) - factorOfThree = 1; - powerOfThree = 3; - factorOfTwo = 1; - powerOfTwo = 2; - } - else if (value < 8.5) { // (7.0 - 8.0 - 8.5) -> (0.875 - 1.0 - 1.0625) - factorOfTwo = 3; - powerOfTwo = 8; - } - else if (value < 10.0) { // (8.5 - 9.0 - 10.0) -> (0.94444 - 1.0 - 1.11111) - factorOfThree = 2; - powerOfThree = 9; - } - else { - while (value > 1.4) { // never happens when called by logUsingExponent() - value /= 2; - factorOfTwo++; - powerOfTwo <<= 1; - } - } - - BigDecimal correctedX = x; - BigDecimal result = ZERO; - - if (factorOfTwo > 0) { - correctedX = correctedX.divide(valueOf(powerOfTwo), mc); - result = result.add(logTwo(mcDouble).multiply(valueOf(factorOfTwo), mc)); - } - else if (factorOfTwo < 0) { - correctedX = correctedX.multiply(valueOf(powerOfTwo), mc); - result = result.subtract(logTwo(mcDouble).multiply(valueOf(-factorOfTwo), mc)); - } - - if (factorOfThree > 0) { - correctedX = correctedX.divide(valueOf(powerOfThree), mc); - result = result.add(logThree(mcDouble).multiply(valueOf(factorOfThree), mc)); - } - else if (factorOfThree < 0) { - correctedX = correctedX.multiply(valueOf(powerOfThree), mc); - result = result.subtract(logThree(mcDouble).multiply(valueOf(-factorOfThree), mc)); - } - - if (x == correctedX && result == ZERO) { - return logUsingNewton(x, mathContext); - } - - result = result.add(logUsingNewton(correctedX, mc), mc); - - return result; - } - - /** - * Returns the number pi. - * - *

See Wikipedia: Pi

- * - * @param mathContext the {@link MathContext} used for the result - * @return the number pi with the precision specified in the mathContext - * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision - */ - public static BigDecimal pi(MathContext mathContext) { - checkMathContext(mathContext); - BigDecimal result = null; - - synchronized (piCacheLock) { - if (piCache != null && mathContext.getPrecision() <= piCache.precision()) { - result = piCache; - } else { - piCache = piChudnovski(mathContext); - return piCache; - } - } - - return round(result, mathContext); - } - - private static BigDecimal piChudnovski(MathContext mathContext) { - MathContext mc = new MathContext(mathContext.getPrecision() + 10, mathContext.getRoundingMode()); - - final BigDecimal value24 = BigDecimal.valueOf(24); - final BigDecimal value640320 = BigDecimal.valueOf(640320); - final BigDecimal value13591409 = BigDecimal.valueOf(13591409); - final BigDecimal value545140134 = BigDecimal.valueOf(545140134); - final BigDecimal valueDivisor = value640320.pow(3).divide(value24, mc); - - BigDecimal sumA = BigDecimal.ONE; - BigDecimal sumB = BigDecimal.ZERO; - - BigDecimal a = BigDecimal.ONE; - long dividendTerm1 = 5; // -(6*k - 5) - long dividendTerm2 = -1; // 2*k - 1 - long dividendTerm3 = -1; // 6*k - 1 - BigDecimal kPower3 = BigDecimal.ZERO; - - long iterationCount = (mc.getPrecision()+13) / 14; - for (long k = 1; k <= iterationCount; k++) { - BigDecimal valueK = BigDecimal.valueOf(k); - dividendTerm1 += -6; - dividendTerm2 += 2; - dividendTerm3 += 6; - BigDecimal dividend = BigDecimal.valueOf(dividendTerm1).multiply(BigDecimal.valueOf(dividendTerm2)).multiply(BigDecimal.valueOf(dividendTerm3)); - kPower3 = valueK.pow(3); - BigDecimal divisor = kPower3.multiply(valueDivisor, mc); - a = a.multiply(dividend).divide(divisor, mc); - BigDecimal b = valueK.multiply(a, mc); - - sumA = sumA.add(a); - sumB = sumB.add(b); - } - - final BigDecimal value426880 = BigDecimal.valueOf(426880); - final BigDecimal value10005 = BigDecimal.valueOf(10005); - final BigDecimal factor = value426880.multiply(sqrt(value10005, mc)); - BigDecimal pi = factor.divide(value13591409.multiply(sumA, mc).add(value545140134.multiply(sumB, mc)), mc); - - return round(pi, mathContext); - } - - /** - * Returns the number e. - * - *

See Wikipedia: E (mathematical_constant)

- * - * @param mathContext the {@link MathContext} used for the result - * @return the number e with the precision specified in the mathContext - * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision - */ - public static BigDecimal e(MathContext mathContext) { - checkMathContext(mathContext); - BigDecimal result = null; - - synchronized (eCacheLock) { - if (eCache != null && mathContext.getPrecision() <= eCache.precision()) { - result = eCache; - } else { - eCache = exp(ONE, mathContext); - return eCache; - } - } - - return round(result, mathContext); - } - - private static BigDecimal logTen(MathContext mathContext) { - BigDecimal result = null; - - synchronized (log10CacheLock) { - if (log10Cache != null && mathContext.getPrecision() <= log10Cache.precision()) { - result = log10Cache; - } else { - log10Cache = logUsingNewton(BigDecimal.TEN, mathContext); - return log10Cache; - } - } - - return round(result, mathContext); - } - - private static BigDecimal logTwo(MathContext mathContext) { - BigDecimal result = null; - - synchronized (log2CacheLock) { - if (log2Cache != null && mathContext.getPrecision() <= log2Cache.precision()) { - result = log2Cache; - } else { - log2Cache = logUsingNewton(TWO, mathContext); - return log2Cache; - } - } - - return round(result, mathContext); - } - - private static BigDecimal logThree(MathContext mathContext) { - BigDecimal result = null; - - synchronized (log3CacheLock) { - if (log3Cache != null && mathContext.getPrecision() <= log3Cache.precision()) { - result = log3Cache; - } else { - log3Cache = logUsingNewton(THREE, mathContext); - return log3Cache; - } - } - - return round(result, mathContext); - } - - /** - * Calculates the natural exponent of {@link BigDecimal} x (ex). - * - *

See: Wikipedia: Exponent

- * - * @param x the {@link BigDecimal} to calculate the exponent for - * @param mathContext the {@link MathContext} used for the result - * @return the calculated exponent {@link BigDecimal} with the precision specified in the mathContext - * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision - */ - public static BigDecimal exp(BigDecimal x, MathContext mathContext) { - checkMathContext(mathContext); - if (x.signum() == 0) { - return ONE; - } - - return expIntegralFractional(x, mathContext); - } - - private static BigDecimal expIntegralFractional(BigDecimal x, MathContext mathContext) { - BigDecimal integralPart = integralPart(x); - - if (integralPart.signum() == 0) { - return expTaylor(x, mathContext); - } - - BigDecimal fractionalPart = x.subtract(integralPart); - - MathContext mc = new MathContext(mathContext.getPrecision() + 10, mathContext.getRoundingMode()); - - BigDecimal z = ONE.add(fractionalPart.divide(integralPart, mc)); - BigDecimal t = expTaylor(z, mc); - - BigDecimal result = pow(t, integralPart.intValueExact(), mc); - - return round(result, mathContext); - } - - private static BigDecimal expTaylor(BigDecimal x, MathContext mathContext) { - MathContext mc = new MathContext(mathContext.getPrecision() + 6, mathContext.getRoundingMode()); - - x = x.divide(valueOf(256), mc); - - BigDecimal result = ExpCalculator.INSTANCE.calculate(x, mc); - result = BigDecimalMath.pow(result, 256, mc); - return round(result, mathContext); - } - - /** - * Calculates the sine (sinus) of {@link BigDecimal} x. - * - *

See: Wikipedia: Sine

- * - * @param x the {@link BigDecimal} to calculate the sine for - * @param mathContext the {@link MathContext} used for the result - * @return the calculated sine {@link BigDecimal} with the precision specified in the mathContext - * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision - */ - public static BigDecimal sin(BigDecimal x, MathContext mathContext) { - checkMathContext(mathContext); - MathContext mc = new MathContext(mathContext.getPrecision() + 6, mathContext.getRoundingMode()); - - if (x.abs().compareTo(ROUGHLY_TWO_PI) > 0) { - MathContext mc2 = new MathContext(mc.getPrecision() + 4, mathContext.getRoundingMode()); - BigDecimal twoPi = TWO.multiply(pi(mc2)); - x = x.remainder(twoPi, mc2); - } - - BigDecimal result = SinCalculator.INSTANCE.calculate(x, mc); - return round(result, mathContext); - } - - /** - * Calculates the arc sine (inverted sine) of {@link BigDecimal} x. - * - *

See: Wikipedia: Arcsine

- * - * @param x the {@link BigDecimal} to calculate the arc sine for - * @param mathContext the {@link MathContext} used for the result - * @return the calculated arc sine {@link BigDecimal} with the precision specified in the mathContext - * @throws ArithmeticException if x > 1 or x < -1 - * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision - */ - public static BigDecimal asin(BigDecimal x, MathContext mathContext) { - checkMathContext(mathContext); - if (x.compareTo(ONE) > 0) { - throw new ArithmeticException("Illegal asin(x) for x > 1: x = " + x); - } - if (x.compareTo(MINUS_ONE) < 0) { - throw new ArithmeticException("Illegal asin(x) for x < -1: x = " + x); - } - - if (x.signum() == -1) { - return asin(x.negate(), mathContext).negate(); - } - - MathContext mc = new MathContext(mathContext.getPrecision() + 6, mathContext.getRoundingMode()); - - if (x.compareTo(BigDecimal.valueOf(0.707107)) >= 0) { - BigDecimal xTransformed = sqrt(ONE.subtract(x.multiply(x)), mc); - return acos(xTransformed, mathContext); - } - - BigDecimal result = AsinCalculator.INSTANCE.calculate(x, mc); - return round(result, mathContext); - } - - /** - * Calculates the cosine (cosinus) of {@link BigDecimal} x. - * - *

See: Wikipedia: Cosine

- * - * @param x the {@link BigDecimal} to calculate the cosine for - * @param mathContext the {@link MathContext} used for the result - * @return the calculated cosine {@link BigDecimal} with the precision specified in the mathContext - * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision - */ - public static BigDecimal cos(BigDecimal x, MathContext mathContext) { - checkMathContext(mathContext); - MathContext mc = new MathContext(mathContext.getPrecision() + 6, mathContext.getRoundingMode()); - - if (x.abs().compareTo(ROUGHLY_TWO_PI) > 0) { - MathContext mc2 = new MathContext(mc.getPrecision() + 4, mathContext.getRoundingMode()); - BigDecimal twoPi = TWO.multiply(pi(mc2), mc2); - x = x.remainder(twoPi, mc2); - } - - BigDecimal result = CosCalculator.INSTANCE.calculate(x, mc); - return round(result, mathContext); - } - - /** - * Calculates the arc cosine (inverted cosine) of {@link BigDecimal} x. - * - *

See: Wikipedia: Arccosine

- * - * @param x the {@link BigDecimal} to calculate the arc cosine for - * @param mathContext the {@link MathContext} used for the result - * @return the calculated arc sine {@link BigDecimal} with the precision specified in the mathContext - * @throws ArithmeticException if x > 1 or x < -1 - * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision - */ - public static BigDecimal acos(BigDecimal x, MathContext mathContext) { - checkMathContext(mathContext); - if (x.compareTo(ONE) > 0) { - throw new ArithmeticException("Illegal acos(x) for x > 1: x = " + x); - } - if (x.compareTo(MINUS_ONE) < 0) { - throw new ArithmeticException("Illegal acos(x) for x < -1: x = " + x); - } - - MathContext mc = new MathContext(mathContext.getPrecision() + 6, mathContext.getRoundingMode()); - - BigDecimal result = pi(mc).divide(TWO, mc).subtract(asin(x, mc)); - return round(result, mathContext); - } - - /** - * Calculates the tangens of {@link BigDecimal} x. - * - *

See: Wikipedia: Tangens

- * - * @param x the {@link BigDecimal} to calculate the tangens for - * @param mathContext the {@link MathContext} used for the result - * @return the calculated tangens {@link BigDecimal} with the precision specified in the mathContext - * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision - */ - public static BigDecimal tan(BigDecimal x, MathContext mathContext) { - checkMathContext(mathContext); - if (x.signum() == 0) { - return ZERO; - } - - MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); - BigDecimal result = sin(x, mc).divide(cos(x, mc), mc); - return round(result, mathContext); - } - - /** - * Calculates the arc tangens (inverted tangens) of {@link BigDecimal} x. - * - *

See: Wikipedia: Arctangens

- * - * @param x the {@link BigDecimal} to calculate the arc tangens for - * @param mathContext the {@link MathContext} used for the result - * @return the calculated arc tangens {@link BigDecimal} with the precision specified in the mathContext - * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision - */ - public static BigDecimal atan(BigDecimal x, MathContext mathContext) { - checkMathContext(mathContext); - MathContext mc = new MathContext(mathContext.getPrecision() + 6, mathContext.getRoundingMode()); - - x = x.divide(sqrt(ONE.add(x.multiply(x, mc)), mc), mc); - - BigDecimal result = asin(x, mc); - return round(result, mathContext); - } - - /** - * Calculates the arc tangens (inverted tangens) of {@link BigDecimal} y / x in the range -pi to pi. - * - *

This is useful to calculate the angle theta from the conversion of rectangular - * coordinates (xy) to polar coordinates (r, theta).

- * - *

See: Wikipedia: Atan2

- * - * @param y the {@link BigDecimal} - * @param x the {@link BigDecimal} - * @param mathContext the {@link MathContext} used for the result - * @return the calculated arc tangens {@link BigDecimal} with the precision specified in the mathContext - * @throws ArithmeticException if x = 0 and y = 0 - * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision - */ - public static BigDecimal atan2(BigDecimal y, BigDecimal x, MathContext mathContext) { - checkMathContext(mathContext); - MathContext mc = new MathContext(mathContext.getPrecision() + 3, mathContext.getRoundingMode()); - - if (x.signum() > 0) { // x > 0 - return atan(y.divide(x, mc), mathContext); - } else if (x.signum() < 0) { - if (y.signum() > 0) { // x < 0 && y > 0 - return atan(y.divide(x, mc), mc).add(pi(mc), mathContext); - } else if (y.signum() < 0) { // x < 0 && y < 0 - return atan(y.divide(x, mc), mc).subtract(pi(mc), mathContext); - } else { // x < 0 && y = 0 - return pi(mathContext); - } - } else { - if (y.signum() > 0) { // x == 0 && y > 0 - return pi(mc).divide(TWO, mathContext); - } else if (y.signum() < 0) { // x == 0 && y < 0 - return pi(mc).divide(TWO, mathContext).negate(); - } else { - throw new ArithmeticException("Illegal atan2(y, x) for x = 0; y = 0"); - } - } - } - - /** - * Calculates the cotangens of {@link BigDecimal} x. - * - *

See: Wikipedia: Cotangens

- * - * @param x the {@link BigDecimal} to calculate the cotangens for - * @param mathContext the {@link MathContext} used for the result - * @return the calculated cotanges {@link BigDecimal} with the precision specified in the mathContext - * @throws ArithmeticException if x = 0 - * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision - */ - public static BigDecimal cot(BigDecimal x, MathContext mathContext) { - checkMathContext(mathContext); - if (x.signum() == 0) { - throw new ArithmeticException("Illegal cot(x) for x = 0"); - } - - MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); - BigDecimal result = cos(x, mc).divide(sin(x, mc), mc); - return round(result, mathContext); - } - - /** - * Calculates the inverse cotangens (arc cotangens) of {@link BigDecimal} x. - * - *

See: Wikipedia: Arccotangens

- * - * @param x the {@link BigDecimal} to calculate the arc cotangens for - * @param mathContext the {@link MathContext} used for the result - * @return the calculated arc cotangens {@link BigDecimal} with the precision specified in the mathContext - * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision - */ - public static BigDecimal acot(BigDecimal x, MathContext mathContext) { - checkMathContext(mathContext); - MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); - BigDecimal result = pi(mc).divide(TWO, mc).subtract(atan(x, mc)); - return round(result, mathContext); - } - - /** - * Calculates the hyperbolic sine of {@link BigDecimal} x. - * - *

See: Wikipedia: Hyperbolic function

- * - * @param x the {@link BigDecimal} to calculate the hyperbolic sine for - * @param mathContext the {@link MathContext} used for the result - * @return the calculated hyperbolic sine {@link BigDecimal} with the precision specified in the mathContext - * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision - */ - public static BigDecimal sinh(BigDecimal x, MathContext mathContext) { - checkMathContext(mathContext); - MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); - BigDecimal result = SinhCalculator.INSTANCE.calculate(x, mc); - return round(result, mathContext); - } - - /** - * Calculates the hyperbolic cosine of {@link BigDecimal} x. - * - *

See: Wikipedia: Hyperbolic function

- * - * @param x the {@link BigDecimal} to calculate the hyperbolic cosine for - * @param mathContext the {@link MathContext} used for the result - * @return the calculated hyperbolic cosine {@link BigDecimal} with the precision specified in the mathContext - * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision - */ - public static BigDecimal cosh(BigDecimal x, MathContext mathContext) { - checkMathContext(mathContext); - MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); - BigDecimal result = CoshCalculator.INSTANCE.calculate(x, mc); - return round(result, mathContext); - } - - /** - * Calculates the hyperbolic tangens of {@link BigDecimal} x. - * - *

See: Wikipedia: Hyperbolic function

- * - * @param x the {@link BigDecimal} to calculate the hyperbolic tangens for - * @param mathContext the {@link MathContext} used for the result - * @return the calculated hyperbolic tangens {@link BigDecimal} with the precision specified in the mathContext - * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision - */ - public static BigDecimal tanh(BigDecimal x, MathContext mathContext) { - checkMathContext(mathContext); - MathContext mc = new MathContext(mathContext.getPrecision() + 6, mathContext.getRoundingMode()); - BigDecimal result = sinh(x, mc).divide(cosh(x, mc), mc); - return round(result, mathContext); - } - - /** - * Calculates the hyperbolic cotangens of {@link BigDecimal} x. - * - *

See: Wikipedia: Hyperbolic function

- * - * @param x the {@link BigDecimal} to calculate the hyperbolic cotangens for - * @param mathContext the {@link MathContext} used for the result - * @return the calculated hyperbolic cotangens {@link BigDecimal} with the precision specified in the mathContext - * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision - */ - public static BigDecimal coth(BigDecimal x, MathContext mathContext) { - checkMathContext(mathContext); - MathContext mc = new MathContext(mathContext.getPrecision() + 6, mathContext.getRoundingMode()); - BigDecimal result = cosh(x, mc).divide(sinh(x, mc), mc); - return round(result, mathContext); - } - - /** - * Calculates the arc hyperbolic sine (inverse hyperbolic sine) of {@link BigDecimal} x. - * - *

See: Wikipedia: Hyperbolic function

- * - * @param x the {@link BigDecimal} to calculate the arc hyperbolic sine for - * @param mathContext the {@link MathContext} used for the result - * @return the calculated arc hyperbolic sine {@link BigDecimal} with the precision specified in the mathContext - * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision - */ - public static BigDecimal asinh(BigDecimal x, MathContext mathContext) { - checkMathContext(mathContext); - MathContext mc = new MathContext(mathContext.getPrecision() + 10, mathContext.getRoundingMode()); - BigDecimal result = log(x.add(sqrt(x.multiply(x, mc).add(ONE, mc), mc)), mc); - return round(result, mathContext); - } - - /** - * Calculates the arc hyperbolic cosine (inverse hyperbolic cosine) of {@link BigDecimal} x. - * - *

See: Wikipedia: Hyperbolic function

- * - * @param x the {@link BigDecimal} to calculate the arc hyperbolic cosine for - * @param mathContext the {@link MathContext} used for the result - * @return the calculated arc hyperbolic cosine {@link BigDecimal} with the precision specified in the mathContext - * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision - */ - public static BigDecimal acosh(BigDecimal x, MathContext mathContext) { - checkMathContext(mathContext); - MathContext mc = new MathContext(mathContext.getPrecision() + 6, mathContext.getRoundingMode()); - BigDecimal result = log(x.add(sqrt(x.multiply(x).subtract(ONE), mc)), mc); - return round(result, mathContext); - } - - /** - * Calculates the arc hyperbolic tangens (inverse hyperbolic tangens) of {@link BigDecimal} x. - * - *

See: Wikipedia: Hyperbolic function

- * - * @param x the {@link BigDecimal} to calculate the arc hyperbolic tangens for - * @param mathContext the {@link MathContext} used for the result - * @return the calculated arc hyperbolic tangens {@link BigDecimal} with the precision specified in the mathContext - * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision - */ - public static BigDecimal atanh(BigDecimal x, MathContext mathContext) { - if (x.compareTo(BigDecimal.ONE) >= 0) { - throw new ArithmeticException("Illegal atanh(x) for x >= 1: x = " + x); - } - if (x.compareTo(MINUS_ONE) <= 0) { - throw new ArithmeticException("Illegal atanh(x) for x <= -1: x = " + x); - } - - checkMathContext(mathContext); - MathContext mc = new MathContext(mathContext.getPrecision() + 6, mathContext.getRoundingMode()); - BigDecimal result = log(ONE.add(x).divide(ONE.subtract(x), mc), mc).multiply(ONE_HALF); - return round(result, mathContext); - } - - /** - * Calculates the arc hyperbolic cotangens (inverse hyperbolic cotangens) of {@link BigDecimal} x. - * - *

See: Wikipedia: Hyperbolic function

- * - * @param x the {@link BigDecimal} to calculate the arc hyperbolic cotangens for - * @param mathContext the {@link MathContext} used for the result - * @return the calculated arc hyperbolic cotangens {@link BigDecimal} with the precision specified in the mathContext - * @throws UnsupportedOperationException if the {@link MathContext} has unlimited precision - */ - public static BigDecimal acoth(BigDecimal x, MathContext mathContext) { - checkMathContext(mathContext); - MathContext mc = new MathContext(mathContext.getPrecision() + 6, mathContext.getRoundingMode()); - BigDecimal result = log(x.add(ONE).divide(x.subtract(ONE), mc), mc).multiply(ONE_HALF); - return round(result, mathContext); - } - - private static void checkMathContext (MathContext mathContext) { - if (mathContext.getPrecision() == 0) { - throw new UnsupportedOperationException("Unlimited MathContext not supported"); - } - } -} diff --git a/src/main/java/ch/obermuhlner/math/big/BigFloat.java b/src/main/java/ch/obermuhlner/math/big/BigFloat.java deleted file mode 100644 index eb8944f2c4..0000000000 --- a/src/main/java/ch/obermuhlner/math/big/BigFloat.java +++ /dev/null @@ -1,1947 +0,0 @@ -package ch.obermuhlner.math.big; - -import java.io.Serializable; -import java.math.BigDecimal; -import java.math.MathContext; -import java.math.RoundingMode; -import java.util.Objects; - -/** - * A wrapper around {@link BigDecimal} which simplifies the consistent usage of the {@link MathContext} - * and provides a simpler API for calculations. - * - *

Overview

- * - *

Every {@link BigFloat} instance has a reference to a {@link Context} that specifies the {@link MathContext} to be used for all calculations and values.

- * - *

The API for calculations is simplified and more consistent with the typical mathematical usage.

- *
    - *
  • Factory methods for values: - *
      - *
    • valueOf(BigFloat)
    • - *
    • valueOf(BigDecimal)
    • - *
    • valueOf(int)
    • - *
    • valueOf(long)
    • - *
    • valueOf(double)
    • - *
    • valueOf(String)
    • - *
    • pi()
    • - *
    • e()
    • - *
    - *
  • - *
  • All standard operators: - *
      - *
    • add(x)
    • - *
    • subtract(x)
    • - *
    • multiply(x)
    • - *
    • remainder(x)
    • - *
    • pow(y)
    • - *
    • root(y)
    • - *
    - *
  • - *
  • Calculation methods are overloaded for different value types: - *
      - *
    • add(BigFloat)
    • - *
    • add(BigDecimal)
    • - *
    • add(int)
    • - *
    • add(long)
    • - *
    • add(double)
    • - *
    • ...
    • - *
    - *
  • - *
  • Mathematical functions are written as they are traditionally are written: - *
      - *
    • abs(x)
    • - *
    • log(x)
    • - *
    • sin(x)
    • - *
    • min(x1, x2, ...)
    • - *
    • max(x1, x2, ...)
    • - *
    • ...
    • - *
    - *
  • - *
  • Support for advanced mathematical functions: - *
      - *
    • sqrt(x)
    • - *
    • log(x)
    • - *
    • exp(x)
    • - *
    • sin(x)
    • - *
    • cos(x)
    • - *
    • tan(x)
    • - *
    • ...
    • - *
    - *
  • - *
  • Methods to access parts of a value: - *
      - *
    • getMantissa()
    • - *
    • getExponent()
    • - *
    • getIntegralPart()
    • - *
    • getFractionalPart()
    • - *
    - *
  • - *
  • Equals and Hashcode methods: - *
      - *
    • equals(Object) that returns whether two BigFloat values are mathematically the same
    • - *
    • hashCode() consistent with equals(Object)
    • - *
    - *
  • - *
  • Comparison methods: - *
      - *
    • isEqual(BigFloat)
    • - *
    • isLessThan(BigFloat)
    • - *
    • isLessThanOrEqual(BigFloat)
    • - *
    • isGreaterThan(BigFloat)
    • - *
    • isGreaterThanOrEqual(BigFloat)
    • - *
    - *
  • - *
- * - *

Usage

- * - *

Before doing any calculations you need to create a Context specifying the precision used for all calculations.

- *
- * Context context = BigFloat.context(100); // precision of 100 digits
- * Context anotherContext = BigFloat.context(new MathContext(10, RoundingMode.HALF_UP); // precision of 10 digits, rounding half up
- * 
- * - *

The Context can then be used to create the first value of the calculation:

- *
- * BigFloat value1 = context.valueOf(640320);
- * 
- * - *

The BigFloat instance holds a reference to the Context. This context is then passed from calculation to calculation.

- *
- * BigFloat value2 = context.valueOf(640320).pow(3).divide(24);
- * BigFloat value3 = BigFloat.sin(value2);
- * 
- * - *

The BigFloat result can be converted to other numerical types:

- *
- * BigDecimal bigDecimalValue = value3.toBigDecimal();
- * double doubleValue = value3.toDouble();
- * long longValue = value3.toLong();
- * int intValue = value3.toInt();
- * 
- */ -@SuppressWarnings("WeakerAccess") -public class BigFloat implements Comparable, Serializable { - private static final long serialVersionUID = -7323679117445486894L; - - /** - * Represents a value that is not a number. - * @see Double#NaN - */ - public static final BigFloat NaN = new SpecialBigFloat(SpecialBigFloat.Type.NaN); - - /** - * Represents the positive infinity. - * @see Double#POSITIVE_INFINITY - */ - public static final BigFloat POSITIVE_INFINITY = new SpecialBigFloat(SpecialBigFloat.Type.POSITIVE_INFINITY); - - /** - * Represents the positive infinity. - * @see Double#NEGATIVE_INFINITY - */ - public static final BigFloat NEGATIVE_INFINITY = new SpecialBigFloat(SpecialBigFloat.Type.NEGATIVE_INFINITY); - - private final BigDecimal value; - private final Context context; - - private BigFloat(BigDecimal value, Context context) { - this.value = value; - this.context = context; - } - - /** - * Creates a {@link Context} with the specified precision and {@link RoundingMode#HALF_UP} rounding. - * - * @param precision the precision - * - * @return the {@link Context} - */ - public static Context context(int precision) { - return new Context(new MathContext(precision)); - } - - /** - * Creates a {@link Context} with the specified {@link MathContext}. - * - * @param mathContext the {@link MathContext} - * - * @return the {@link Context} - */ - public static Context context(MathContext mathContext) { - return new Context(mathContext); - } - - /** - * Returns the {@link BigFloat} that is this + x. - * - *

If the two values do not have the same {@link Context}, the result will contain the {@link Context} with the larger precision.

- * - * @param x the value to add - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimal#add(BigDecimal, MathContext) - */ - public BigFloat add(BigFloat x) { - if (x.isSpecial()) - return x.add(this); - Context c = max(context, x.context); - return c.valueOf(value.add(x.value, c.mathContext)); - } - - /** - * Returns the {@link BigFloat} that is this + x. - * - * @param x the value to add - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimal#add(BigDecimal, MathContext) - */ - public BigFloat add(BigDecimal x) { - return add(context.valueOf(x)); - } - - /** - * Returns the {@link BigFloat} that is this + x. - * - * @param x the value to add - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimal#add(BigDecimal, MathContext) - */ - public BigFloat add(int x) { - return add(context.valueOf(x)); - } - - /** - * Returns the {@link BigFloat} that is this + x. - * - * @param x the value to add - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimal#add(BigDecimal, MathContext) - */ - public BigFloat add(long x) { - return add(context.valueOf(x)); - } - - /** - * Returns the {@link BigFloat} that is this + x. - * - * @param x the value to add - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimal#add(BigDecimal, MathContext) - */ - public BigFloat add(double x) { - return add(context.valueOf(x)); - } - - /** - * Returns the {@link BigFloat} that is this - x. - * - *

If the two values do not have the same {@link Context}, the result will contain the {@link Context} with the larger precision.

- * - * @param x the value to subtract - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimal#subtract(BigDecimal, MathContext) - */ - public BigFloat subtract(BigFloat x) { - if (x.isSpecial()) - return negate(x).add(this); - Context c = max(context, x.context); - return c.valueOf(value.subtract(x.value, c.mathContext)); - } - - /** - * Returns the {@link BigFloat} that is this - x. - * - * @param x the value to subtract - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimal#subtract(BigDecimal, MathContext) - */ - public BigFloat subtract(BigDecimal x) { - return subtract(context.valueOf(x)); - } - - /** - * Returns the {@link BigFloat} that is this - x. - * - * @param x the value to subtract - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimal#subtract(BigDecimal, MathContext) - */ - public BigFloat subtract(int x) { - return subtract(context.valueOf(x)); - } - - /** - * Returns the {@link BigFloat} that is this - x. - * - * @param x the value to subtract - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimal#subtract(BigDecimal, MathContext) - */ - public BigFloat subtract(long x) { - return subtract(context.valueOf(x)); - } - - /** - * Returns the {@link BigFloat} that is this - x. - * - * @param x the value to subtract - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimal#subtract(BigDecimal, MathContext) - */ - public BigFloat subtract(double x) { - return subtract(context.valueOf(x)); - } - - /** - * Returns the {@link BigFloat} that is this * x. - * - *

If the two values do not have the same {@link Context}, the result will contain the {@link Context} with the larger precision.

- * - * @param x the value to multiply - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimal#multiply(BigDecimal, MathContext) - */ - public BigFloat multiply(BigFloat x) { - if (x.isSpecial()) - return x.multiply(this); - Context c = max(context, x.context); - return c.valueOf(value.multiply(x.value, c.mathContext)); - } - - /** - * Returns the {@link BigFloat} that is this * x. - * - * @param x the value to multiply - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimal#multiply(BigDecimal, MathContext) - */ - public BigFloat multiply(BigDecimal x) { - return multiply(context.valueOf(x)); - } - - /** - * Returns the {@link BigFloat} that is this * x. - * - * @param x the value to multiply - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimal#multiply(BigDecimal, MathContext) - */ - public BigFloat multiply(int x) { - return multiply(context.valueOf(x)); - } - - /** - * Returns the {@link BigFloat} that is this * x. - * - * @param x the value to multiply - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimal#multiply(BigDecimal, MathContext) - */ - public BigFloat multiply(long x) { - return multiply(context.valueOf(x)); - } - - /** - * Returns the {@link BigFloat} that is this * x. - * - * @param x the value to multiply - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimal#multiply(BigDecimal, MathContext) - */ - public BigFloat multiply(double x) { - return multiply(context.valueOf(x)); - } - - /** - * Returns the {@link BigFloat} that is this / x. - * - *

If the two values do not have the same {@link Context}, - * the result will contain the {@link Context} with the larger precision.

- * - * @param x the value to divide with - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimal#divide(BigDecimal, MathContext) - */ - public BigFloat divide(BigFloat x) { - if (x.isSpecial()) { - if (x == NaN) { - return NaN; - } else { - return context.valueOf(0); - } - } - if (this.isZero() && !x.isZero()) { - return context.valueOf(0); - } - if (x.isZero()) { - if (this.isZero()) { - return NaN; // 0 or -0 / 0 = NaN - } else if (this.isNegative()) { - return NEGATIVE_INFINITY;// -N / 0 = -INF - } else { - return POSITIVE_INFINITY;// N / 0 = +INF - } - } - - Context c = max(context, x.context); - return c.valueOf(value.divide(x.value, c.mathContext)); - } - - /** - * Returns the {@link BigFloat} that is this / x. - * - * @param x the value to divide with - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimal#divide(BigDecimal, MathContext) - */ - public BigFloat divide(BigDecimal x) { - return divide(context.valueOf(x)); - } - - /** - * Returns the {@link BigFloat} that is this / x. - * - * @param x the value to divide with - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimal#divide(BigDecimal, MathContext) - */ - public BigFloat divide(int x) { - return divide(context.valueOf(x)); - } - - /** - * Returns the {@link BigFloat} that is this / x. - * - * @param x the value to divide with - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimal#divide(BigDecimal, MathContext) - */ - public BigFloat divide(long x) { - return divide(context.valueOf(x)); - } - - /** - * Returns the {@link BigFloat} that is this / x. - * - * @param x the value to divide with - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimal#divide(BigDecimal, MathContext) - */ - public BigFloat divide(double x) { - return divide(context.valueOf(x)); - } - - /** - * Returns the {@link BigFloat} that is the remainder when dividing this by x. - * - *

If the two values do not have the same {@link Context}, the result will contain the {@link Context} with the larger precision.

- * - * @param x the value to divide with - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimal#remainder(BigDecimal, MathContext) - */ - public BigFloat remainder(BigFloat x) { - if (x.isSpecial()) { - if (x == NaN) { - return NaN; - } else { - return this; - } - } - if (this.isZero() && !x.isZero()) { - return context.valueOf(0); - } - if (x.isZero()) { - return NaN; - } - - Context c = max(context, x.context); - return c.valueOf(value.remainder(x.value, c.mathContext)); - } - - /** - * Returns the {@link BigFloat} that is the remainder when dividing this by x. - * - * @param x the value to divide with - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimal#remainder(BigDecimal, MathContext) - */ - public BigFloat remainder(BigDecimal x) { - return remainder(context.valueOf(x)); - } - - /** - * Returns the {@link BigFloat} that is the remainder when dividing this by x. - * - * @param x the value to divide with - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimal#remainder(BigDecimal, MathContext) - */ - public BigFloat remainder(int x) { - return remainder(context.valueOf(x)); - } - - /** - * Returns the {@link BigFloat} that is the remainder when dividing this by x. - * - * @param x the value to divide with - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimal#remainder(BigDecimal, MathContext) - */ - public BigFloat remainder(long x) { - return remainder(context.valueOf(x)); - } - - /** - * Returns the {@link BigFloat} that is the remainder when dividing this by x. - * - * @param x the value to divide with - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimal#remainder(BigDecimal, MathContext) - */ - public BigFloat remainder(double x) { - return remainder(context.valueOf(x)); - } - - /** - * Returns the {@link BigFloat} that is this to the power of y. - * - *

If the two values do not have the same {@link Context}, the result will contain the {@link Context} with the larger precision.

- * - * @param y the value of the power - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimalMath#pow(BigDecimal, BigDecimal, MathContext) - */ - public BigFloat pow(BigFloat y) { - if (y.isSpecial()) { - if (this.isZero()) { - if (y == POSITIVE_INFINITY) { - return this; - } - if (y == NEGATIVE_INFINITY) { - return POSITIVE_INFINITY; - } - } - if (y == NEGATIVE_INFINITY) { - return context.ZERO; - } - return y; - } - if (this.isZero()) { - if (y.isNegative()) { - return POSITIVE_INFINITY; - } - } - - Context c = max(context, y.context); - return c.valueOf(BigDecimalMath.pow(this.value, y.value, c.mathContext)); - } - - /** - * Returns the {@link BigFloat} that is this to the power of y. - * - * @param y the value of the power - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimalMath#pow(BigDecimal, BigDecimal, MathContext) - */ - public BigFloat pow(BigDecimal y) { - return pow(context.valueOf(y)); - } - - /** - * Returns the {@link BigFloat} that is this to the power of y. - * - * @param y the value of the power - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimalMath#pow(BigDecimal, BigDecimal, MathContext) - */ - public BigFloat pow(int y) { - return pow(context.valueOf(y)); - } - - /** - * Returns the {@link BigFloat} that is this to the power of y. - * - * @param y the value of the power - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimalMath#pow(BigDecimal, BigDecimal, MathContext) - */ - public BigFloat pow(long y) { - return pow(context.valueOf(y)); - } - - /** - * Returns the {@link BigFloat} that is this to the power of y. - * - * @param y the value of the power - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimalMath#pow(BigDecimal, BigDecimal, MathContext) - */ - public BigFloat pow(double y) { - return pow(context.valueOf(y)); - } - - /** - * Returns the {@link BigFloat} that is the yth root of this. - * - *

If the two values do not have the same {@link Context}, the result will contain the {@link Context} with the larger precision.

- * - * @param y the value of the root - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimalMath#root(BigDecimal, BigDecimal, MathContext) - */ - public BigFloat root(BigFloat y) { - if (y.isSpecial()) - return y; - Context c = max(context, y.context); - return c.valueOf(BigDecimalMath.root(this.value, y.value, c.mathContext)); - } - - /** - * Returns the {@link BigFloat} that is the yth root of this. - * - * @param y the value of the root - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimalMath#root(BigDecimal, BigDecimal, MathContext) - */ - public BigFloat root(BigDecimal y) { - return root(context.valueOf(y)); - } - - /** - * Returns the {@link BigFloat} that is the yth root of this. - * - * @param y the value of the root - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimalMath#root(BigDecimal, BigDecimal, MathContext) - */ - public BigFloat root(int y) { - return root(context.valueOf(y)); - } - - /** - * Returns the {@link BigFloat} that is the yth root of this. - * - * @param y the value of the root - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimalMath#root(BigDecimal, BigDecimal, MathContext) - */ - public BigFloat root(long y) { - return root(context.valueOf(y)); - } - - /** - * Returns the {@link BigFloat} that is the yth root of this. - * - * @param y the value of the root - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimalMath#root(BigDecimal, BigDecimal, MathContext) - */ - public BigFloat root(double y) { - return root(context.valueOf(y)); - } - - @Override - public int hashCode() { - return value.stripTrailingZeros().hashCode(); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - BigFloat other = (BigFloat) obj; - - return value.compareTo(other.value) == 0; - //return Objects.equals(value, other.value) && Objects.equals(context, other.context); - } - - /** - * Returns the signum function of this {@link BigFloat}. - * - * @return -1, 0, or 1 as the value of this {@link BigDecimal} is negative, zero, or positive. - */ - public int signum() { - return value.signum(); - } - - /** - * Returns whether this {@link BigFloat} is negative. - * - * @return true if negative, false if 0 or positive - */ - public boolean isNegative() { - return value.signum() < 0; - } - - /** - * Returns whether this {@link BigFloat} is 0. - * - * @return true if 0, false if negative or positive - */ - public boolean isZero() { - return value.signum() == 0; - } - - /** - * Returns whether this {@link BigFloat} is positive. - * - * @return true if positive, false if 0 or negative - */ - public boolean isPositive() { - return value.signum() > 0; - } - - @Override - public int compareTo(BigFloat other) { - if (other.isSpecial()) { - return -other.compareTo(this); - } - return value.compareTo(other.value); - } - - /** - * Returns whether this value is mathematically equal to the other value. - * - * @param other the other {@link BigFloat} to compare with - * - * @return true if both values are mathematically equal (equivalent to this.compareTo(other) == 0 - * - * @see #compareTo(BigFloat) - */ - public boolean isEqual(BigFloat other) { - if (this == NaN || other == NaN) { - return false; - } - - return compareTo(other) == 0; - } - - /** - * Returns whether this value is mathematically less than to the other value. - * - * @param other the other {@link BigFloat} to compare with - * - * @return true this value is mathematically less than to the other value (equivalent to this.compareTo(other) < 0 - * - * @see #compareTo(BigFloat) - */ - public boolean isLessThan(BigFloat other) { - if (this == NaN || other == NaN) { - return false; - } - - return compareTo(other) < 0; - } - - /** - * Returns whether this value is mathematically greater than to the other value. - * - * @param other the other {@link BigFloat} to compare with - * - * @return true this value is mathematically greater than to the other value (equivalent to this.compareTo(other) > 0 - * - * @see #compareTo(BigFloat) - */ - public boolean isGreaterThan(BigFloat other) { - if (this == NaN || other == NaN) { - return false; - } - - return compareTo(other) > 0; - } - - /** - * Returns whether this value is mathematically less than or equal to the other value. - * - * @param other the other {@link BigFloat} to compare with - * - * @return true this value is mathematically less than or equal to the other value (equivalent to this.compareTo(other) <= 0 - * - * @see #compareTo(BigFloat) - * @see #isLessThan(BigFloat) - * @see #isEqual(BigFloat) - */ - public boolean isLessThanOrEqual(BigFloat other) { - if (this == NaN || other == NaN) { - return false; - } - - return compareTo(other) <= 0; - } - - /** - * Returns whether this value is mathematically greater than or equal to the other value. - * - * @param other the other {@link BigFloat} to compare with - * - * @return true this value is mathematically greater than or equal to the other value (equivalent to this.compareTo(other) >= 0 - * - * @see #compareTo(BigFloat) - * @see #isGreaterThan(BigFloat) - * @see #isEqual(BigFloat) - */ - public boolean isGreaterThanOrEqual(BigFloat other) { - if (this == NaN || other == NaN) { - return false; - } - - return compareTo(other) >= 0; - } - - /** - * Returns whether this value can be represented as int. - * - * @return true if the value can be represented as int value - * - * @see BigDecimalMath#isIntValue(BigDecimal) - */ - public boolean isIntValue() { - return BigDecimalMath.isIntValue(value); - } - - /** - * Returns whether this specified {@link BigDecimal} value can be represented as double. - * - * @return true if the value can be represented as double value - * - * @see BigDecimalMath#isDoubleValue(BigDecimal) - */ - public boolean isDoubleValue() { - return BigDecimalMath.isDoubleValue(value); - } - - /** - * Returns the mantissa of this value written as mantissa * 10exponent. - * - *

The mantissa is defined as having exactly 1 digit before the decimal point.

- * - * @return the mantissa - * - * @see #getExponent() - * @see BigDecimalMath#mantissa(BigDecimal) - */ - public BigFloat getMantissa() { - return context.valueOf(BigDecimalMath.mantissa(value)); - } - - /** - * Returns the exponent of this value written as mantissa * 10exponent. - * - *

The mantissa is defined as having exactly 1 digit before the decimal point.

- * - * @return the exponent - * - * @see #getMantissa() - * @see BigDecimalMath#exponent(BigDecimal) - */ - public BigFloat getExponent() { - return context.valueOf(BigDecimalMath.exponent(value)); - } - - /** - * Returns the integral part of this value (left of the decimal point). - * - * @return the integral part - * - * @see #getFractionalPart() - * @see BigDecimalMath#fractionalPart(BigDecimal) - */ - public BigFloat getIntegralPart() { - return context.valueOf(BigDecimalMath.integralPart(value)); - } - - /** - * Returns the fractional part of this value (right of the decimal point). - * - * @return the fractional part - * - * @see #getIntegralPart() - * @see BigDecimalMath#fractionalPart(BigDecimal) - */ - public BigFloat getFractionalPart() { - return context.valueOf(BigDecimalMath.fractionalPart(value)); - } - - /** - * Returns the {@link Context} of this value. - * - * @return the {@link Context} - */ - public Context getContext() { - return context; - } - - /** - * Returns this value as a {@link BigDecimal} value. - * - * @return the {@link BigDecimal} value - */ - public BigDecimal toBigDecimal() { - return value; - } - - /** - * Returns this value as a double value. - * - * @return the double value - * - * @see BigDecimal#doubleValue() - */ - public double toDouble() { - return value.doubleValue(); - } - - /** - * Returns this value as a long value. - * - * @return the long value - * - * @see BigDecimal#longValue() - */ - public long toLong() { - return value.longValue(); - } - - /** - * Returns this value as a int value. - * - * @return the int value - * - * @see BigDecimal#intValue() - */ - public int toInt() { - return value.intValue(); - } - - @Override - public String toString() { - return value.toString(); - } - - protected boolean isSpecial() { - return false; - } - - /** - * return special type of a value - * @return {@link SpecialBigFloat.Type} - */ - protected SpecialBigFloat.Type type() { - return SpecialBigFloat.Type.NORMAL; - } - - public boolean isNaN() { - return this == NaN; - } - - public boolean isInfinity() { - return this == POSITIVE_INFINITY || this == NEGATIVE_INFINITY; - } - - /** - * this class handle unrepresentable value in floating-point arithmetic - * - * @author Wireless4024 - */ - private static final class SpecialBigFloat extends BigFloat { - - private static final Context DUMMY_CONTEXT = BigFloat.context(MathContext.DECIMAL32); - - private final Type type; - - private SpecialBigFloat(Type type) { - super(null, DUMMY_CONTEXT); - this.type = type; - } - - @Override - protected boolean isSpecial() { - return true; - } - - @Override - protected Type type() { - return type; - } - - @Override - public BigFloat add(BigFloat x) { - if (!x.isSpecial()) { - return this; - } - if (this == POSITIVE_INFINITY && x == POSITIVE_INFINITY) { - return POSITIVE_INFINITY; - } - if (this == NEGATIVE_INFINITY && x == NEGATIVE_INFINITY) { - return NEGATIVE_INFINITY; - } - return NaN; - } - - @Override - public BigFloat subtract(BigFloat x) { - if (!x.isSpecial()) { - return this; - } - if (this == POSITIVE_INFINITY && x == NEGATIVE_INFINITY) { - return POSITIVE_INFINITY; - } - if (this == NEGATIVE_INFINITY && x == POSITIVE_INFINITY) { - return NEGATIVE_INFINITY; - } - return NaN; - } - - @Override - public BigFloat subtract(BigDecimal x) { - return this; - } - - @Override - public BigFloat multiply(BigFloat x) { - if (x.isZero() || x == NaN) { - return NaN; - } else if (x.isNegative()) { - return negate(this); - } else { - return this; - } - } - - @Override - public BigFloat divide(BigFloat x) { - if (x == NaN || (this.isInfinity() && x.isInfinity())) { - return NaN; - } else if (x.isNegative()) { - return negate(this); - } else { - return this; - } - } - - @Override - public BigFloat remainder(BigFloat x) { - return NaN; - } - - @Override - public BigFloat pow(BigFloat y) { - if (y.isZero()) { - return y.context.ONE; - } - if (y == NaN) { - return NaN; - } - if (this.isInfinity() && y.isNegative()) { - return y.context.ZERO; - } - if (this == NEGATIVE_INFINITY && y.isPositive()) { - return POSITIVE_INFINITY; - } - return this; - } - - @Override - public BigFloat root(BigFloat y) { - return this; - } - - @Override - public int hashCode() { - return type.hashCode; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - return obj instanceof BigFloat && ((BigFloat) obj).isSpecial() && ((BigFloat) obj).type() == this.type; - } - - @Override - public int signum() { - return type == Type.POSITIVE_INFINITY ? 1 : -1; - } - - @Override - public boolean isNegative() { - return signum() < 0; - } - - @Override - public boolean isZero() { - return false;//nan or infinity is not a zero - } - - @Override - public boolean isPositive() { - return signum() > 0; - } - - @Override - public int compareTo(BigFloat other) { - return Type.compare(type, other.type()); - } - - @Override - public boolean isIntValue() { - return false; - } - - @Override - public boolean isDoubleValue() { - return false; - } - - @Override - public BigFloat getMantissa() { - return this; - } - - @Override - public BigFloat getExponent() { - return this; - } - - @Override - public BigFloat getIntegralPart() { - return this; - } - - @Override - public BigFloat getFractionalPart() { - return this; - } - - @Override - public Context getContext() { - throw new UnsupportedOperationException(type + " has no context"); - } - - @Override - public BigDecimal toBigDecimal() { - throw new UnsupportedOperationException(type + " has no corresponding BigDecimal representation"); - } - - @Override - public double toDouble() { - return type.toDouble(); - } - - @Override - public long toLong() { - return (long) toDouble(); - } - - @Override - public int toInt() { - return (int) toDouble(); - } - - @Override - public String toString() { - return type.toString(); - } - - //optional static - enum Type { - NaN(Objects.hashCode(Double.NaN)), - POSITIVE_INFINITY(Objects.hashCode(Double.POSITIVE_INFINITY)), - NORMAL(Objects.hashCode(0)), - NEGATIVE_INFINITY(Objects.hashCode(Double.NEGATIVE_INFINITY)); - - final int hashCode; - - Type(int hashCode){ - this.hashCode=hashCode; - } - - public static int compare(Type a, Type b) { - //we can use double to compare - //if (a == NaN && b == NaN) - // return 0;//cuz NaN equals nothing even itself - return Double.compare(a.toDouble(),b.toDouble()); - } - - /** - * convert type to double - * @return double value that equivalent to {@link Type} - */ - public double toDouble() { - switch (this) { - case POSITIVE_INFINITY: - return Double.POSITIVE_INFINITY; - case NEGATIVE_INFINITY: - return Double.NEGATIVE_INFINITY; - case NaN: - return Double.NaN; - default: - return 0; - } - } - } - } - - /** - * Manages the {@link MathContext} and provides factory methods for {@link BigFloat} values. - */ - public static class Context implements Serializable{ - private static final long serialVersionUID = -5787473786808803161L; - public final BigFloat NEGATIVE_ONE; - public final BigFloat ZERO; - public final BigFloat ONE; - - private final MathContext mathContext; - - private Context(MathContext mathContext) { - this.mathContext = mathContext; - NEGATIVE_ONE = this.valueOf(-1); - ZERO = this.valueOf(0); - ONE = this.valueOf(1); - } - - /** - * Returns the {@link MathContext} of this context. - * - * @return the {@link MathContext} - */ - public MathContext getMathContext() { - return mathContext; - } - - /** - * Returns the precision of this context. - *

- * This is equivalent to calling getMathContext().getPrecision(). - * - * @return the precision - */ - public int getPrecision() { - return mathContext.getPrecision(); - } - - /** - * Returns the {@link RoundingMode} of this context. - *

- * This is equivalent to calling getMathContext().getRoundingMode(). - * - * @return the {@link RoundingMode} - */ - public RoundingMode getRoundingMode() { - return mathContext.getRoundingMode(); - } - - /** - * Creates a {@link BigFloat} value with this context. - * - * @param value the source {@link BigFloat} value - * - * @return the {@link BigFloat} value with this context (rounded to the precision of this context) - */ - public BigFloat valueOf(BigFloat value) { - return value.isSpecial() ? value : new BigFloat(value.value.round(mathContext), this);//they are final - } - - /** - * Creates a {@link BigFloat} value with this context. - * - * @param value the source {@link BigDecimal} value - * - * @return the {@link BigFloat} value with this context (rounded to the precision of this context) - */ - public BigFloat valueOf(BigDecimal value) { - return new BigFloat(value.round(mathContext), this); - } - - /** - * Creates a {@link BigFloat} value with this context. - * - * @param value the source int value - * - * @return the {@link BigFloat} value with this context (rounded to the precision of this context) - */ - public BigFloat valueOf(int value) { - return new BigFloat(new BigDecimal(value, mathContext), this); - } - - /** - * parse unsigned value with this logic

value & 4294967295
- * @param value an int value - * @param unsigned if true value will parse as unsigned integer - * @return the {@link BigFloat} value with this context (rounded to the precision of this context) - */ - public BigFloat valueOf(int value, boolean unsigned) { - if (!unsigned) { - return new BigFloat(new BigDecimal(value, mathContext), this); - } else { - if (value > -1) - return valueOf(value, false); - return new BigFloat(new BigDecimal(Integer.MAX_VALUE) - .add(new BigDecimal(value & Integer.MAX_VALUE)) - .add(BigDecimal.ONE), this); - } - } - - /** - * Creates a {@link BigFloat} value with this context. - * - * @param value the source long value - * - * @return the {@link BigFloat} value with this context (rounded to the precision of this context) - */ - public BigFloat valueOf(long value) { - return new BigFloat(new BigDecimal(value, mathContext), this); - } - - /** - * parse unsigned value with this logic
value & 18446744073709551615
- * @param value an int value - * @param unsigned if true value will parse as unsigned integer - * @return the {@link BigFloat} value with this context (rounded to the precision of this context) - */ - public BigFloat valueOf(long value, boolean unsigned) { - if (!unsigned) { - return new BigFloat(new BigDecimal(value, mathContext), this); - } else { - if (value > -1) - return valueOf(value, false); - return new BigFloat(new BigDecimal(Long.MAX_VALUE) - .add(new BigDecimal(value & Long.MAX_VALUE)) - .add(BigDecimal.ONE), this); - } - } - - /** - * Creates a {@link BigFloat} value with this context. - * - * @param value the source double value - * - * @return the {@link BigFloat} value with this context (rounded to the precision of this context) - */ - public BigFloat valueOf(double value) { - if (Double.isInfinite(value)) - return value == Double.POSITIVE_INFINITY ? POSITIVE_INFINITY : NEGATIVE_INFINITY; - else if (Double.isNaN(value)) - return NaN; - return new BigFloat(new BigDecimal(String.valueOf(value), mathContext), this); - } - - /** - * Creates a {@link BigFloat} value with this context. - * - * @param value the source String value - * - * @return the {@link BigFloat} value with this context (rounded to the precision of this context) - * - * @throws NumberFormatException if the value is not a valid number. - */ - public BigFloat valueOf(String value) { - return new BigFloat(new BigDecimal(value, mathContext), this); - } - - /** - * Returns the constant pi with this context. - * - * @return pi with this context (rounded to the precision of this context) - * - * @see BigDecimalMath#pi(MathContext) - */ - public BigFloat pi() { - return valueOf(BigDecimalMath.pi(mathContext)); - } - - /** - * Returns the constant e with this context. - * - * @return e with this context (rounded to the precision of this context) - * - * @see BigDecimalMath#e(MathContext) - */ - public BigFloat e() { - return valueOf(BigDecimalMath.e(mathContext)); - } - - /** - * Returns the factorial of n with this context. - * - * @param n the value to calculate - * - * @return the factorial of n with this context (rounded to the precision of this context) - * - * @see BigDecimalMath#factorial(int) - */ - public BigFloat factorial(int n) { - return valueOf(BigDecimalMath.factorial(n)); - } - - @Override - public int hashCode() { - return mathContext.hashCode(); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - Context other = (Context) obj; - return mathContext.equals(other.mathContext); - } - - @Override - public String toString() { - return mathContext.toString(); - } - } - /** - * Returns the {@link BigFloat} that is - this. - * - * @param x the value to negate - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimal#negate(MathContext) - */ - public static BigFloat negate(BigFloat x) { - if (x.isSpecial()) - if (x.isInfinity()) - return x == POSITIVE_INFINITY ? NEGATIVE_INFINITY : POSITIVE_INFINITY; - else - return NaN; - return x.context.valueOf(x.value.negate()); - } - - /** - * Returns the {@link BigFloat} that is the abs(this) (absolute value). - * - * @param x the value to make absolute - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimal#abs(MathContext) - */ - public static BigFloat abs(BigFloat x) { - if (x.isSpecial()) - return x.isInfinity() ? POSITIVE_INFINITY : NaN; - return x.context.valueOf(x.value.abs()); - } - - /** - * Returns the the maximum of two {@link BigFloat} values. - * - * @param value1 the first {@link BigFloat} value to compare - * @param value2 the second {@link BigFloat} value to compare - * - * @return the maximum {@link BigFloat} value - */ - public static BigFloat max(BigFloat value1, BigFloat value2) { - return value1.compareTo(value2) >= 0 ? value1 : value2; - } - - /** - * Returns the the maximum of n {@link BigFloat} values. - * - * @param value1 the first {@link BigFloat} value to compare - * @param values the other {@link BigFloat}s value to compare - * - * @return the maximum {@link BigFloat} value - */ - public static BigFloat max(BigFloat value1, BigFloat... values) { - BigFloat result = value1; - - for (BigFloat other : values) { - result = max(result, other); - } - - return result; - } - - /** - * Returns the the minimum of two {@link BigFloat} values. - * - * @param value1 the first {@link BigFloat} value to compare - * @param value2 the second {@link BigFloat} value to compare - * - * @return the minimum {@link BigFloat} value - */ - public static BigFloat min(BigFloat value1, BigFloat value2) { - return value1.compareTo(value2) < 0 ? value1 : value2; - } - - /** - * Returns the the minimum of n {@link BigFloat} values. - * - * @param value1 the first {@link BigFloat} value to compare - * @param values the other {@link BigFloat}s value to compare - * - * @return the minimum {@link BigFloat} value - */ - public static BigFloat min(BigFloat value1, BigFloat... values) { - BigFloat result = value1; - - for (BigFloat other : values) { - result = min(result, other); - } - - return result; - } - - private static BigFloat logSpecial(BigFloat val){ - if (val.isNaN() || val.isNegative()) - return NaN; - if (val == POSITIVE_INFINITY) - return POSITIVE_INFINITY; - if (val.isZero()) - return NEGATIVE_INFINITY; - return null; - } - - /** - * Returns the {@link BigFloat} that is log(x). - * - * @param x the value - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimalMath#log(BigDecimal, MathContext) - */ - public static BigFloat log(BigFloat x) { - BigFloat temp = logSpecial(x); - return temp != null ? temp : x.context.valueOf(BigDecimalMath.log(x.value, x.context.mathContext)); - } - - /** - * Returns the {@link BigFloat} that is log2(x). - * - * @param x the value - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimalMath#log2(BigDecimal, MathContext) - */ - public static BigFloat log2(BigFloat x) { - BigFloat temp = logSpecial(x); - return temp != null ? temp : x.context.valueOf(BigDecimalMath.log2(x.value, x.context.mathContext)); - } - - /** - * Returns the {@link BigFloat} that is log10(x). - * - * @param x the value - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimalMath#log10(BigDecimal, MathContext) - */ - public static BigFloat log10(BigFloat x) { - BigFloat temp = logSpecial(x); - return temp != null ? temp : x.context.valueOf(BigDecimalMath.log10(x.value, x.context.mathContext)); - } - - /** - * Returns the {@link BigFloat} that is exp(x). - * - * @param x the value - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimalMath#exp(BigDecimal, MathContext) - */ - public static BigFloat exp(BigFloat x) { - if(x.isSpecial()) - return x != NEGATIVE_INFINITY ? x : x.context.ZERO; - return x.context.valueOf(BigDecimalMath.exp(x.value, x.context.mathContext)); - } - - /** - * Returns the {@link BigFloat} that is sqrt(x). - * - * @param x the value - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimalMath#sqrt(BigDecimal, MathContext) - */ - public static BigFloat sqrt(BigFloat x) { - if (x.isNaN() || x.isNegative()) - return NaN; - if (x.isZero() || x.isInfinity()) - return x; - return x.context.valueOf(BigDecimalMath.sqrt(x.value, x.context.mathContext)); - } - - /** - * Returns the {@link BigFloat} that is pow(x, y). - * - *

If the two values do not have the same {@link Context}, the result will contain the {@link Context} with the larger precision.

- * - * @param x the {@link BigFloat} value to take to the power - * @param y the {@link BigFloat} value to serve as exponent - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimalMath#pow(BigDecimal, BigDecimal, MathContext) - */ - public static BigFloat pow(BigFloat x, BigFloat y) { - Context c = max(x.context, y.context); - return c.valueOf(BigDecimalMath.pow(x.value, y.value, c.mathContext)); - } - - /** - * Returns the {@link BigFloat} that is root(x, y). - * - *

If the two values do not have the same {@link Context}, the result will contain the {@link Context} with the larger precision.

- * - * @param x the {@link BigFloat} value to calculate the n'th root - * @param y the {@link BigFloat} defining the root - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimalMath#pow(BigDecimal, BigDecimal, MathContext) - */ - public static BigFloat root(BigFloat x, BigFloat y) { - Context c = max(x.context, y.context); - return c.valueOf(BigDecimalMath.root(x.value, y.value, c.mathContext)); - } - - /** - * Returns the {@link BigFloat} that is sin(x). - * - * @param x the value - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimalMath#sin(BigDecimal, MathContext) - */ - public static BigFloat sin(BigFloat x) { - if(x.isSpecial()) - return NaN; - if(x.isZero()) - return x; - return x.context.valueOf(BigDecimalMath.sin(x.value, x.context.mathContext)); - } - - /** - * Returns the {@link BigFloat} that is cos(x). - * - * @param x the value - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimalMath#cos(BigDecimal, MathContext) - */ - public static BigFloat cos(BigFloat x) { - if(x.isSpecial()) - return NaN; - return x.context.valueOf(BigDecimalMath.cos(x.value, x.context.mathContext)); - } - - /** - * Returns the {@link BigFloat} that is tan(x). - * - * @param x the value - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimalMath#tan(BigDecimal, MathContext) - */ - public static BigFloat tan(BigFloat x) { - if(x.isSpecial()) - return NaN; - if(x.isZero()) - return x; - return x.context.valueOf(BigDecimalMath.tan(x.value, x.context.mathContext)); - } - - /** - * Returns the {@link BigFloat} that is cot(x). - * - * @param x the value - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimalMath#cot(BigDecimal, MathContext) - */ - public static BigFloat cot(BigFloat x) { - if(x.isSpecial()) - return x; - if(x.isZero()) - return POSITIVE_INFINITY; - return x.context.valueOf(BigDecimalMath.cot(x.value, x.context.mathContext)); - } - - /** - * Returns the {@link BigFloat} that is asin(x). - * - * @param x the value - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimalMath#asin(BigDecimal, MathContext) - */ - public static BigFloat asin(BigFloat x) { - if (x.isZero()) - return x; - return x.isNaN() || (!isRangeAbs1(x)) ? NaN : - x.context.valueOf(BigDecimalMath.asin(x.value, x.context.mathContext)); - } - - /** - * Returns the {@link BigFloat} that is acos(x). - * - * @param x the value - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimalMath#acos(BigDecimal, MathContext) - */ - public static BigFloat acos(BigFloat x) { - return x.isNaN() || (!isRangeAbs1(x)) ? NaN : - x.context.valueOf(BigDecimalMath.acos(x.value, x.context.mathContext)); - } - - /** - * @param x a bigfloat - * @return if abs(x) <= 1 - */ - private static boolean isRangeAbs1(BigFloat x) { - return isBetween(x.context.NEGATIVE_ONE, x.context.ONE, x); - } - - /** - * Returns the {@link BigFloat} that is atan(x). - * - * @param x the value - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimalMath#atan(BigDecimal, MathContext) - */ - public static BigFloat atan(BigFloat x) { - return x.isSpecial() || x.isZero() ? x : x.context.valueOf(BigDecimalMath.atan(x.value, x.context.mathContext)); - } - - /** - * Returns the {@link BigFloat} that is acot(x). - * - * @param x the value - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimalMath#acot(BigDecimal, MathContext) - */ - public static BigFloat acot(BigFloat x) { - return x.isSpecial() ? x : x.context.valueOf(BigDecimalMath.acot(x.value, x.context.mathContext)); - } - - /** - * Returns the {@link BigFloat} that is sinh(x). - * - * @param x the value - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimalMath#sinh(BigDecimal, MathContext) - */ - public static BigFloat sinh(BigFloat x) { - if (x.isSpecial() || x.isZero()) - return x; - return x.context.valueOf(BigDecimalMath.sinh(x.value, x.context.mathContext)); - } - - /** - * Returns the {@link BigFloat} that is cosh(x). - * - * @param x the value - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimalMath#cosh(BigDecimal, MathContext) - */ - public static BigFloat cosh(BigFloat x) { - if (x.isNaN()) - return NaN; - if (x.isInfinity()) - return POSITIVE_INFINITY; - if (x.isZero()) - return x.context.ONE; - return x.context.valueOf(BigDecimalMath.cosh(x.value, x.context.mathContext)); - } - - /** - * Returns the {@link BigFloat} that is tanh(x). - * - * @param x the value - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimalMath#tanh(BigDecimal, MathContext) - */ - public static BigFloat tanh(BigFloat x) { - if (x.isNaN() || x.isZero()) - return x; - if (x.isInfinity()) - return x == POSITIVE_INFINITY ? x.context.ONE : x.context.NEGATIVE_ONE; - return x.context.valueOf(BigDecimalMath.tanh(x.value, x.context.mathContext)); - } - - /** - * Returns the {@link BigFloat} that is coth(x). - * - * @param x the value - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimalMath#coth(BigDecimal, MathContext) - */ - public static BigFloat coth(BigFloat x) { - if(x.isSpecial()) - return x; - return x.context.valueOf(BigDecimalMath.coth(x.value, x.context.mathContext)); - } - - /** - * Returns the {@link BigFloat} that is asinh(x). - * - * @param x the value - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimalMath#asinh(BigDecimal, MathContext) - */ - public static BigFloat asinh(BigFloat x) { - if(x.isSpecial()) - return x; - return x.context.valueOf(BigDecimalMath.asinh(x.value, x.context.mathContext)); - } - - /** - * Returns the {@link BigFloat} that is acosh(x). - * - * @param x the value - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimalMath#acosh(BigDecimal, MathContext) - */ - public static BigFloat acosh(BigFloat x) { - return x.context.valueOf(BigDecimalMath.acosh(x.value, x.context.mathContext)); - } - - /** - * Returns the {@link BigFloat} that is atanh(x). - * - * @param x the value - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimalMath#atanh(BigDecimal, MathContext) - */ - public static BigFloat atanh(BigFloat x) { - if(x.isSpecial()) - return x; - return x.context.valueOf(BigDecimalMath.atanh(x.value, x.context.mathContext)); - } - - /** - * Returns the {@link BigFloat} that is acoth(x). - * - * @param x the value - * - * @return the resulting {@link BigFloat} - * - * @see BigDecimalMath#acoth(BigDecimal, MathContext) - */ - public static BigFloat acoth(BigFloat x) { - if(x.isSpecial()) - return x; - return x.context.valueOf(BigDecimalMath.acoth(x.value, x.context.mathContext)); - } - - public static boolean isBetween(BigFloat min, BigFloat max, BigFloat value) { - return value.compareTo(min) >= 0 && value.compareTo(max) <= 0; - } - - private static Context max(Context left, Context right) { - return left.mathContext.getPrecision() > right.mathContext.getPrecision() ? left : right; - } -} diff --git a/src/main/java/ch/obermuhlner/math/big/BigRational.java b/src/main/java/ch/obermuhlner/math/big/BigRational.java deleted file mode 100644 index 2d7389c7de..0000000000 --- a/src/main/java/ch/obermuhlner/math/big/BigRational.java +++ /dev/null @@ -1,1103 +0,0 @@ -package ch.obermuhlner.math.big; - -import java.math.BigDecimal; -import java.math.BigInteger; -import java.math.MathContext; -import java.math.RoundingMode; -import java.util.ArrayList; -import java.util.List; -import java.util.stream.IntStream; - -/** - * A rational number represented as a quotient of two values. - * - *

Basic calculations with rational numbers (+ - * /) have no loss of precision. - * This allows to use {@link BigRational} as a replacement for {@link BigDecimal} if absolute accuracy is desired.

- * - *

Wikipedia: Rational number

- * - *

The values are internally stored as {@link BigDecimal} (for performance optimizations) but represented - * as {@link BigInteger} (for mathematical correctness) - * when accessed with {@link #getNumeratorBigInteger()} and {@link #getDenominatorBigInteger()}.

- * - *

The following basic calculations have no loss of precision:

- *
    - *
  • {@link #add(BigRational)}
  • - *
  • {@link #subtract(BigRational)}
  • - *
  • {@link #multiply(BigRational)}
  • - *
  • {@link #divide(BigRational)}
  • - *
  • {@link #pow(int)}
  • - *
- * - *

The following calculations are special cases of the ones listed above and have no loss of precision:

- *
    - *
  • {@link #negate()}
  • - *
  • {@link #reciprocal()}
  • - *
  • {@link #increment()}
  • - *
  • {@link #decrement()}
  • - *
- * - *

Any {@link BigRational} value can be converted into an arbitrary {@link #withPrecision(int) precision} (number of significant digits) - * or {@link #withScale(int) scale} (number of digits after the decimal point).

- */ -public class BigRational implements Comparable { - - /** - * The value 0 as {@link BigRational}. - */ - public static final BigRational ZERO = new BigRational(0); - /** - * The value 1 as {@link BigRational}. - */ - public static final BigRational ONE = new BigRational(1); - /** - * The value 2 as {@link BigRational}. - */ - public static final BigRational TWO = new BigRational(2); - /** - * The value 10 as {@link BigRational}. - */ - public static final BigRational TEN = new BigRational(10); - - private final BigDecimal numerator; - - private final BigDecimal denominator; - - private BigRational(int value) { - this(BigDecimal.valueOf(value), BigDecimal.ONE); - } - - private BigRational(BigDecimal num, BigDecimal denom) { - BigDecimal n = num; - BigDecimal d = denom; - - if (d.signum() == 0) { - throw new ArithmeticException("Divide by zero"); - } - - if (d.signum() < 0) { - n = n.negate(); - d = d.negate(); - } - - numerator = n; - denominator = d; - } - - /** - * Returns the numerator of this rational number as BigInteger. - * - * @return the numerator as BigInteger - */ - public BigInteger getNumeratorBigInteger() { - return numerator.toBigInteger(); - } - - /** - * Returns the numerator of this rational number as BigDecimal. - * - * @return the numerator as BigDecimal - */ - public BigDecimal getNumerator() { - return numerator; - } - - /** - * Returns the denominator of this rational number as BigInteger. - * - *

Guaranteed to not be 0.

- *

Guaranteed to be positive.

- * - * @return the denominator as BigInteger - */ - public BigInteger getDenominatorBigInteger() { - return denominator.toBigInteger(); - } - - /** - * Returns the denominator of this rational number as BigDecimal. - * - *

Guaranteed to not be 0.

- *

Guaranteed to be positive.

- * - * @return the denominator as BigDecimal - */ - public BigDecimal getDenominator() { - return denominator; - } - - /** - * Reduces this rational number to the smallest numerator/denominator with the same value. - * - * @return the reduced rational number - */ - public BigRational reduce() { - BigInteger n = numerator.toBigInteger(); - BigInteger d = denominator.toBigInteger(); - - BigInteger gcd = n.gcd(d); - n = n.divide(gcd); - d = d.divide(gcd); - - return valueOf(n, d); - } - - /** - * Returns the integer part of this rational number. - * - *

Examples:

- *
    - *
  • BigRational.valueOf(3.5).integerPart() returns BigRational.valueOf(3)
  • - *
- * - * @return the integer part of this rational number - */ - public BigRational integerPart() { - return of(numerator.subtract(numerator.remainder(denominator)), denominator); - } - - /** - * Returns the fraction part of this rational number. - * - *

Examples:

- *
    - *
  • BigRational.valueOf(3.5).integerPart() returns BigRational.valueOf(0.5)
  • - *
- * - * @return the fraction part of this rational number - */ - public BigRational fractionPart() { - return of(numerator.remainder(denominator), denominator); - } - - /** - * Negates this rational number (inverting the sign). - * - *

The result has no loss of precision.

- * - *

Examples:

- *
    - *
  • BigRational.valueOf(3.5).negate() returns BigRational.valueOf(-3.5)
  • - *
- * - * @return the negated rational number - */ - public BigRational negate() { - if (isZero()) { - return this; - } - - return of(numerator.negate(), denominator); - } - - /** - * Calculates the reciprocal of this rational number (1/x). - * - *

The result has no loss of precision.

- * - *

Examples:

- *
    - *
  • BigRational.valueOf(0.5).reciprocal() returns BigRational.valueOf(2)
  • - *
  • BigRational.valueOf(-2).reciprocal() returns BigRational.valueOf(-0.5)
  • - *
- * - * @return the reciprocal rational number - * @throws ArithmeticException if this number is 0 (division by zero) - */ - public BigRational reciprocal() { - return of(denominator, numerator); - } - - /** - * Returns the absolute value of this rational number. - * - *

The result has no loss of precision.

- * - *

Examples:

- *
    - *
  • BigRational.valueOf(-2).abs() returns BigRational.valueOf(2)
  • - *
  • BigRational.valueOf(2).abs() returns BigRational.valueOf(2)
  • - *
- * - * @return the absolute rational number (positive, or 0 if this rational is 0) - */ - public BigRational abs() { - return isPositive() ? this : negate(); - } - - /** - * Returns the signum function of this rational number. - * - * @return -1, 0 or 1 as the value of this rational number is negative, zero or positive. - */ - public int signum() { - return numerator.signum(); - } - - /** - * Calculates the increment of this rational number (+ 1). - * - *

This is functionally identical to - * this.add(BigRational.ONE) - * but slightly faster.

- * - *

The result has no loss of precision.

- * - * @return the incremented rational number - */ - public BigRational increment() { - return of(numerator.add(denominator), denominator); - } - - /** - * Calculates the decrement of this rational number (- 1). - * - *

This is functionally identical to - * this.subtract(BigRational.ONE) - * but slightly faster.

- * - *

The result has no loss of precision.

- * - * @return the decremented rational number - */ - public BigRational decrement() { - return of(numerator.subtract(denominator), denominator); - } - - /** - * Calculates the addition (+) of this rational number and the specified argument. - * - *

The result has no loss of precision.

- * - * @param value the rational number to add - * @return the resulting rational number - */ - public BigRational add(BigRational value) { - if (denominator.equals(value.denominator)) { - return of(numerator.add(value.numerator), denominator); - } - - BigDecimal n = numerator.multiply(value.denominator).add(value.numerator.multiply(denominator)); - BigDecimal d = denominator.multiply(value.denominator); - return of(n, d); - } - - private BigRational add(BigDecimal value) { - return of(numerator.add(value.multiply(denominator)), denominator); - } - - /** - * Calculates the addition (+) of this rational number and the specified argument. - * - *

This is functionally identical to - * this.add(BigRational.valueOf(value)) - * but slightly faster.

- * - *

The result has no loss of precision.

- * - * @param value the {@link BigInteger} to add - * @return the resulting rational number - */ - public BigRational add(BigInteger value) { - if (value.equals(BigInteger.ZERO)) { - return this; - } - return add(new BigDecimal(value)); - } - - /** - * Calculates the addition (+) of this rational number and the specified argument. - * - *

This is functionally identical to - * this.add(BigRational.valueOf(value)) - * but slightly faster.

- * - *

The result has no loss of precision.

- * - * @param value the int value to add - * @return the resulting rational number - */ - public BigRational add(int value) { - if (value == 0) { - return this; - } - return add(BigInteger.valueOf(value)); - } - - /** - * Calculates the subtraction (-) of this rational number and the specified argument. - * - *

The result has no loss of precision.

- * - * @param value the rational number to subtract - * @return the resulting rational number - */ - public BigRational subtract(BigRational value) { - if (denominator.equals(value.denominator)) { - return of(numerator.subtract(value.numerator), denominator); - } - - BigDecimal n = numerator.multiply(value.denominator).subtract(value.numerator.multiply(denominator)); - BigDecimal d = denominator.multiply(value.denominator); - return of(n, d); - } - - private BigRational subtract(BigDecimal value) { - return of(numerator.subtract(value.multiply(denominator)), denominator); - } - - /** - * Calculates the subtraction (-) of this rational number and the specified argument. - * - *

This is functionally identical to - * this.subtract(BigRational.valueOf(value)) - * but slightly faster.

- * - *

The result has no loss of precision.

- * - * @param value the {@link BigInteger} to subtract - * @return the resulting rational number - */ - public BigRational subtract(BigInteger value) { - if (value.equals(BigInteger.ZERO)) { - return this; - } - return subtract(new BigDecimal(value)); - } - - /** - * Calculates the subtraction (-) of this rational number and the specified argument. - * - *

This is functionally identical to - * this.subtract(BigRational.valueOf(value)) - * but slightly faster.

- * - *

The result has no loss of precision.

- * - * @param value the int value to subtract - * @return the resulting rational number - */ - public BigRational subtract(int value) { - if (value == 0) { - return this; - } - return subtract(BigInteger.valueOf(value)); - } - - /** - * Calculates the multiplication (*) of this rational number and the specified argument. - * - *

The result has no loss of precision.

- * - * @param value the rational number to multiply - * @return the resulting rational number - */ - public BigRational multiply(BigRational value) { - if (isZero() || value.isZero()) { - return ZERO; - } - if (equals(ONE)) { - return value; - } - if (value.equals(ONE)) { - return this; - } - - BigDecimal n = numerator.multiply(value.numerator); - BigDecimal d = denominator.multiply(value.denominator); - return of(n, d); - } - - // private, because we want to hide that we use BigDecimal internally - private BigRational multiply(BigDecimal value) { - BigDecimal n = numerator.multiply(value); - BigDecimal d = denominator; - return of(n, d); - } - - /** - * Calculates the multiplication (*) of this rational number and the specified argument. - * - *

This is functionally identical to - * this.multiply(BigRational.valueOf(value)) - * but slightly faster.

- * - *

The result has no loss of precision.

- * - * @param value the {@link BigInteger} to multiply - * @return the resulting rational number - */ - public BigRational multiply(BigInteger value) { - if (isZero() || value.signum() == 0) { - return ZERO; - } - if (equals(ONE)) { - return valueOf(value); - } - if (value.equals(BigInteger.ONE)) { - return this; - } - - return multiply(new BigDecimal(value)); - } - - /** - * Calculates the multiplication (*) of this rational number and the specified argument. - * - *

This is functionally identical to - * this.multiply(BigRational.valueOf(value)) - * but slightly faster.

- * - *

The result has no loss of precision.

- * - * @param value the int value to multiply - * @return the resulting rational number - */ - public BigRational multiply(int value) { - return multiply(BigInteger.valueOf(value)); - } - - /** - * Calculates the division (/) of this rational number and the specified argument. - * - *

The result has no loss of precision.

- * - * @param value the rational number to divide (0 is not allowed) - * @return the resulting rational number - * @throws ArithmeticException if the argument is 0 (division by zero) - */ - public BigRational divide(BigRational value) { - if (value.equals(ONE)) { - return this; - } - - BigDecimal n = numerator.multiply(value.denominator); - BigDecimal d = denominator.multiply(value.numerator); - return of(n, d); - } - - private BigRational divide(BigDecimal value) { - BigDecimal n = numerator; - BigDecimal d = denominator.multiply(value); - return of(n, d); - } - - /** - * Calculates the division (/) of this rational number and the specified argument. - * - *

This is functionally identical to - * this.divide(BigRational.valueOf(value)) - * but slightly faster.

- * - *

The result has no loss of precision.

- * - * @param value the {@link BigInteger} to divide (0 is not allowed) - * @return the resulting rational number - * @throws ArithmeticException if the argument is 0 (division by zero) - */ - public BigRational divide(BigInteger value) { - if (value.equals(BigInteger.ONE)) { - return this; - } - - return divide(new BigDecimal(value)); - } - - /** - * Calculates the division (/) of this rational number and the specified argument. - * - *

This is functionally identical to - * this.divide(BigRational.valueOf(value)) - * but slightly faster.

- * - *

The result has no loss of precision.

- * - * @param value the int value to divide (0 is not allowed) - * @return the resulting rational number - * @throws ArithmeticException if the argument is 0 (division by zero) - */ - public BigRational divide(int value) { - return divide(BigInteger.valueOf(value)); - } - - /** - * Returns whether this rational number is zero. - * - * @return true if this rational number is zero (0), false if it is not zero - */ - public boolean isZero() { - return numerator.signum() == 0; - } - - private boolean isPositive() { - return numerator.signum() > 0; - } - - /** - * Returns whether this rational number is an integer number without fraction part. - * - * @return true if this rational number is an integer number, false if it has a fraction part - */ - public boolean isInteger() { - return isIntegerInternal() || reduce().isIntegerInternal(); - } - - /** - * Returns whether this rational number is an integer number without fraction part. - * - *

Will return false if this number is not reduced to the integer representation yet (e.g. 4/4 or 4/2)

- * - * @return true if this rational number is an integer number, false if it has a fraction part - * @see #isInteger() - */ - private boolean isIntegerInternal() { - return denominator.compareTo(BigDecimal.ONE) == 0; - } - - /** - * Calculates this rational number to the power (xy) of the specified argument. - * - *

The result has no loss of precision.

- * - * @param exponent exponent to which this rational number is to be raised - * @return the resulting rational number - */ - public BigRational pow(int exponent) { - if (exponent == 0) { - return ONE; - } - if (exponent == 1) { - return this; - } - - final BigInteger n; - final BigInteger d; - if (exponent > 0) { - n = numerator.toBigInteger().pow(exponent); - d = denominator.toBigInteger().pow(exponent); - } - else { - n = denominator.toBigInteger().pow(-exponent); - d = numerator.toBigInteger().pow(-exponent); - } - return valueOf(n, d); - } - - /** - * Finds the minimum (smaller) of two rational numbers. - * - * @param value the rational number to compare with - * @return the minimum rational number, either this or the argument value - */ - private BigRational min(BigRational value) { - return compareTo(value) <= 0 ? this : value; - } - - /** - * Finds the maximum (larger) of two rational numbers. - * - * @param value the rational number to compare with - * @return the minimum rational number, either this or the argument value - */ - private BigRational max(BigRational value) { - return compareTo(value) >= 0 ? this : value; - } - - /** - * Returns a rational number with approximatively this value and the specified precision. - * - * @param precision the precision (number of significant digits) of the calculated result, or 0 for unlimited precision - * @return the calculated rational number with the specified precision - */ - public BigRational withPrecision(int precision) { - return valueOf(toBigDecimal(new MathContext(precision))); - } - - /** - * Returns a rational number with approximatively this value and the specified scale. - * - * @param scale the scale (number of digits after the decimal point) of the calculated result - * @return the calculated rational number with the specified scale - */ - public BigRational withScale(int scale) { - return valueOf(toBigDecimal().setScale(scale, RoundingMode.HALF_UP)); - } - - private static int countDigits(BigInteger number) { - double factor = Math.log(2) / Math.log(10); - int digitCount = (int) (factor * number.bitLength() + 1); - if (BigInteger.TEN.pow(digitCount - 1).compareTo(number) > 0) { - return digitCount - 1; - } - return digitCount; - } - - // TODO what is precision of a rational? - private int precision() { - return countDigits(numerator.toBigInteger()) + countDigits(denominator.toBigInteger()); - } - - /** - * Returns this rational number as a double value. - * - * @return the double value - */ - public double toDouble() { - // TODO best accuracy or maybe bigDecimalValue().doubleValue() is better? - return numerator.doubleValue() / denominator.doubleValue(); - } - - /** - * Returns this rational number as a float value. - * - * @return the float value - */ - public float toFloat() { - return numerator.floatValue() / denominator.floatValue(); - } - - /** - * Returns this rational number as a {@link BigDecimal}. - * - * @return the {@link BigDecimal} value - */ - public BigDecimal toBigDecimal() { - int precision = Math.max(precision(), MathContext.DECIMAL128.getPrecision()); - return toBigDecimal(new MathContext(precision)); - } - - /** - * Returns this rational number as a {@link BigDecimal} with the precision specified by the {@link MathContext}. - * - * @param mc the {@link MathContext} specifying the precision of the calculated result - * @return the {@link BigDecimal} - */ - public BigDecimal toBigDecimal(MathContext mc) { - return numerator.divide(denominator, mc); - } - - @Override - public int compareTo(BigRational other) { - if (this == other) { - return 0; - } - return numerator.multiply(other.denominator).compareTo(denominator.multiply(other.numerator)); - } - - @Override - public int hashCode() { - if (isZero()) { - return 0; - } - return numerator.hashCode() + denominator.hashCode(); - } - - @Override - public boolean equals(Object obj) { - if (obj == this) { - return true; - } - - if (!(obj instanceof BigRational)) { - return false; - } - - BigRational other = (BigRational) obj; - if (!numerator.equals(other.numerator)) { - return false; - } - return denominator.equals(other.denominator); - } - - @Override - public String toString() { - if (isZero()) { - return "0"; - } - if (isIntegerInternal()) { - return numerator.toString(); - } - return toBigDecimal().toString(); - } - - /** - * Returns a plain string representation of this rational number without any exponent. - * - * @return the plain string representation - * @see BigDecimal#toPlainString() - */ - public String toPlainString() { - if (isZero()) { - return "0"; - } - if (isIntegerInternal()) { - return numerator.toPlainString(); - } - return toBigDecimal().toPlainString(); - } - - /** - * Returns the string representation of this rational number in the form "numerator/denominator". - * - *

The resulting string is a valid input of the {@link #valueOf(String)} method.

- * - *

Examples:

- *
    - *
  • BigRational.valueOf(0.5).toRationalString() returns "1/2"
  • - *
  • BigRational.valueOf(2).toRationalString() returns "2"
  • - *
  • BigRational.valueOf(4, 4).toRationalString() returns "4/4" (not reduced)
  • - *
- * - * @return the rational number string representation in the form "numerator/denominator", or "0" if the rational number is 0. - * @see #valueOf(String) - * @see #valueOf(int, int) - */ - public String toRationalString() { - if (isZero()) { - return "0"; - } - if (isIntegerInternal()) { - return numerator.toString(); - } - return numerator + "/" + denominator; - } - - /** - * Returns the string representation of this rational number as integer and fraction parts in the form "integerPart fractionNominator/fractionDenominator". - * - *

The integer part is omitted if it is 0 (when this absolute rational number is smaller than 1).

- *

The fraction part is omitted it it is 0 (when this rational number is an integer).

- *

If this rational number is 0, then "0" is returned.

- * - *

Example: BigRational.valueOf(3.5).toIntegerRationalString() returns "3 1/2".

- * - * @return the integer and fraction rational string representation - * @see #valueOf(int, int, int) - */ - public String toIntegerRationalString() { - BigDecimal fractionNumerator = numerator.remainder(denominator); - BigDecimal integerNumerator = numerator.subtract(fractionNumerator); - BigDecimal integerPart = integerNumerator.divide(denominator); - - StringBuilder result = new StringBuilder(); - if (integerPart.signum() != 0) { - result.append(integerPart); - } - if (fractionNumerator.signum() != 0) { - if (result.length() > 0) { - result.append(' '); - } - result.append(fractionNumerator.abs()); - result.append('/'); - result.append(denominator); - } - if (result.length() == 0) { - result.append('0'); - } - - return result.toString(); - } - - /** - * Creates a rational number of the specified int value. - * - * @param value the int value - * @return the rational number - */ - public static BigRational valueOf(int value) { - if (value == 0) { - return ZERO; - } - if (value == 1) { - return ONE; - } - return new BigRational(value); - } - - /** - * Creates a rational number of the specified numerator/denominator int values. - * - * @param numerator the numerator int value - * @param denominator the denominator int value (0 not allowed) - * @return the rational number - * @throws ArithmeticException if the denominator is 0 (division by zero) - */ - public static BigRational valueOf(int numerator, int denominator) { - return of(BigDecimal.valueOf(numerator), BigDecimal.valueOf(denominator)); - } - - /** - * Creates a rational number of the specified integer and fraction parts. - * - *

Useful to create numbers like 3 1/2 (= three and a half = 3.5) by calling - * BigRational.valueOf(3, 1, 2).

- *

To create a negative rational only the integer part argument is allowed to be negative: - * to create -3 1/2 (= minus three and a half = -3.5) call BigRational.valueOf(-3, 1, 2).

- * - * @param integer the integer part int value - * @param fractionNumerator the fraction part numerator int value (negative not allowed) - * @param fractionDenominator the fraction part denominator int value (0 or negative not allowed) - * @return the rational number - * @throws ArithmeticException if the fraction part denominator is 0 (division by zero), - * or if the fraction part numerator or denominator is negative - */ - public static BigRational valueOf(int integer, int fractionNumerator, int fractionDenominator) { - if (fractionNumerator < 0 || fractionDenominator < 0) { - throw new ArithmeticException("Negative value"); - } - - BigRational integerPart = valueOf(integer); - BigRational fractionPart = valueOf(fractionNumerator, fractionDenominator); - return integerPart.isPositive() ? integerPart.add(fractionPart) : integerPart.subtract(fractionPart); - } - - /** - * Creates a rational number of the specified numerator/denominator BigInteger values. - * - * @param numerator the numerator {@link BigInteger} value - * @param denominator the denominator {@link BigInteger} value (0 not allowed) - * @return the rational number - * @throws ArithmeticException if the denominator is 0 (division by zero) - */ - public static BigRational valueOf(BigInteger numerator, BigInteger denominator) { - return of(new BigDecimal(numerator), new BigDecimal(denominator)); - } - - /** - * Creates a rational number of the specified {@link BigInteger} value. - * - * @param value the {@link BigInteger} value - * @return the rational number - */ - public static BigRational valueOf(BigInteger value) { - if (value.compareTo(BigInteger.ZERO) == 0) { - return ZERO; - } - if (value.compareTo(BigInteger.ONE) == 0) { - return ONE; - } - return valueOf(value, BigInteger.ONE); - } - - /** - * Creates a rational number of the specified double value. - * - * @param value the double value - * @return the rational number - * @throws NumberFormatException if the double value is Infinite or NaN. - */ - public static BigRational valueOf(double value) { - if (value == 0.0) { - return ZERO; - } - if (value == 1.0) { - return ONE; - } - if (Double.isInfinite(value)) { - throw new NumberFormatException("Infinite"); - } - if (Double.isNaN(value)) { - throw new NumberFormatException("NaN"); - } - return valueOf(new BigDecimal(String.valueOf(value))); - } - - /** - * Creates a rational number of the specified {@link BigDecimal} value. - * - * @param value the double value - * @return the rational number - */ - public static BigRational valueOf(BigDecimal value) { - if (value.compareTo(BigDecimal.ZERO) == 0) { - return ZERO; - } - if (value.compareTo(BigDecimal.ONE) == 0) { - return ONE; - } - - int scale = value.scale(); - if (scale == 0) { - return new BigRational(value, BigDecimal.ONE); - } else if (scale < 0) { - BigDecimal n = new BigDecimal(value.unscaledValue()).multiply(BigDecimal.ONE.movePointLeft(value.scale())); - return new BigRational(n, BigDecimal.ONE); - } - else { - BigDecimal n = new BigDecimal(value.unscaledValue()); - BigDecimal d = BigDecimal.ONE.movePointRight(value.scale()); - return new BigRational(n, d); - } - } - - /** - * Creates a rational number of the specified string representation. - * - *

The accepted string representations are:

- *
    - *
  • Output of {@link BigRational#toString()} : "integerPart.fractionPart"
  • - *
  • Output of {@link BigRational#toRationalString()} : "numerator/denominator"
  • - *
  • Output of toString() of {@link BigDecimal}, {@link BigInteger}, {@link Integer}, ...
  • - *
  • Output of toString() of {@link Double}, {@link Float} - except "Infinity", "-Infinity" and "NaN"
  • - *
- * - * @param string the string representation to convert - * @return the rational number - * @throws ArithmeticException if the denominator is 0 (division by zero) - */ - public static BigRational valueOf(String string) { - String[] strings = string.split("/"); - BigRational result = valueOfSimple(strings[0]); - for (int i = 1; i < strings.length; i++) { - result = result.divide(valueOfSimple(strings[i])); - } - return result; - } - - private static BigRational valueOfSimple(String string) { - return valueOf(new BigDecimal(string)); - } - - public static BigRational valueOf(boolean positive, String integerPart, String fractionPart, String fractionRepeatPart, String exponentPart) { - BigRational result = ZERO; - - if (fractionRepeatPart != null && fractionRepeatPart.length() > 0) { - BigInteger lotsOfNines = BigInteger.TEN.pow(fractionRepeatPart.length()).subtract(BigInteger.ONE); - result = valueOf(new BigInteger(fractionRepeatPart), lotsOfNines); - } - - if (fractionPart != null && fractionPart.length() > 0) { - result = result.add(valueOf(new BigInteger(fractionPart))); - result = result.divide(BigInteger.TEN.pow(fractionPart.length())); - } - - if (integerPart != null && integerPart.length() > 0) { - result = result.add(new BigInteger(integerPart)); - } - - if (exponentPart != null && exponentPart.length() > 0) { - int exponent = Integer.parseInt(exponentPart); - BigInteger powerOfTen = BigInteger.TEN.pow(Math.abs(exponent)); - result = exponent >= 0 ? result.multiply(powerOfTen) : result.divide(powerOfTen); - } - - if (!positive) { - result = result.negate(); - } - - return result; - } - - /** - * Creates a rational number of the specified numerator/denominator BigDecimal values. - * - * @param numerator the numerator {@link BigDecimal} value - * @param denominator the denominator {@link BigDecimal} value (0 not allowed) - * @return the rational number - * @throws ArithmeticException if the denominator is 0 (division by zero) - */ - public static BigRational valueOf(BigDecimal numerator, BigDecimal denominator) { - return valueOf(numerator).divide(valueOf(denominator)); - } - - private static BigRational of(BigDecimal numerator, BigDecimal denominator) { - if (numerator.signum() == 0 && denominator.signum() != 0) { - return ZERO; - } - if (numerator.compareTo(BigDecimal.ONE) == 0 && denominator.compareTo(BigDecimal.ONE) == 0) { - return ONE; - } - return new BigRational(numerator, denominator); - } - - /** - * Returns the smallest of the specified rational numbers. - * - * @param values the rational numbers to compare - * @return the smallest rational number, 0 if no numbers are specified - */ - public static BigRational min(BigRational... values) { - if (values.length == 0) { - return BigRational.ZERO; - } - BigRational result = values[0]; - for (int i = 1; i < values.length; i++) { - result = result.min(values[i]); - } - return result; - } - - /** - * Returns the largest of the specified rational numbers. - * - * @param values the rational numbers to compare - * @return the largest rational number, 0 if no numbers are specified - * @see #max(BigRational) - */ - public static BigRational max(BigRational... values) { - if (values.length == 0) { - return BigRational.ZERO; - } - BigRational result = values[0]; - for (int i = 1; i < values.length; i++) { - result = result.max(values[i]); - } - return result; - } - - private static List bernoulliCache = new ArrayList<>(); - - /** - * Calculates the Bernoulli number for the specified index. - * - *

This function calculates the first Bernoulli numbers and therefore bernoulli(1) returns -0.5

- *

Note that bernoulli(x) for all odd x > 1 returns 0

- *

See: Wikipedia: Bernoulli number

- * - * @param n the index of the Bernoulli number to be calculated (starting at 0) - * @return the Bernoulli number for the specified index - * @throws ArithmeticException if x is lesser than 0 - */ - public static BigRational bernoulli(int n) { - if (n < 0) { - throw new ArithmeticException("Illegal bernoulli(n) for n < 0: n = " + n); - } - if (n == 1) { - return valueOf(-1, 2); - } else if (n % 2 == 1) { - return ZERO; - } - - synchronized (bernoulliCache) { - int index = n / 2; - - if (bernoulliCache.size() <= index) { - for (int i = bernoulliCache.size(); i <= index; i++) { - BigRational b = calculateBernoulli(i * 2); - bernoulliCache.add(b); - } - } - - return bernoulliCache.get(index); - } - } - - private static BigRational calculateBernoulli(int n) { - return IntStream.rangeClosed(0, n).parallel().mapToObj(k -> { - BigRational jSum = ZERO ; - BigRational bin = ONE ; - for(int j=0 ; j <= k ; j++) { - BigRational jPowN = valueOf(j).pow(n); - if (j % 2 == 0) { - jSum = jSum.add(bin.multiply(jPowN)) ; - } else { - jSum = jSum.subtract(bin.multiply(jPowN)) ; - } - - bin = bin.multiply(valueOf(k-j).divide(valueOf(j+1))); - } - return jSum.divide(valueOf(k+1)); - }).reduce(ZERO, BigRational::add); - } - -} diff --git a/src/main/java/ch/obermuhlner/math/big/DefaultBigDecimalMath.java b/src/main/java/ch/obermuhlner/math/big/DefaultBigDecimalMath.java deleted file mode 100644 index d6dca31ecf..0000000000 --- a/src/main/java/ch/obermuhlner/math/big/DefaultBigDecimalMath.java +++ /dev/null @@ -1,736 +0,0 @@ -package ch.obermuhlner.math.big; - -import java.math.BigDecimal; -import java.math.MathContext; -import java.math.RoundingMode; -import java.util.*; - -/** - * A wrapper around {@link BigDecimalMath} that passes a current {@link MathContext} to the - * functions that need a {@link MathContext} argument. - * - *

The initial default {@link MathContext} is equivalent to {@link MathContext#DECIMAL128} - * but this can be overridden by setting the following system properties:

- *
    - *
  • ch.obermuhlner.math.big.default.precision to a positive integer precision (default=34)
  • - *
  • ch.obermuhlner.math.big.default.rounding to a {@link RoundingMode} name (default=HALF_UP)
  • - *
- * - *

It is also possible to programmatically set the default {@link MathContext} using {@link #setDefaultMathContext(MathContext)}. - * It is recommended to set the desired precision in the {@link MathContext} very early in the startup of the application and to not change it afterwards.

- * - *

Important: Avoid the pitfall of setting the precision temporarily using {@link #setDefaultMathContext(MathContext)} for a calculation. - * This can lead to race conditions and calculations with the wrong precision - * if other threads in your application do the same thing.

- * - *

To set a temporary {@link MathContext} you have to choice to use either: - *

    - *
  • DefaultBigDecimalMath.createLocalMathContext() in a try-with-resources statement
  • - *
  • DefaultBigDecimalMath.withLocalMathContext() with a lambda function
  • - *
- * - * Example code using DefaultBigDecimalMath.createLocalMathContext(): - *
-System.out.println("Pi[default]: " + DefaultBigDecimalMath.pi());
-try (DefaultBigDecimalMath.LocalMathContext context = DefaultBigDecimalMath.createLocalMathContext(5)) {
-    System.out.println("Pi[5]: " + DefaultBigDecimalMath.pi());
-    try (DefaultBigDecimalMath.LocalMathContext context2 = DefaultBigDecimalMath.createLocalMathContext(10)) {
-        System.out.println("Pi[10]: " + DefaultBigDecimalMath.pi());
-    }
-    System.out.println("Pi[5]: " + DefaultBigDecimalMath.pi());
-}
-System.out.println("Pi[default]: " + DefaultBigDecimalMath.pi());
- 
- * - * Example code using DefaultBigDecimalMath.withLocalMathContext(): - *
-System.out.println("Pi[default]: " + DefaultBigDecimalMath.pi());
-DefaultBigDecimalMath.withPrecision(5, () -> {
-    System.out.println("Pi[5]: " + DefaultBigDecimalMath.pi());
-    DefaultBigDecimalMath.withPrecision(10, () -> {
-        System.out.println("Pi[10]: " + DefaultBigDecimalMath.pi());
-    });
-    System.out.println("Pi[5]: " + DefaultBigDecimalMath.pi());
-});
-System.out.println("Pi[default]: " + DefaultBigDecimalMath.pi());
-
- * - * Both snippets with give the following ouput: - *
-Pi[default]: 3.141592653589793238462643383279503
-Pi[5]: 3.1416
-Pi[10]: 3.141592654
-Pi[5]: 3.1416
-Pi[default]: 3.141592653589793238462643383279503
-
- *

The temporary {@link MathContext} are stored in {@link ThreadLocal} variables - * and will therefore not conflict with each other when used in multi-threaded use case.

- * - *

Important: Due to the {@link ThreadLocal} variables the local {@link MathContext} will - * not be available in other threads. - * This includes streams using parallel(), thread pools and manually started threads. - * If you need temporary {@link MathContext} for calculations then you must - * set the local {@link MathContext} inside every separate thread.

- * - *
-try (DefaultBigDecimalMath.LocalMathContext context = DefaultBigDecimalMath.createLocalMathContext(5)) {
-    BigDecimalStream.range(0.0, 1.0, 0.01, DefaultBigDecimalMath.currentMathContext())
-        .map(b -> DefaultBigDecimalMath.cos(b))
-        .map(b -> "sequential " + Thread.currentThread().getName() + " [5]: " + b)
-        .forEach(System.out::println);
-
-    BigDecimalStream.range(0.0, 1.0, 0.01, DefaultBigDecimalMath.currentMathContext())
-        .parallel()
-        .map(b -> {
-            try (DefaultBigDecimalMath.LocalMathContext context2 = DefaultBigDecimalMath.createLocalMathContext(5)) {
-                return DefaultBigDecimalMath.cos(b);
-            }
-        })
-        .map(b -> "parallel " + Thread.currentThread().getName() + " [5]: " + b)
-        .forEach(System.out::println);
-}
-
- */ -public class DefaultBigDecimalMath { - - private static MathContext defaultMathContext = createDefaultMathContext(); - private static ThreadLocal> mathContextStack = new ThreadLocal<>(); - - private static MathContext createDefaultMathContext () { - int precision = getIntSystemProperty("ch.obermuhlner.math.big.default.precision", MathContext.DECIMAL128.getPrecision()); - RoundingMode rounding = getRoundingModeSystemProperty("ch.obermuhlner.math.big.default.rounding", MathContext.DECIMAL128.getRoundingMode()); - - return new MathContext(precision, rounding); - } - - private static void pushMathContext(MathContext mathContext) { - Deque mathContexts = mathContextStack.get(); - if (mathContexts == null) { - mathContexts = new ArrayDeque<>(); - mathContextStack.set(mathContexts); - }; - mathContexts.addLast(mathContext); - } - - private static MathContext popMathContext() { - Deque mathContexts = mathContextStack.get(); - MathContext poppedMathContext = mathContexts.removeLast(); - if (mathContexts.isEmpty()) { - mathContextStack.remove(); - } - return poppedMathContext; - } - - private static int getIntSystemProperty(String propertyKey, int defaultValue) { - String propertyValue = System.getProperty(propertyKey, Integer.toString(defaultValue)); - try { - return Integer.parseInt(propertyValue); - } catch(NumberFormatException ex) { - return propertyException(propertyKey,propertyValue,defaultValue); - } - } - - private static RoundingMode getRoundingModeSystemProperty(String propertyKey, RoundingMode defaultValue) { - String propertyValue = System.getProperty(propertyKey, defaultValue.name()); - try { - return RoundingMode.valueOf(propertyValue); - } catch(IllegalArgumentException ex) { - return propertyException(propertyKey,propertyValue,defaultValue); - } - } - - private static T propertyException(String propertyKey,String propertyValue,T defaultValue){ - System.err.println("Property '" + propertyKey + "' is not valid: " + propertyValue + " (using " + defaultValue + " instead)"); - return defaultValue; - } - - /** - * Sets the default {@link MathContext} used if no other {@link MathContext} is defined using {@link #withLocalMathContext(MathContext, Runnable)}. - * - * @param defaultMathContext the default {@link MathContext} - * @see #currentMathContext() - * @see #withLocalMathContext(int, Runnable) - * @see #withLocalMathContext(int, RoundingMode, Runnable) - * @see #withLocalMathContext(MathContext, Runnable) - */ - public static void setDefaultMathContext(MathContext defaultMathContext) { - Objects.requireNonNull(defaultMathContext); - DefaultBigDecimalMath.defaultMathContext = defaultMathContext; - } - - /** - * Returns the default {@link MathContext} used for all mathematical functions in this class. - * - * @return the default {@link MathContext} - */ - public static MathContext getDefaultMathContext() { - return defaultMathContext; - } - - /** - * Executes the given {@link Runnable} using the specified precision. - * - * @param precision the precision to use for calculations in the runnable - * @param runnable the {@link Runnable} to execute - */ - public static void withLocalMathContext(int precision, Runnable runnable) { - withLocalMathContext(new MathContext(precision), runnable); - } - - /** - * Executes the given {@link Runnable} using the specified precision and {@link RoundingMode}. - * - * @param precision the precision to use for calculations in the runnable - * @param roundingMode the {@link RoundingMode} to use for calculations in the runnable - * @param runnable the {@link Runnable} to execute - */ - public static void withLocalMathContext(int precision, RoundingMode roundingMode, Runnable runnable) { - withLocalMathContext(new MathContext(precision, roundingMode), runnable); - } - - /** - * Executes the given {@link Runnable} using the specified {@link MathContext}. - * - * @param mathContext the {@link MathContext} to use for calculations in the runnable - * @param runnable the {@link Runnable} to execute - */ - public static void withLocalMathContext(MathContext mathContext, Runnable runnable) { - try (LocalMathContext context = createLocalMathContext(mathContext)) { - runnable.run(); - } - } - - /** - * Executes the given {@link Runnable} using the specified precision. - * - * @param precision the precision to use for calculations - * @return the created {@link LocalMathContext} to be used in a try-with-resources statement - */ - public static LocalMathContext createLocalMathContext(int precision) { - return createLocalMathContext(new MathContext(precision)); - } - - /** - * Executes the given {@link Runnable} using the specified precision and {@link RoundingMode}. - * - * @param precision the precision to use for calculations - * @param roundingMode the {@link RoundingMode} to use for calculations in the runnable - * @return the created {@link LocalMathContext} to be used in a try-with-resources statement - */ - public static LocalMathContext createLocalMathContext(int precision, RoundingMode roundingMode) { - return createLocalMathContext(new MathContext(precision, roundingMode)); - } - - /** - * Executes the given {@link Runnable} using the specified {@link MathContext}. - * - * @param mathContext the {@link MathContext} to use for calculations - * @return the created {@link LocalMathContext} to be used in a try-with-resources statement - */ - public static LocalMathContext createLocalMathContext(MathContext mathContext) { - return new LocalMathContext(mathContext); - } - - /** - * Returns the current {@link MathContext} used for all mathematical functions in this class. - * - *

The current {@link MathContext} is the last {@link MathContext} specified - * using {@link #withLocalMathContext(MathContext, Runnable)} - * or the default {@link MathContext} if none was specified.

- * - * @return the current {@link MathContext} - * @see #currentMathContext() - * @see #withLocalMathContext(int, Runnable) - * @see #withLocalMathContext(int, RoundingMode, Runnable) - * @see #withLocalMathContext(MathContext, Runnable) - */ - public static MathContext currentMathContext() { - Deque mathContexts = mathContextStack.get(); - if (mathContexts == null || mathContexts.isEmpty()) { - return defaultMathContext; - } - - return mathContexts.getLast(); - } - - /** - * Rounds the specified {@link BigDecimal} to the precision of the current {@link MathContext}. - * - * @param value the {@link BigDecimal} to round - * @return the rounded {@link BigDecimal} value - * @see #currentMathContext() - * @see BigDecimalMath#round(BigDecimal, MathContext) - */ - public static BigDecimal round(BigDecimal value) { - return BigDecimalMath.round(value, defaultMathContext); - } - - /** - * Rounds the specified {@link BigDecimal} to the precision of the current {@link MathContext} including trailing zeroes. - * - * @param value the {@link BigDecimal} to round - * @return the rounded {@link BigDecimal} value including trailing zeroes - * @see #currentMathContext() - * @see BigDecimalMath#roundWithTrailingZeroes(BigDecimal, MathContext) - */ - public static BigDecimal roundWithTrailingZeroes(BigDecimal value) { - return BigDecimalMath.roundWithTrailingZeroes(value, currentMathContext()); - } - - /** - * Returns the {@link BigDecimal} that is x + y using the current {@link MathContext}. - * - * @param x the x value - * @param y the y value to add - * @return the resulting {@link BigDecimal} with the precision specified in the current {@link MathContext} - * @see #currentMathContext() - * @see BigDecimal#add(BigDecimal, MathContext) - */ - public static BigDecimal add(BigDecimal x, BigDecimal y) { - return x.add(y, currentMathContext()); - } - - /** - * Returns the {@link BigDecimal} that is x - y using the current {@link MathContext}. - * - * @param x the x value - * @param y the y value to subtract - * @return the resulting {@link BigDecimal} with the precision specified in the current {@link MathContext} - * @see #currentMathContext() - * @see BigDecimal#subtract(BigDecimal, MathContext) - */ - public static BigDecimal subtract(BigDecimal x, BigDecimal y) { - return x.subtract(y, currentMathContext()); - } - - /** - * Returns the {@link BigDecimal} that is x * y using the current {@link MathContext}. - * - * @param x the x value - * @param y the y value to multiply - * @return the resulting {@link BigDecimal} with the precision specified in the current {@link MathContext} - * @see #currentMathContext() - * @see BigDecimal#multiply(BigDecimal, MathContext) - */ - public static BigDecimal multiply(BigDecimal x, BigDecimal y) { - return x.multiply(y, currentMathContext()); - } - - /** - * Returns the {@link BigDecimal} that is x / y using the current {@link MathContext}. - * - * @param x the x value - * @param y the y value to divide - * @return the resulting {@link BigDecimal} with the precision specified in the current {@link MathContext} - * @see #currentMathContext() - * @see BigDecimal#divide(BigDecimal, MathContext) - */ - public static BigDecimal divide(BigDecimal x, BigDecimal y) { - return x.divide(y, currentMathContext()); - } - - /** - * Returns the {@link BigDecimal} that is x % y using the current {@link MathContext}. - * - * @param x the x value - * @param y the y value to divide - * @return the resulting {@link BigDecimal} with the precision specified in the current {@link MathContext} - * @see #currentMathContext() - * @see BigDecimal#remainder(BigDecimal, MathContext) - */ - public static BigDecimal remainder(BigDecimal x, BigDecimal y) { - return x.remainder(y, currentMathContext()); - } - - /** - * Calculates the reciprocal of the specified {@link BigDecimal} using the current {@link MathContext}. - * - * @param x the {@link BigDecimal} - * @return the reciprocal {@link BigDecimal} with the precision specified in the current {@link MathContext} - * @see #currentMathContext() - * @see BigDecimalMath#reciprocal(BigDecimal, MathContext) - */ - public static BigDecimal reciprocal(BigDecimal x) { - return BigDecimalMath.reciprocal(x, currentMathContext()); - } - - /** - * Calculates the factorial of the specified {@link BigDecimal} using the current {@link MathContext}. - * - * @param x the {@link BigDecimal} - * @return the factorial {@link BigDecimal} with the precision specified in the current {@link MathContext} - * @see #currentMathContext() - * @see BigDecimalMath#factorial(BigDecimal, MathContext) - */ - public static BigDecimal factorial(BigDecimal x) { - return BigDecimalMath.factorial(x, currentMathContext()); - } - - /** - * Calculates the gamma function of the specified {@link BigDecimal} using the current {@link MathContext}. - * - * @param x the {@link BigDecimal} - * @return the gamma {@link BigDecimal} with the precision specified in the current {@link MathContext} - * @see #currentMathContext() - * @see BigDecimalMath#gamma(BigDecimal, MathContext) - */ - public static BigDecimal gamma(BigDecimal x) { - return BigDecimalMath.gamma(x, currentMathContext()); - } - - /** - * Calculates the Bernoulli number for the specified index using the current {@link MathContext}. - * - * @param n the index of the Bernoulli number to be calculated (starting at 0) - * @return the Bernoulli number for the specified index with the precision specified in the current {@link MathContext} - * @see #currentMathContext() - * @see BigDecimalMath#bernoulli(int, MathContext) - */ - public static BigDecimal bernoulli(int n) { - return BigDecimalMath.bernoulli(n, currentMathContext()); - } - - /** - * Calculates {@link BigDecimal} x to the power of {@link BigDecimal} y (xy) using the current {@link MathContext}. - * - * @param x the {@link BigDecimal} value to take to the power - * @param y the {@link BigDecimal} value to serve as exponent - * @return the calculated x to the power of y with the precision specified in the current {@link MathContext} - * @see #currentMathContext() - * @see BigDecimalMath#pow(BigDecimal, BigDecimal, MathContext) - */ - public static BigDecimal pow(BigDecimal x, BigDecimal y) { - return BigDecimalMath.pow(x, y, currentMathContext()); - } - - /** - * Calculates {@link BigDecimal} x to the power of long y (xy) using the current {@link MathContext}. - * - * @param x the {@link BigDecimal} value to take to the power - * @param y the long value to serve as exponent - * @return the calculated x to the power of y with the precision specified in the current {@link MathContext} - * @see #currentMathContext() - * @see BigDecimalMath#pow(BigDecimal, long, MathContext) - */ - public static BigDecimal pow(BigDecimal x, long y) { - return BigDecimalMath.pow(x, y, currentMathContext()); - } - - /** - * Calculates the square root of {@link BigDecimal} x using the current {@link MathContext}. - * - * @param x the {@link BigDecimal} value to calculate the square root - * @return the calculated square root of x with the precision specified in the current {@link MathContext} - * @see #currentMathContext() - * @see BigDecimalMath#sqrt(BigDecimal, MathContext) - */ - public static BigDecimal sqrt(BigDecimal x) { - return BigDecimalMath.sqrt(x, currentMathContext()); - } - - /** - * Calculates the n'th root of {@link BigDecimal} x using the current {@link MathContext}. - * - * @param x the {@link BigDecimal} value to calculate the n'th root - * @param n the {@link BigDecimal} defining the root - * - * @return the calculated n'th root of x with the precision specified in the current {@link MathContext} - * @see #currentMathContext() - * @see BigDecimalMath#root(BigDecimal, BigDecimal, MathContext) - */ - public static BigDecimal root(BigDecimal x, BigDecimal n) { - return BigDecimalMath.root(x, n, currentMathContext()); - } - - /** - * Calculates the natural logarithm of {@link BigDecimal} x using the current {@link MathContext}. - * - * @param x the {@link BigDecimal} to calculate the natural logarithm for - * @return the calculated natural logarithm {@link BigDecimal} with the precision specified in the current {@link MathContext} - * @see #currentMathContext() - * @see BigDecimalMath#log(BigDecimal, MathContext) - */ - public static BigDecimal log(BigDecimal x) { - return BigDecimalMath.log(x, currentMathContext()); - } - - /** - * Calculates the logarithm of {@link BigDecimal} x to the base 2 using the current {@link MathContext}. - * - * @param x the {@link BigDecimal} to calculate the logarithm base 2 for - * @return the calculated natural logarithm {@link BigDecimal} to the base 2 with the precision specified in the current {@link MathContext} - * @see #currentMathContext() - * @see BigDecimalMath#log2(BigDecimal, MathContext) - */ - public static BigDecimal log2(BigDecimal x) { - return BigDecimalMath.log2(x, currentMathContext()); - } - - /** - * Calculates the logarithm of {@link BigDecimal} x to the base 10 using the current {@link MathContext}. - * - * @param x the {@link BigDecimal} to calculate the logarithm base 10 for - * @return the calculated natural logarithm {@link BigDecimal} to the base 10 with the precision specified in the current {@link MathContext} - * @see #currentMathContext() - * @see BigDecimalMath#log10(BigDecimal, MathContext) - */ - public static BigDecimal log10(BigDecimal x) { - return BigDecimalMath.log10(x, currentMathContext()); - } - - /** - * Returns the number pi using the current {@link MathContext}. - * - * @return the number pi with the precision specified in the current {@link MathContext} - * @see #currentMathContext() - * @see BigDecimalMath#pi(MathContext) - */ - public static BigDecimal pi() { - return BigDecimalMath.pi(currentMathContext()); - } - - /** - * Returns the number e using the current {@link MathContext}. - * - * @return the number e with the precision specified in the current {@link MathContext} - * @see #currentMathContext() - * @see BigDecimalMath#e(MathContext) - */ - public static BigDecimal e() { - return BigDecimalMath.e(currentMathContext()); - } - - /** - * Calculates the natural exponent of {@link BigDecimal} x (ex) using the current {@link MathContext}. - * - * @param x the {@link BigDecimal} to calculate the exponent for - * @return the calculated exponent {@link BigDecimal} with the precision specified in the current {@link MathContext} - * @see #currentMathContext() - * @see BigDecimalMath#exp(BigDecimal, MathContext) - */ - public static BigDecimal exp(BigDecimal x) { - return BigDecimalMath.exp(x, currentMathContext()); - } - - /** - * Calculates the sine (sinus) of {@link BigDecimal} x using the current {@link MathContext}. - * - * @param x the {@link BigDecimal} to calculate the sine for - * @return the calculated sine {@link BigDecimal} with the precision specified in the current {@link MathContext} - * @see #currentMathContext() - * @see BigDecimalMath#sin(BigDecimal, MathContext) - */ - public static BigDecimal sin(BigDecimal x) { - return BigDecimalMath.sin(x, currentMathContext()); - } - - /** - * Calculates the arc sine (inverted sine) of {@link BigDecimal} x using the current {@link MathContext}. - * - * @param x the {@link BigDecimal} to calculate the arc sine for - * @return the calculated arc sine {@link BigDecimal} with the precision specified in the current {@link MathContext} - * @see #currentMathContext() - * @see BigDecimalMath#asin(BigDecimal, MathContext) - */ - public static BigDecimal asin(BigDecimal x) { - return BigDecimalMath.asin(x, currentMathContext()); - } - - /** - * Calculates the cosine (cosinus) of {@link BigDecimal} x using the current {@link MathContext}. - * - * @param x the {@link BigDecimal} to calculate the cosine for - * @return the calculated cosine {@link BigDecimal} with the precision specified in the current {@link MathContext} - */ - public static BigDecimal cos(BigDecimal x) { - return BigDecimalMath.cos(x, currentMathContext()); - } - - /** - * Calculates the arc cosine (inverted cosine) of {@link BigDecimal} x using the current {@link MathContext}. - * - * @param x the {@link BigDecimal} to calculate the arc cosine for - * @return the calculated arc sine {@link BigDecimal} with the precision specified in the current {@link MathContext} - * @see #currentMathContext() - * @see BigDecimalMath#acos(BigDecimal, MathContext) - */ - public static BigDecimal acos(BigDecimal x) { - return BigDecimalMath.acos(x, currentMathContext()); - } - - /** - * Calculates the tangens of {@link BigDecimal} x using the current {@link MathContext}. - * - * @param x the {@link BigDecimal} to calculate the tangens for - * @return the calculated tangens {@link BigDecimal} with the precision specified in the current {@link MathContext} - * @see #currentMathContext() - * @see BigDecimalMath#tan(BigDecimal, MathContext) - */ - public static BigDecimal tan(BigDecimal x) { - return BigDecimalMath.tan(x, currentMathContext()); - } - - /** - * Calculates the arc tangens (inverted tangens) of {@link BigDecimal} x using the current {@link MathContext}. - * - * @param x the {@link BigDecimal} to calculate the arc tangens for - * @return the calculated arc tangens {@link BigDecimal} with the precision specified in the current {@link MathContext} - * @see #currentMathContext() - * @see BigDecimalMath#atan(BigDecimal, MathContext) - */ - public static BigDecimal atan(BigDecimal x) { - return BigDecimalMath.atan(x, currentMathContext()); - } - - /** - * Calculates the arc tangens (inverted tangens) of {@link BigDecimal} y / x in the range -pi to pi using the current {@link MathContext}. - * - * @param y the {@link BigDecimal} - * @param x the {@link BigDecimal} - * @return the calculated arc tangens {@link BigDecimal} with the precision specified in the current {@link MathContext} - * @see #currentMathContext() - * @see #atan2(BigDecimal, BigDecimal) - */ - public static BigDecimal atan2(BigDecimal y, BigDecimal x) { - return BigDecimalMath.atan2(y, x, currentMathContext()); - } - - /** - * Calculates the cotangens of {@link BigDecimal} x using the current {@link MathContext}. - * - * @param x the {@link BigDecimal} to calculate the cotangens for - * @return the calculated cotanges {@link BigDecimal} with the precision specified in the current {@link MathContext} - * @see #currentMathContext() - * @see BigDecimalMath#cot(BigDecimal, MathContext) - */ - public static BigDecimal cot(BigDecimal x) { - return BigDecimalMath.cot(x, currentMathContext()); - } - - /** - * Calculates the inverse cotangens (arc cotangens) of {@link BigDecimal} x using the current {@link MathContext}. - * - * @param x the {@link BigDecimal} to calculate the arc cotangens for - * @return the calculated arc cotangens {@link BigDecimal} with the precision specified in the current {@link MathContext} - * @see #currentMathContext() - * @see BigDecimalMath#acot(BigDecimal, MathContext) - */ - public static BigDecimal acot(BigDecimal x) { - return BigDecimalMath.acot(x, currentMathContext()); - } - - /** - * Calculates the hyperbolic sine of {@link BigDecimal} x using the current {@link MathContext}. - * - * @param x the {@link BigDecimal} to calculate the hyperbolic sine for - * @return the calculated hyperbolic sine {@link BigDecimal} with the precision specified in the current {@link MathContext} - * @see #currentMathContext() - * @see BigDecimalMath#sinh(BigDecimal, MathContext) - */ - public static BigDecimal sinh(BigDecimal x) { - return BigDecimalMath.sinh(x, currentMathContext()); - } - - /** - * Calculates the hyperbolic cosine of {@link BigDecimal} x using the current {@link MathContext}. - * - * @param x the {@link BigDecimal} to calculate the hyperbolic cosine for - * @return the calculated hyperbolic cosine {@link BigDecimal} with the precision specified in the current {@link MathContext} - * @see #currentMathContext() - * @see BigDecimalMath#cosh(BigDecimal, MathContext) - */ - public static BigDecimal cosh(BigDecimal x) { - return BigDecimalMath.cosh(x, currentMathContext()); - } - - /** - * Calculates the hyperbolic tangens of {@link BigDecimal} x using the current {@link MathContext}. - * - * @param x the {@link BigDecimal} to calculate the hyperbolic tangens for - * @return the calculated hyperbolic tangens {@link BigDecimal} with the precision specified in the current {@link MathContext} - * @see #currentMathContext() - * @see BigDecimalMath#tanh(BigDecimal, MathContext) - */ - public static BigDecimal tanh(BigDecimal x) { - return BigDecimalMath.tanh(x, currentMathContext()); - } - - /** - * Calculates the hyperbolic cotangens of {@link BigDecimal} x using the current {@link MathContext}. - * - * @param x the {@link BigDecimal} to calculate the hyperbolic cotangens for - * @return the calculated hyperbolic cotangens {@link BigDecimal} with the precision specified in the current {@link MathContext} - * @see #currentMathContext() - * @see BigDecimalMath#coth(BigDecimal, MathContext) - */ - public static BigDecimal coth(BigDecimal x) { - return BigDecimalMath.coth(x, currentMathContext()); - } - - /** - * Calculates the arc hyperbolic sine (inverse hyperbolic sine) of {@link BigDecimal} x using the current {@link MathContext}. - * - * @param x the {@link BigDecimal} to calculate the arc hyperbolic sine for - * @return the calculated arc hyperbolic sine {@link BigDecimal} with the precision specified in the current {@link MathContext} - * @see #currentMathContext() - * @see BigDecimalMath#asinh(BigDecimal, MathContext) - */ - public static BigDecimal asinh(BigDecimal x) { - return BigDecimalMath.asinh(x, currentMathContext()); - } - - /** - * Calculates the arc hyperbolic cosine (inverse hyperbolic cosine) of {@link BigDecimal} x using the current {@link MathContext}. - * - * @param x the {@link BigDecimal} to calculate the arc hyperbolic cosine for - * @return the calculated arc hyperbolic cosine {@link BigDecimal} with the precision specified in the current {@link MathContext} - * @see #currentMathContext() - * @see BigDecimalMath#acosh(BigDecimal, MathContext) - */ - public static BigDecimal acosh(BigDecimal x) { - return BigDecimalMath.acosh(x, currentMathContext()); - } - - /** - * Calculates the arc hyperbolic tangens (inverse hyperbolic tangens) of {@link BigDecimal} x using the current {@link MathContext}. - * - * @param x the {@link BigDecimal} to calculate the arc hyperbolic tangens for - * @return the calculated arc hyperbolic tangens {@link BigDecimal} with the precision specified in the current {@link MathContext} - * @see #currentMathContext() - * @see BigDecimalMath#atanh(BigDecimal, MathContext) - */ - public static BigDecimal atanh(BigDecimal x) { - return BigDecimalMath.atanh(x, currentMathContext()); - } - - /** - * Calculates the arc hyperbolic cotangens (inverse hyperbolic cotangens) of {@link BigDecimal} x using the current {@link MathContext}. - * - * @param x the {@link BigDecimal} to calculate the arc hyperbolic cotangens for - * @return the calculated arc hyperbolic cotangens {@link BigDecimal} with the precision specified in the current {@link MathContext} - * @see #currentMathContext() - * @see BigDecimalMath#acoth(BigDecimal, MathContext) - */ - public static BigDecimal acoth(BigDecimal x) { - return BigDecimalMath.acoth(x, currentMathContext()); - } - - /** - * The local context used to push and pop a {@link MathContext} on the stack. - * - *

The recommended way to use this class is to use the try-with-resources.

- */ - public static class LocalMathContext implements AutoCloseable { - public final MathContext mathContext; - - LocalMathContext(MathContext mathContext) { - this.mathContext = mathContext; - pushMathContext(mathContext); - } - - @Override - public void close() { - popMathContext(); - } - } -} diff --git a/src/main/java/ch/obermuhlner/math/big/internal/AsinCalculator.java b/src/main/java/ch/obermuhlner/math/big/internal/AsinCalculator.java deleted file mode 100644 index f8bcd4837b..0000000000 --- a/src/main/java/ch/obermuhlner/math/big/internal/AsinCalculator.java +++ /dev/null @@ -1,46 +0,0 @@ -package ch.obermuhlner.math.big.internal; - -import java.math.BigDecimal; -import java.math.MathContext; - -import ch.obermuhlner.math.big.BigRational; - -/** - * Calculates arc sinus using the Maclaurin series. - * - *

See Wikipedia: Taylorreihe

- * - *

No argument checking or optimizations are done. - * This implementation is not intended to be called directly.

- */ -public class AsinCalculator extends SeriesCalculator { - - public static final AsinCalculator INSTANCE = new AsinCalculator(); - - private int n = 0; - private BigRational factorial2n = BigRational.ONE; - private BigRational factorialN = BigRational.ONE; - private BigRational fourPowerN = BigRational.ONE; - - private AsinCalculator() { - } - - @Override - protected BigRational getCurrentFactor() { - BigRational factor = factorial2n.divide(fourPowerN.multiply(factorialN).multiply(factorialN).multiply(2 * n + 1)); - return factor; - } - - @Override - protected void calculateNextFactor() { - n++; - factorial2n = factorial2n.multiply(2 * n - 1).multiply(2 * n); - factorialN = factorialN.multiply(n); - fourPowerN = fourPowerN.multiply(4); - } - - @Override - protected PowerIterator createPowerIterator(BigDecimal x, MathContext mathContext) { - return new PowerTwoNPlusOneIterator(x, mathContext); - } -} diff --git a/src/main/java/ch/obermuhlner/math/big/internal/AtanhCalculator.java b/src/main/java/ch/obermuhlner/math/big/internal/AtanhCalculator.java deleted file mode 100644 index a2f844a094..0000000000 --- a/src/main/java/ch/obermuhlner/math/big/internal/AtanhCalculator.java +++ /dev/null @@ -1,40 +0,0 @@ -package ch.obermuhlner.math.big.internal; - -import ch.obermuhlner.math.big.BigRational; - -import java.math.BigDecimal; -import java.math.MathContext; - -/** - * Calculates sinus hyperbolicus using the Taylor series. - * - *

See Wikipedia: Taylor series

- * - *

No argument checking or optimizations are done. - * This implementation is not intended to be called directly.

- */ -public class AtanhCalculator extends SeriesCalculator { - - public static final AtanhCalculator INSTANCE = new AtanhCalculator(); - - private int n = 0; - - private AtanhCalculator() { - super(true); - } - - @Override - protected BigRational getCurrentFactor() { - return BigRational.valueOf(1, 2 * n + 1); - } - - @Override - protected void calculateNextFactor() { - n++; - } - - @Override - protected PowerIterator createPowerIterator(BigDecimal x, MathContext mathContext) { - return new PowerTwoNPlusOneIterator(x, mathContext); - } -} diff --git a/src/main/java/ch/obermuhlner/math/big/internal/CosCalculator.java b/src/main/java/ch/obermuhlner/math/big/internal/CosCalculator.java deleted file mode 100644 index bf9edbd691..0000000000 --- a/src/main/java/ch/obermuhlner/math/big/internal/CosCalculator.java +++ /dev/null @@ -1,48 +0,0 @@ -package ch.obermuhlner.math.big.internal; - -import java.math.BigDecimal; -import java.math.MathContext; - -import ch.obermuhlner.math.big.BigRational; - -/** - * Calculates cosinus using the Maclaurin series. - * - *

See Wikipedia: Taylorreihe

- * - *

No argument checking or optimizations are done. - * This implementation is not intended to be called directly.

- */ -public class CosCalculator extends SeriesCalculator { - - public static final CosCalculator INSTANCE = new CosCalculator(); - - private int n = 0; - private boolean negative = false; - private BigRational factorial2n = BigRational.ONE; - - private CosCalculator() { - super(true); - } - - @Override - protected BigRational getCurrentFactor() { - BigRational factor = factorial2n.reciprocal(); - if (negative) { - factor = factor.negate(); - } - return factor; - } - - @Override - protected void calculateNextFactor() { - n++; - factorial2n = factorial2n.multiply(2 * n - 1).multiply(2 * n); - negative = !negative; - } - - @Override - protected PowerIterator createPowerIterator(BigDecimal x, MathContext mathContext) { - return new PowerTwoNIterator(x, mathContext); - } -} diff --git a/src/main/java/ch/obermuhlner/math/big/internal/CoshCalculator.java b/src/main/java/ch/obermuhlner/math/big/internal/CoshCalculator.java deleted file mode 100644 index f22631e8ae..0000000000 --- a/src/main/java/ch/obermuhlner/math/big/internal/CoshCalculator.java +++ /dev/null @@ -1,43 +0,0 @@ -package ch.obermuhlner.math.big.internal; - -import java.math.BigDecimal; -import java.math.MathContext; - -import ch.obermuhlner.math.big.BigRational; - -/** - * Calculates cosinus hyperbolicus using the Taylor series. - * - *

See Wikipedia: Taylor series

- * - *

No argument checking or optimizations are done. - * This implementation is not intended to be called directly.

- */ -public class CoshCalculator extends SeriesCalculator { - - public static final CoshCalculator INSTANCE = new CoshCalculator(); - - private int n = 0; - - private BigRational factorial2n = BigRational.ONE; - - private CoshCalculator() { - super(true); - } - - @Override - protected BigRational getCurrentFactor() { - return factorial2n.reciprocal(); - } - - @Override - protected void calculateNextFactor() { - n++; - factorial2n = factorial2n.multiply(2 * n - 1).multiply(2 * n); - } - - @Override - protected PowerIterator createPowerIterator(BigDecimal x, MathContext mathContext) { - return new PowerTwoNIterator(x, mathContext); - } -} diff --git a/src/main/java/ch/obermuhlner/math/big/internal/ExpCalculator.java b/src/main/java/ch/obermuhlner/math/big/internal/ExpCalculator.java deleted file mode 100644 index 16c6e6ac21..0000000000 --- a/src/main/java/ch/obermuhlner/math/big/internal/ExpCalculator.java +++ /dev/null @@ -1,42 +0,0 @@ -package ch.obermuhlner.math.big.internal; - -import java.math.BigDecimal; -import java.math.MathContext; - -import ch.obermuhlner.math.big.BigRational; - -/** - * Calculates exp using the Maclaurin series. - * - *

See Wikipedia: Taylorreihe

- * - *

No argument checking or optimizations are done. - * This implementation is not intended to be called directly.

- */ -public class ExpCalculator extends SeriesCalculator { - - public static final ExpCalculator INSTANCE = new ExpCalculator(); - - private int n = 0; - private BigRational oneOverFactorialOfN = BigRational.ONE; - - private ExpCalculator() { - // prevent instances - } - - @Override - protected BigRational getCurrentFactor() { - return oneOverFactorialOfN; - } - - @Override - protected void calculateNextFactor() { - n++; - oneOverFactorialOfN = oneOverFactorialOfN.divide(n); - } - - @Override - protected PowerIterator createPowerIterator(BigDecimal x, MathContext mathContext) { - return new PowerNIterator(x, mathContext); - } -} diff --git a/src/main/java/ch/obermuhlner/math/big/internal/PowerIterator.java b/src/main/java/ch/obermuhlner/math/big/internal/PowerIterator.java deleted file mode 100644 index def0f5f7ef..0000000000 --- a/src/main/java/ch/obermuhlner/math/big/internal/PowerIterator.java +++ /dev/null @@ -1,28 +0,0 @@ -package ch.obermuhlner.math.big.internal; - -import java.math.BigDecimal; - -/** - * Iterator over the powers of a value x. - * - *

This API allows to efficiently calculate the various powers of x in a taylor series by storing intermediate results.

- *

For example xn can be calculated using one multiplication by storing the previously calculated xn-1 and x.

- * - *

{@link #getCurrentPower()} will be called first to retrieve the initial value.

- * - * For later iterations {@link #calculateNextPower()} will be called before {@link #getCurrentPower()}. - */ -public interface PowerIterator { - - /** - * Returns the current power. - * - * @return the current power. - */ - BigDecimal getCurrentPower(); - - /** - * Calculates the next power. - */ - void calculateNextPower(); -} \ No newline at end of file diff --git a/src/main/java/ch/obermuhlner/math/big/internal/PowerNIterator.java b/src/main/java/ch/obermuhlner/math/big/internal/PowerNIterator.java deleted file mode 100644 index d6ef34e01e..0000000000 --- a/src/main/java/ch/obermuhlner/math/big/internal/PowerNIterator.java +++ /dev/null @@ -1,33 +0,0 @@ -package ch.obermuhlner.math.big.internal; - -import java.math.BigDecimal; -import java.math.MathContext; - -/** - * {@link PowerIterator} to calculate xn. - */ -public class PowerNIterator implements PowerIterator { - - private final BigDecimal x; - - private final MathContext mathContext; - - private BigDecimal powerOfX; - - public PowerNIterator(BigDecimal x, MathContext mathContext) { - this.x = x; - this.mathContext = mathContext; - - powerOfX = BigDecimal.ONE; - } - - @Override - public BigDecimal getCurrentPower() { - return powerOfX; - } - - @Override - public void calculateNextPower() { - powerOfX = powerOfX.multiply(x, mathContext); - } -} \ No newline at end of file diff --git a/src/main/java/ch/obermuhlner/math/big/internal/PowerTwoNIterator.java b/src/main/java/ch/obermuhlner/math/big/internal/PowerTwoNIterator.java deleted file mode 100644 index 839d617e16..0000000000 --- a/src/main/java/ch/obermuhlner/math/big/internal/PowerTwoNIterator.java +++ /dev/null @@ -1,33 +0,0 @@ -package ch.obermuhlner.math.big.internal; - -import java.math.BigDecimal; -import java.math.MathContext; - -/** - * {@link PowerIterator} to calculate x2*n. - */ -public class PowerTwoNIterator implements PowerIterator { - - private final MathContext mathContext; - - private final BigDecimal xPowerTwo; - - private BigDecimal powerOfX; - - public PowerTwoNIterator(BigDecimal x, MathContext mathContext) { - this.mathContext = mathContext; - - xPowerTwo = x.multiply(x, mathContext); - powerOfX = BigDecimal.ONE; - } - - @Override - public BigDecimal getCurrentPower() { - return powerOfX; - } - - @Override - public void calculateNextPower() { - powerOfX = powerOfX.multiply(xPowerTwo, mathContext); - } -} \ No newline at end of file diff --git a/src/main/java/ch/obermuhlner/math/big/internal/PowerTwoNMinusOneIterator.java b/src/main/java/ch/obermuhlner/math/big/internal/PowerTwoNMinusOneIterator.java deleted file mode 100644 index 15ad0168c0..0000000000 --- a/src/main/java/ch/obermuhlner/math/big/internal/PowerTwoNMinusOneIterator.java +++ /dev/null @@ -1,35 +0,0 @@ -package ch.obermuhlner.math.big.internal; - -import ch.obermuhlner.math.big.BigDecimalMath; - -import java.math.BigDecimal; -import java.math.MathContext; - -/** - * {@link PowerIterator} to calculate x2*n-1. - */ -public class PowerTwoNMinusOneIterator implements PowerIterator { - - private final MathContext mathContext; - - private final BigDecimal xPowerTwo; - - private BigDecimal powerOfX; - - public PowerTwoNMinusOneIterator(BigDecimal x, MathContext mathContext) { - this.mathContext = mathContext; - - xPowerTwo = x.multiply(x, mathContext); - powerOfX = BigDecimalMath.reciprocal(x, mathContext); - } - - @Override - public BigDecimal getCurrentPower() { - return powerOfX; - } - - @Override - public void calculateNextPower() { - powerOfX = powerOfX.multiply(xPowerTwo, mathContext); - } -} \ No newline at end of file diff --git a/src/main/java/ch/obermuhlner/math/big/internal/PowerTwoNPlusOneIterator.java b/src/main/java/ch/obermuhlner/math/big/internal/PowerTwoNPlusOneIterator.java deleted file mode 100644 index 57afa97634..0000000000 --- a/src/main/java/ch/obermuhlner/math/big/internal/PowerTwoNPlusOneIterator.java +++ /dev/null @@ -1,33 +0,0 @@ -package ch.obermuhlner.math.big.internal; - -import java.math.BigDecimal; -import java.math.MathContext; - -/** - * {@link PowerIterator} to calculate x2*n+1. - */ -public class PowerTwoNPlusOneIterator implements PowerIterator { - - private final MathContext mathContext; - - private final BigDecimal xPowerTwo; - - private BigDecimal powerOfX; - - public PowerTwoNPlusOneIterator(BigDecimal x, MathContext mathContext) { - this.mathContext = mathContext; - - xPowerTwo = x.multiply(x, mathContext); - powerOfX = x; - } - - @Override - public BigDecimal getCurrentPower() { - return powerOfX; - } - - @Override - public void calculateNextPower() { - powerOfX = powerOfX.multiply(xPowerTwo, mathContext); - } -} \ No newline at end of file diff --git a/src/main/java/ch/obermuhlner/math/big/internal/SeriesCalculator.java b/src/main/java/ch/obermuhlner/math/big/internal/SeriesCalculator.java deleted file mode 100644 index 117c2737d2..0000000000 --- a/src/main/java/ch/obermuhlner/math/big/internal/SeriesCalculator.java +++ /dev/null @@ -1,127 +0,0 @@ -package ch.obermuhlner.math.big.internal; - -import ch.obermuhlner.math.big.BigRational; - -import java.math.BigDecimal; -import java.math.MathContext; -import java.util.ArrayList; -import java.util.List; - -import static java.util.Objects.requireNonNull; - -/** - * Utility class to calculate taylor series efficiently until the maximum error (as defined by the precision in the {@link MathContext} is reached. - * - *

Stores the factors of the taylor series terms so that future calculations will be faster.

- */ -public abstract class SeriesCalculator { - - private final boolean calculateInPairs; - - private final List factors = new ArrayList<>(); - - /** - * Constructs a {@link SeriesCalculator} that calculates single terms. - */ - protected SeriesCalculator() { - this(false); - } - - /** - * Constructs a {@link SeriesCalculator} with control over whether the sum terms are calculated in pairs. - * - *

Calculation of pairs is useful for taylor series where the terms alternate the sign. - * In these cases it is more efficient to calculate two terms at once check then whether the acceptable error has been reached.

- * - * @param calculateInPairs true to calculate the terms in pairs, false to calculate single terms - */ - protected SeriesCalculator(boolean calculateInPairs) { - this.calculateInPairs = calculateInPairs; - } - - /** - * Calculates the series for the specified value x and the precision defined in the {@link MathContext}. - * - * @param x the value x - * @param mathContext the {@link MathContext} - * @return the calculated result - */ - public BigDecimal calculate(BigDecimal x, MathContext mathContext) { - BigDecimal acceptableError = BigDecimal.ONE.movePointLeft(mathContext.getPrecision() + 1); - - PowerIterator powerIterator = createPowerIterator(x, mathContext); - - BigDecimal sum = BigDecimal.ZERO; - BigDecimal step; - int i = 0; - do { - BigRational factor; - BigDecimal xToThePower; - - factor = getFactor(i); - xToThePower = powerIterator.getCurrentPower(); - powerIterator.calculateNextPower(); - step = factor.getNumerator().multiply(xToThePower).divide(factor.getDenominator(), mathContext); - i++; - - if (calculateInPairs) { - factor = getFactor(i); - xToThePower = powerIterator.getCurrentPower(); - powerIterator.calculateNextPower(); - BigDecimal step2 = factor.getNumerator().multiply(xToThePower).divide(factor.getDenominator(), mathContext); - step = step.add(step2); - i++; - } - - sum = sum.add(step); - //System.out.println(sum + " " + step); - } while (step.abs().compareTo(acceptableError) > 0); - - return sum.round(mathContext); - } - - /** - * Creates the {@link PowerIterator} used for this series. - * - * @param x the value x - * @param mathContext the {@link MathContext} - * @return the {@link PowerIterator} - */ - protected abstract PowerIterator createPowerIterator(BigDecimal x, MathContext mathContext); - - /** - * Returns the factor of the term with specified index. - * - * All mutable state of this class (and all its subclasses) must be modified in this method. - * This method is synchronized to allow thread-safe usage of this class. - * - * @param index the index (starting with 0) - * @return the factor of the specified term - */ - protected synchronized BigRational getFactor(int index) { - while (factors.size() <= index) { - BigRational factor = getCurrentFactor(); - addFactor(factor); - calculateNextFactor(); - } - return factors.get(index); - } - - private void addFactor(BigRational factor){ - factors.add(requireNonNull(factor, "Factor cannot be null")); - } - - /** - * Returns the factor of the highest term already calculated. - *

When called for the first time will return the factor of the first term (index 0).

- *

After this call the method {@link #calculateNextFactor()} will be called to prepare for the next term.

- * - * @return the factor of the highest term - */ - protected abstract BigRational getCurrentFactor(); - - /** - * Calculates the factor of the next term. - */ - protected abstract void calculateNextFactor(); -} diff --git a/src/main/java/ch/obermuhlner/math/big/internal/SinCalculator.java b/src/main/java/ch/obermuhlner/math/big/internal/SinCalculator.java deleted file mode 100644 index 471074fd6b..0000000000 --- a/src/main/java/ch/obermuhlner/math/big/internal/SinCalculator.java +++ /dev/null @@ -1,49 +0,0 @@ -package ch.obermuhlner.math.big.internal; - -import java.math.BigDecimal; -import java.math.MathContext; - -import ch.obermuhlner.math.big.BigRational; - -/** - * Calculates sinus using the Maclaurin series. - * - *

See Wikipedia: Taylorreihe

- * - *

No argument checking or optimizations are done. - * This implementation is not intended to be called directly.

- */ -public class SinCalculator extends SeriesCalculator { - - public static final SinCalculator INSTANCE = new SinCalculator(); - - private int n = 0; - private boolean negative = false; - private BigRational factorial2nPlus1 = BigRational.ONE; - - private SinCalculator() { - super(true); - } - - @Override - protected BigRational getCurrentFactor() { - BigRational factor = factorial2nPlus1.reciprocal(); - if (negative) { - factor = factor.negate(); - } - return factor; - } - - @Override - protected void calculateNextFactor() { - n++; - factorial2nPlus1 = factorial2nPlus1.multiply(2 * n); - factorial2nPlus1 = factorial2nPlus1.multiply(2 * n + 1); - negative = !negative; - } - - @Override - protected PowerIterator createPowerIterator(BigDecimal x, MathContext mathContext) { - return new PowerTwoNPlusOneIterator(x, mathContext); - } -} diff --git a/src/main/java/ch/obermuhlner/math/big/internal/SinhCalculator.java b/src/main/java/ch/obermuhlner/math/big/internal/SinhCalculator.java deleted file mode 100644 index 9601735755..0000000000 --- a/src/main/java/ch/obermuhlner/math/big/internal/SinhCalculator.java +++ /dev/null @@ -1,44 +0,0 @@ -package ch.obermuhlner.math.big.internal; - -import java.math.BigDecimal; -import java.math.MathContext; - -import ch.obermuhlner.math.big.BigRational; - -/** - * Calculates sinus hyperbolicus using the Taylor series. - * - *

See Wikipedia: Taylor series

- * - *

No argument checking or optimizations are done. - * This implementation is not intended to be called directly.

- */ -public class SinhCalculator extends SeriesCalculator { - - public static final SinhCalculator INSTANCE = new SinhCalculator(); - - private int n = 0; - - private BigRational factorial2nPlus1 = BigRational.ONE; - - private SinhCalculator() { - super(true); - } - - @Override - protected BigRational getCurrentFactor() { - return factorial2nPlus1.reciprocal(); - } - - @Override - protected void calculateNextFactor() { - n++; - factorial2nPlus1 = factorial2nPlus1.multiply(2 * n); - factorial2nPlus1 = factorial2nPlus1.multiply(2 * n + 1); - } - - @Override - protected PowerIterator createPowerIterator(BigDecimal x, MathContext mathContext) { - return new PowerTwoNPlusOneIterator(x, mathContext); - } -} diff --git a/src/main/java/ch/obermuhlner/math/big/stream/BigDecimalStream.java b/src/main/java/ch/obermuhlner/math/big/stream/BigDecimalStream.java deleted file mode 100644 index 05a45fd846..0000000000 --- a/src/main/java/ch/obermuhlner/math/big/stream/BigDecimalStream.java +++ /dev/null @@ -1,219 +0,0 @@ -package ch.obermuhlner.math.big.stream; - -import java.math.BigDecimal; -import java.math.MathContext; -import java.util.Comparator; -import java.util.Spliterator; -import java.util.Spliterators.AbstractSpliterator; -import java.util.function.Consumer; -import java.util.stream.Stream; -import java.util.stream.StreamSupport; - -import ch.obermuhlner.math.big.BigDecimalMath; - -/** - * Provides constructor methods for streams of {@link BigDecimal} elements. - */ -public class BigDecimalStream { - - /** - * Returns a sequential ordered {@code Stream} from {@code startInclusive} - * (inclusive) to {@code endExclusive} (exclusive) by an incremental {@code step}. - * - *

An equivalent sequence of increasing values can be produced - * sequentially using a {@code for} loop as follows: - *

for (BigDecimal i = startInclusive; i.compareTo(endExclusive) < 0; i = i.add(step, mathContext)) {
-    // ...
-}
- * - * @param startInclusive the (inclusive) initial value - * @param endExclusive the exclusive upper bound - * @param step the step between elements - * @param mathContext the {@link MathContext} used for all mathematical operations - * @return a sequential {@code Stream} - */ - public static Stream range(BigDecimal startInclusive, BigDecimal endExclusive, BigDecimal step, MathContext mathContext) { - if (step.signum() == 0) { - throw new IllegalArgumentException("invalid step: 0"); - } - if (endExclusive.subtract(startInclusive).signum() != step.signum()) { - return Stream.empty(); - } - return StreamSupport.stream(new BigDecimalSpliterator(startInclusive, endExclusive, false, step, mathContext), false); - } - - /** - * Returns a sequential ordered {@code Stream} from {@code startInclusive} - * (inclusive) to {@code endExclusive} (exclusive) by an incremental {@code step}. - * - *

The {@code long} arguments are converted using {@link BigDecimal#valueOf(long)}.

- * - * @param startInclusive the (inclusive) initial value - * @param endExclusive the exclusive upper bound - * @param step the step between elements - * @param mathContext the {@link MathContext} used for all mathematical operations - * @return a sequential {@code Stream} - * @see #range(BigDecimal, BigDecimal, BigDecimal, MathContext) - */ - public static Stream range(long startInclusive, long endExclusive, long step, MathContext mathContext) { - return range(BigDecimal.valueOf(startInclusive), BigDecimal.valueOf(endExclusive), BigDecimal.valueOf(step), mathContext); - } - - /** - * Returns a sequential ordered {@code Stream} from {@code startInclusive} - * (inclusive) to {@code endExclusive} (exclusive) by an incremental {@code step}. - * - *

The {@code double} arguments are converted using {@link BigDecimal#valueOf(double)}.

- * - * @param startInclusive the (inclusive) initial value - * @param endExclusive the exclusive upper bound - * @param step the step between elements - * @param mathContext the {@link MathContext} used for all mathematical operations - * @return a sequential {@code Stream} - * @see #range(BigDecimal, BigDecimal, BigDecimal, MathContext) - */ - public static Stream range(double startInclusive, double endExclusive, double step, MathContext mathContext) { - return range(BigDecimal.valueOf(startInclusive), BigDecimal.valueOf(endExclusive), BigDecimal.valueOf(step), mathContext); - } - - /** - * Returns a sequential ordered {@code Stream} from {@code startInclusive} - * (inclusive) to {@code endInclusive} (inclusive) by an incremental {@code step}. - * - *

An equivalent sequence of increasing values can be produced - * sequentially using a {@code for} loop as follows: - *

for (BigDecimal i = startInclusive; i.compareTo(endInclusive) <= 0; i = i.add(step, mathContext)) {
-    // ...
-}
- * - * @param startInclusive the (inclusive) initial value - * @param endInclusive the inclusive upper bound - * @param step the step between elements - * @param mathContext the {@link MathContext} used for all mathematical operations - * @return a sequential {@code Stream} - * @see #range(BigDecimal, BigDecimal, BigDecimal, MathContext) - */ - public static Stream rangeClosed(BigDecimal startInclusive, BigDecimal endInclusive, BigDecimal step, MathContext mathContext) { - if (step.signum() == 0) { - throw new IllegalArgumentException("invalid step: 0"); - } - if (endInclusive.subtract(startInclusive).signum() == -step.signum()) { - return Stream.empty(); - } - return StreamSupport.stream(new BigDecimalSpliterator(startInclusive, endInclusive, true, step, mathContext), false); - } - - /** - * Returns a sequential ordered {@code Stream} from {@code startInclusive} - * (inclusive) to {@code endInclusive} (inclusive) by an incremental {@code step}. - * - *

The {@code long} arguments are converted using {@link BigDecimal#valueOf(long)}.

- * - * @param startInclusive the (inclusive) initial value - * @param endInclusive the inclusive upper bound - * @param step the step between elements - * @param mathContext the {@link MathContext} used for all mathematical operations - * @return a sequential {@code Stream} - * @see #rangeClosed(BigDecimal, BigDecimal, BigDecimal, MathContext) - */ - public static Stream rangeClosed(long startInclusive, long endInclusive, long step, MathContext mathContext) { - return rangeClosed(BigDecimal.valueOf(startInclusive), BigDecimal.valueOf(endInclusive), BigDecimal.valueOf(step), mathContext); - } - - /** - * Returns a sequential ordered {@code Stream} from {@code startInclusive} - * (inclusive) to {@code endInclusive} (inclusive) by an incremental {@code step}. - * - *

The {@code double} arguments are converted using {@link BigDecimal#valueOf(double)}.

- * - * @param startInclusive the (inclusive) initial value - * @param endInclusive the inclusive upper bound - * @param step the step between elements - * @param mathContext the {@link MathContext} used for all mathematical operations - * @return a sequential {@code Stream} - * @see #rangeClosed(BigDecimal, BigDecimal, BigDecimal, MathContext) - */ - public static Stream rangeClosed(double startInclusive, double endInclusive, double step, MathContext mathContext) { - return rangeClosed(BigDecimal.valueOf(startInclusive), BigDecimal.valueOf(endInclusive), BigDecimal.valueOf(step), mathContext); - } - - private static class BigDecimalSpliterator extends AbstractSpliterator { - - private BigDecimal value; - private BigDecimal step; - private long count; - private MathContext mathContext; - - public BigDecimalSpliterator(BigDecimal startInclusive, BigDecimal step, long count, MathContext mathContext) { - super(count, - Spliterator.SIZED | Spliterator.SUBSIZED | Spliterator.DISTINCT | Spliterator.IMMUTABLE | Spliterator.NONNULL | Spliterator.ORDERED | Spliterator.SORTED); - - this.value = startInclusive; - this.step = step; - this.count = count; - this.mathContext = mathContext; - } - - public BigDecimalSpliterator(BigDecimal startInclusive, BigDecimal end, boolean inclusive, BigDecimal step, MathContext mathContext) { - this(startInclusive, step, estimatedCount(startInclusive, end, inclusive, step, mathContext), mathContext); - } - - private static long estimatedCount(BigDecimal startInclusive, BigDecimal end, boolean inclusive, BigDecimal step, MathContext mathContext) { - BigDecimal count = end.subtract(startInclusive).divide(step, mathContext); - long result = count.longValue(); - if (BigDecimalMath.fractionalPart(count).signum() != 0) { - result++; - } else { - if (inclusive) { - result++; - } - } - return result; - } - - @Override - public Comparator getComparator() { - if (step.signum() < 0) { - return Comparator.reverseOrder(); - } - return null; - } - - @Override - public boolean tryAdvance(Consumer action) { - if (count == 0) { - return false; - } - - action.accept(value); - value = value.add(step, mathContext); - count--; - return true; - } - - @Override - public void forEachRemaining(Consumer action) { - while (count > 0) { - action.accept(value); - value = value.add(step, mathContext); - count--; - } - } - - @Override - public Spliterator trySplit() { - long firstHalfCount = count / 2; - - if (firstHalfCount == 0) { - return null; - } - - long secondHalfCount = count - firstHalfCount; - - count = firstHalfCount; - BigDecimal startSecondHalf = value.add(step.multiply(new BigDecimal(firstHalfCount), mathContext), mathContext); - - return new BigDecimalSpliterator(startSecondHalf, step, secondHalfCount, mathContext); - } - } -} diff --git a/src/main/java/ch/obermuhlner/math/big/stream/BigFloatStream.java b/src/main/java/ch/obermuhlner/math/big/stream/BigFloatStream.java deleted file mode 100644 index 1c982302a6..0000000000 --- a/src/main/java/ch/obermuhlner/math/big/stream/BigFloatStream.java +++ /dev/null @@ -1,214 +0,0 @@ -package ch.obermuhlner.math.big.stream; - -import java.util.Comparator; -import java.util.Spliterator; -import java.util.Spliterators.AbstractSpliterator; -import java.util.function.Consumer; -import java.util.stream.Stream; -import java.util.stream.StreamSupport; - -import ch.obermuhlner.math.big.BigFloat; -import ch.obermuhlner.math.big.BigFloat.Context; - -/** - * Provides constructor methods for streams of {@link BigFloat} elements. - */ -public class BigFloatStream { - - /** - * Returns a sequential ordered {@code Stream} from {@code startInclusive} - * (inclusive) to {@code endExclusive} (exclusive) by an incremental {@code step}. - * - *

An equivalent sequence of increasing values can be produced - * sequentially using a {@code for} loop as follows: - *

for (BigFloat i = startInclusive; i.isLessThan(endExclusive); i = i.add(step)) {
-    // ...
-}
- * - * @param startInclusive the (inclusive) initial value - * @param endExclusive the exclusive upper bound - * @param step the step between elements - * @return a sequential {@code Stream} - */ - public static Stream range(BigFloat startInclusive, BigFloat endExclusive, BigFloat step) { - if (step.isZero()) { - throw new IllegalArgumentException("invalid step: 0"); - } - if (endExclusive.subtract(startInclusive).signum() != step.signum()) { - return Stream.empty(); - } - return StreamSupport.stream(new BigFloatSpliterator(startInclusive, endExclusive, false, step), false); - } - - /** - * Returns a sequential ordered {@code Stream} from {@code startInclusive} - * (inclusive) to {@code endExclusive} (exclusive) by an incremental {@code step}. - * - *

{@link Context#valueOf(long)} is used to convert the {@code long} values.

- * - * @param startInclusive the (inclusive) initial value - * @param endExclusive the exclusive upper bound - * @param step the step between elements - * @param context the {@link Context} used to convert the {@code long} values - * @return a sequential {@code Stream} - * @see #range(BigFloat, BigFloat, BigFloat) - */ - public static Stream range(long startInclusive, long endExclusive, long step, Context context) { - return range(context.valueOf(startInclusive), context.valueOf(endExclusive), context.valueOf(step)); - } - - /** - * Returns a sequential ordered {@code Stream} from {@code startInclusive} - * (inclusive) to {@code endExclusive} (exclusive) by an incremental {@code step}. - * - *

{@link Context#valueOf(double)} is used to convert the {@code double} values.

- * - * @param startInclusive the (inclusive) initial value - * @param endExclusive the exclusive upper bound - * @param step the step between elements - * @param context the {@link Context} used to convert the {@code double} values - * @return a sequential {@code Stream} - * @see #range(BigFloat, BigFloat, BigFloat) - */ - public static Stream range(double startInclusive, double endExclusive, double step, Context context) { - return range(context.valueOf(startInclusive), context.valueOf(endExclusive), context.valueOf(step)); - } - - /** - * Returns a sequential ordered {@code Stream} from {@code startInclusive} - * (inclusive) to {@code endInclusive} (inclusive) by an incremental {@code step}. - * - *

An equivalent sequence of increasing values can be produced - * sequentially using a {@code for} loop as follows: - *

for (BigFloat i = startInclusive; i.isLessThanOrEqual(endInclusive); i = i.add(step)) {
-    //...
-}
-
- * - * @param startInclusive the (inclusive) initial value - * @param endInclusive the inclusive upper bound - * @param step the step between elements - * @return a sequential {@code Stream} - */ - public static Stream rangeClosed(BigFloat startInclusive, BigFloat endInclusive, BigFloat step) { - if (step.isZero()) { - throw new IllegalArgumentException("invalid step: 0"); - } - if (endInclusive.subtract(startInclusive).signum() == -step.signum()) { - return Stream.empty(); - } - return StreamSupport.stream(new BigFloatSpliterator(startInclusive, endInclusive, true, step), false); - } - - /** - * Returns a sequential ordered {@code Stream} from {@code startInclusive} - * (inclusive) to {@code endInclusive} (inclusive) by an incremental {@code step}. - * - *

{@link Context#valueOf(long)} is used to convert the {@code long} values.

- * - * @param startInclusive the (inclusive) initial value - * @param endInclusive the inclusive upper bound - * @param step the step between elements - * @param context the {@link Context} used to convert the {@code long} values - * @return a sequential {@code Stream} - * @see #rangeClosed(BigFloat, BigFloat, BigFloat) - */ - public static Stream rangeClosed(long startInclusive, long endInclusive, long step, Context context) { - return rangeClosed(context.valueOf(startInclusive), context.valueOf(endInclusive), context.valueOf(step)); - } - - /** - * Returns a sequential ordered {@code Stream} from {@code startInclusive} - * (inclusive) to {@code endInclusive} (inclusive) by an incremental {@code step}. - * - *

{@link Context#valueOf(double)} is used to convert the {@code double} values.

- * - * @param startInclusive the (inclusive) initial value - * @param endInclusive the inclusive upper bound - * @param step the step between elements - * @param context the {@link Context} used to convert the {@code double} values - * @return a sequential {@code Stream} - * @see #rangeClosed(BigFloat, BigFloat, BigFloat) - */ - public static Stream rangeClosed(double startInclusive, double endInclusive, double step, Context context) { - return rangeClosed(context.valueOf(startInclusive), context.valueOf(endInclusive), context.valueOf(step)); - } - - private static class BigFloatSpliterator extends AbstractSpliterator { - - private BigFloat value; - private BigFloat step; - private long count; - - public BigFloatSpliterator(BigFloat startInclusive, BigFloat step, long count) { - super(count, - Spliterator.SIZED | Spliterator.SUBSIZED | Spliterator.DISTINCT | Spliterator.IMMUTABLE | Spliterator.NONNULL | Spliterator.ORDERED | Spliterator.SORTED); - - this.value = startInclusive; - this.step = step; - this.count = count; - } - - public BigFloatSpliterator(BigFloat startInclusive, BigFloat end, boolean inclusive, BigFloat step) { - this(startInclusive, step, estimatedCount(startInclusive, end, inclusive, step)); - } - - private static long estimatedCount(BigFloat startInclusive, BigFloat end, boolean inclusive, BigFloat step) { - BigFloat count = end.subtract(startInclusive).divide(step); - long result = count.toLong(); - if (count.getFractionalPart().signum() != 0) { - result++; - } else { - if (inclusive) { - result++; - } - } - return result; - } - - @Override - public Comparator getComparator() { - if (step.signum() < 0) { - return Comparator.reverseOrder(); - } - return null; - } - - @Override - public boolean tryAdvance(Consumer action) { - if (count == 0) { - return false; - } - - action.accept(value); - value = value.add(step); - count--; - return true; - } - - @Override - public void forEachRemaining(Consumer action) { - while (count > 0) { - action.accept(value); - value = value.add(step); - count--; - } - } - - @Override - public Spliterator trySplit() { - long firstHalfCount = count / 2; - - if (firstHalfCount == 0) { - return null; - } - - long secondHalfCount = count - firstHalfCount; - - count = firstHalfCount; - BigFloat startSecondHalf = value.add(step.multiply(firstHalfCount)); - - return new BigFloatSpliterator(startSecondHalf, step, secondHalfCount); - } - } -} diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalDecayResult.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalDecayResult.java new file mode 100644 index 0000000000..4ca63d14fe --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalDecayResult.java @@ -0,0 +1,41 @@ +package com.github.technus.tectech.mechanics.elementalMatter.core; + +public class cElementalDecayResult { + private final cElementalInstanceStackMap output; + private double massAffected; + private double massDiff; + + public cElementalDecayResult(cElementalInstanceStackMap output, double massAffected, double massDiff) { + this.output = output; + this.massAffected = massAffected; + this.massDiff = massDiff; + } + + public cElementalInstanceStackMap getOutput() { + return output; + } + + /** + * How much was lost in the process (decayed or removed) + * @return + */ + public double getMassAffected() { + return massAffected; + } + + /** + * Difference of mass of actually decayed elements + * @return + */ + public double getMassDiff() { + return massDiff; + } + + public void setMassAffected(double massAffected) { + this.massAffected = massAffected; + } + + public void setMassDiff(double massDiff) { + this.massDiff = massDiff; + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalInstanceStackMap.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalInstanceStackMap.java index ad22f5123b..9ecbf5374e 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalInstanceStackMap.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalInstanceStackMap.java @@ -414,20 +414,23 @@ public final class cElementalInstanceStackMap implements Comparable 0) { newEnergyLevel -= 1; @@ -195,19 +194,19 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { long decayCnt=(long) min(Math.max(amount/DECAY_CALL_PER,MIN_MULTIPLE_DECAY_CALLS),MAX_MULTIPLE_DECAY_CALLS); double amountPer= div(amount,decayCnt); amount= sub(amount,amountPer*(--decayCnt)); - //todo decay mechanics should handle splitting! - cElementalInstanceStackMap output=decayMechanics(lifeTimeMult,apparentAge,newEnergyLevel); + + cElementalDecayResult output=decayMechanics(lifeTimeMult,apparentAge,newEnergyLevel); if(output==null){ amount=amountTemp; return null; } - if(amountPer>0){ - amount=amountPer; - for(int i=0;i 0 && !definition.usesSpecialEnergeticDecayHandling()) { setLifeTimeMultiplier(getLifeTimeMultiplier()); return decayCompute(definition.getEnergyInducedDecay(energy), lifeTimeMult, -1D, newEnergyLevel); @@ -236,27 +235,8 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { } //Use to get direct decay output providing correct decay array - private cElementalInstanceStackMap exponentialDecayCompute(cElementalDecay[] decays, double lifeTimeMult, double newProductsAge, long newEnergyLevel) { - if(lifeTime<1){ - throw new ArithmeticException("Value would be too big..."); - } - double decayInverseRatio=Math.pow(2D,1D/* 1 second *//lifeTime); - double newAmount,decayedAmount; - if(decayInverseRatio>0.99999999D){ - //todo cache this... - BigFloat dir=BigFloat.context(50).valueOf(2).pow(1D/* 1 second *//lifeTime); - BigFloat na=BigFloat.context(50).valueOf(amount).divide(dir); - newAmount=na.toDouble(); - if(newAmount>=amount) { - decayedAmount=BigFloat.context(50).valueOf(amount).subtract(na).toDouble(); - newAmount=amount-ulp(amount); - }else { - decayedAmount=amount-newAmount; - } - }else{ - newAmount= div(amount,decayInverseRatio); - decayedAmount=amount-newAmount; - } + private cElementalDecayResult exponentialDecayCompute(cElementalDecay[] decays, double lifeTimeMult, double newProductsAge, long newEnergyLevel) { + double newAmount= div(amount,Math.pow(2D,1D/* 1 second *//lifeTime)); //if(definition.getSymbol().startsWith("U ")) { // System.out.println("newAmount = " + newAmount); @@ -276,61 +256,62 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { //split to non decaying and decaying part double amount=this.amount; - this.amount= decayedAmount; - cElementalInstanceStackMap products=decayCompute(decays,lifeTimeMult,newProductsAge,newEnergyLevel); + this.amount-=newAmount; + cElementalDecayResult products=decayCompute(decays,lifeTimeMult,newProductsAge,newEnergyLevel); this.amount=newAmount; if(products!=null){ - products.putUnify(clone()); + products.getOutput().putUnify(clone()); } this.amount=amount; return products; } //Use to get direct decay output providing correct decay array - private cElementalInstanceStackMap decayCompute(cElementalDecay[] decays, double lifeTimeMult, double newProductsAge, long newEnergyLevel) { + private cElementalDecayResult decayCompute(cElementalDecay[] decays, double lifeTimeMult, double newProductsAge, long newEnergyLevel) { if (decays == null) { return null;//Can not decay so it wont } + boolean makesEnergy=definition.decayMakesEnergy(energy); + double mass=getMass(); if (decays.length == 0) { - if(definition.decayMakesEnergy(this.energy)) { - return null; - } - return new cElementalInstanceStackMap();//provide non null 0 length array for annihilation + return makesEnergy ? null : new cElementalDecayResult(new cElementalInstanceStackMap(), mass, 0); + //provide non null 0 length array for annihilation } else if (decays.length == 1) {//only one type of decay :D, doesn't need dead end - if(decays[0]==deadEnd && definition.decayMakesEnergy(this.energy)) { - return null;//no extra photons + if(decays[0]==deadEnd) { + return makesEnergy ? null : new cElementalDecayResult(decays[0].getResults(lifeTimeMult, newProductsAge, newEnergyLevel, amount), mass, 0); } - cElementalInstanceStackMap products=decays[0].getResults(lifeTimeMult, newProductsAge, newEnergyLevel, amount); + cElementalInstanceStackMap output = decays[0].getResults(lifeTimeMult, newProductsAge, newEnergyLevel, amount); if(newProductsAge<0){ - if(products.size()==1) { - if(products.size()==1 && products.get(0).definition.equals(definition)) { - products.get(0).setEnergy(energy); - products.get(0).age=age; + if(output.size()==1) { + if(output.size()==1 && output.get(0).definition.equals(definition)) { + output.get(0).setEnergy(energy); + output.get(0).age=age; } }else { - for (cElementalInstanceStack stack : products.values()) { + for (cElementalInstanceStack stack : output.values()) { if (stack.definition.equals(definition)) { stack.age = age; } } } }else{ - if(products.size()==1 && products.get(0).definition.equals(definition)) { - products.get(0).setEnergy(energy); + if(output.size()==1 && output.get(0).definition.equals(definition)) { + output.get(0).setEnergy(energy); } } - if(this.energy <= 0 && products.getMass() > getMass()){ + if(energy <= 0 && output.getMass() > mass){ return null;//no energy usage to decay } - return products; + return new cElementalDecayResult(new cElementalInstanceStackMap(), mass, makesEnergy ? output.getMass()-mass:0); } else { - cElementalInstanceStackMap output = new cElementalInstanceStackMap(); + cElementalDecayResult totalOutput = new cElementalDecayResult(new cElementalInstanceStackMap(),getMass(),0); + cElementalInstanceStackMap output=totalOutput.getOutput(),results; int differentDecays = decays.length; double[] probabilities=new double[differentDecays]; for (int i = 0; i < probabilities.length; i++) { probabilities[i]=decays[i].probability; } - double[] qttyOfDecay = distribute(this.amount, probabilities); + double[] qttyOfDecay = distribute(amount, probabilities); //long amountRemaining = this.amount, amount = this.amount; //float remainingProbability = 1D; // @@ -376,23 +357,22 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { // } //} - if(definition.decayMakesEnergy(this.energy)){ - for (int i = 0; i < differentDecays; i++) { - if (qttyOfDecay[i] > 0) { - if(decays[i]==deadEnd){ - cElementalInstanceStack clone=this.clone(); - clone.amount=qttyOfDecay[i]; - output.putUnify(clone); - }else { - output.putUnifyAll(decays[i].getResults(lifeTimeMult, newProductsAge, newEnergyLevel, qttyOfDecay[i])); - } + if(definition.decayMakesEnergy(energy)){ + for (int i = differentDecays - 1; i >= 0; i--) { + if(decays[i]==deadEnd){ + cElementalInstanceStack clone=clone(); + clone.amount=qttyOfDecay[i]; + output.putUnify(clone); + }else { + results=decays[i].getResults(lifeTimeMult, newProductsAge, newEnergyLevel, qttyOfDecay[i]); + output.putUnifyAll(results); + totalOutput.setMassDiff(add(totalOutput.getMassDiff(),results.getMass()-mass)); } } }else{ - for (int i = 0; i < differentDecays; i++) { - if (qttyOfDecay[i] > 0) { - output.putUnifyAll(decays[i].getResults(lifeTimeMult, newProductsAge, newEnergyLevel, qttyOfDecay[i])); - } + for (int i = differentDecays - 1; i >= 0; i--) { + results=decays[i].getResults(lifeTimeMult, newProductsAge, newEnergyLevel, qttyOfDecay[i]); + output.putUnifyAll(results); } } @@ -413,10 +393,10 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { output.get(0).age=age; } } - if(this.energy <= 0 && output.getMass() > getMass()){ + if(energy <= 0 && output.getMass() > getMass()){ return null;//no energy usage to decay } - return output; + return totalOutput; } } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java index e0398a8fcb..9cfcaf9d55 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java @@ -4,6 +4,7 @@ import com.github.technus.tectech.TecTech; import com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.definitions.dComplexAspectDefinition; import com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.definitions.ePrimalAspectDefinition; import com.github.technus.tectech.mechanics.constructable.IConstructable; +import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalDecayResult; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalInstanceStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalMutableDefinitionStackMap; import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalInstanceStack; @@ -43,6 +44,7 @@ import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texture import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.*; +import static com.github.technus.tectech.util.DoubleCount.add; import static net.minecraft.util.StatCollector.translateToLocal; /** @@ -374,13 +376,13 @@ public class GT_MetaTileEntity_EM_collider extends GT_MetaTileEntity_MultiblockB KEEPUP_COST = -heliumPlasmaValue; } - protected double fuse(GT_MetaTileEntity_EM_collider partner) { + protected double fuse(GT_MetaTileEntity_EM_collider partner) {///CAN MAKE EU if (partner.stack != null && stack != null) {//todo add single event mode as an option boolean check = stack.definition.fusionMakesEnergy(stack.getEnergy()) && partner.stack.definition.fusionMakesEnergy(partner.stack.getEnergy()); cElementalInstanceStack stack2 = partner.stack; - double preMass = stack2.getMass() + stack.getMass(); + double preMass = add(stack2.getMass(),stack.getMass()); //System.out.println("preMass = " + preMass); cElementalInstanceStackMap map = new cElementalInstanceStackMap(); @@ -407,7 +409,7 @@ public class GT_MetaTileEntity_EM_collider extends GT_MetaTileEntity_MultiblockB return 0; } - protected double collide(GT_MetaTileEntity_EM_collider partner) { + protected double collide(GT_MetaTileEntity_EM_collider partner) {//DOES NOT MAKE EU! if (partner.stack != null && stack != null) {//todo add single event mode as an option boolean check = stack.definition.fusionMakesEnergy(stack.getEnergy()) && partner.stack.definition.fusionMakesEnergy(partner.stack.getEnergy()); @@ -482,13 +484,14 @@ public class GT_MetaTileEntity_EM_collider extends GT_MetaTileEntity_MultiblockB if (stack == null) { return null; } - cElementalInstanceStackMap newInstances = stack.decay(1, stack.age += 1, 0); + cElementalDecayResult newInstances = stack.decay(1, stack.age += 1, 0); if (newInstances == null) { stack.nextColor(); + return null; } else { - stack = newInstances.remove(newInstances.getLast().definition); + stack = newInstances.getOutput().remove(newInstances.getOutput().getLast().definition); + return newInstances.getOutput(); } - return newInstances; } @Override @@ -552,14 +555,13 @@ public class GT_MetaTileEntity_EM_collider extends GT_MetaTileEntity_MultiblockB mMaxProgresstime = 20; mEUt = KEEPUP_COST; eAmpereFlow = 2; - return true; } else { started = true; mMaxProgresstime = 20; mEUt = STARTUP_COST; eAmpereFlow = 10; - return true; } + return true; } @Override diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java index 37e121dd26..fe96ca45ba 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java @@ -145,15 +145,13 @@ public class GT_MetaTileEntity_EM_decay extends GT_MetaTileEntity_MultiblockBase //System.out.println(stack.definition.getSymbol()+" "+stack.amount); } - double preMass = outputEM[0].getMass(); - outputEM[0].tickContent(1, 0, 1); - double energyDose = ((preMass - outputEM[0].getMass()) * URANIUM_MASS_TO_EU_PARTIAL); eAmpereFlow = (long) ampereFlow.get(); if (eAmpereFlow <= 0) { mEUt = 0; return false; } - mEUt = (int) (energyDose / eAmpereFlow); + double energyDose = -outputEM[0].tickContent(1, 0, 1) * URANIUM_MASS_TO_EU_PARTIAL; + mEUt = (int) ( energyDose / eAmpereFlow); return outputEM[0].hasStacks(); } -- cgit From 2343de3da2fd37e70caa3d73a8b6ce0686700535 Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 19 Jul 2020 11:32:26 +0200 Subject: Safeguard collide --- .../metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java index 9cfcaf9d55..329b3cbc14 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java @@ -403,17 +403,13 @@ public class GT_MetaTileEntity_EM_collider extends GT_MetaTileEntity_MultiblockB partner.stack = stack = null; //System.out.println("check = " + check); //System.out.println("preMass-map.getMass() = " + (preMass - map.getMass())); - return check ? preMass - map.getMass() : - Math.min(preMass - map.getMass(), 0); + return check ? preMass - map.getMass() : Math.min(preMass - map.getMass(), 0); } return 0; } protected double collide(GT_MetaTileEntity_EM_collider partner) {//DOES NOT MAKE EU! if (partner.stack != null && stack != null) {//todo add single event mode as an option - boolean check = stack.definition.fusionMakesEnergy(stack.getEnergy()) && - partner.stack.definition.fusionMakesEnergy(partner.stack.getEnergy()); - cElementalInstanceStack stack2 = partner.stack; double preMass = stack2.getMass() + stack.getMass(); //System.out.println("preMass = " + preMass); @@ -427,17 +423,13 @@ public class GT_MetaTileEntity_EM_collider extends GT_MetaTileEntity_MultiblockB colliderHandler = FUSE_HANDLERS.get((stack.definition.getClassType() << 16) | stack2.definition.getClassType()); if (handleRecipe(stack2, map, colliderHandler)) return 0; } - for (cElementalInstanceStack newStack : map.values()) { - check &= newStack.definition.fusionMakesEnergy(newStack.getEnergy()); - } //System.out.println("outputEM[0].getMass() = " + outputEM[0].getMass()); outputEM = new cElementalInstanceStackMap[]{map}; partner.stack = stack = null; //System.out.println("check = " + check); //System.out.println("preMass-map.getMass() = " + (preMass - map.getMass())); - return check ? preMass - map.getMass() : - Math.min(preMass - map.getMass(), 0); + return Math.min(preMass - map.getMass(), 0); } return 0; } -- cgit From 614b1538f85731f7598dc9f527739f3203f29af7 Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 19 Jul 2020 12:00:45 +0200 Subject: Cleanup DEBUG scanning of EM --- .../elementalMatter/core/cElementalInstanceStackMap.java | 11 +++++------ .../elementalMatter/core/stacks/cElementalInstanceStack.java | 3 ++- .../hatch/GT_MetaTileEntity_Hatch_ElementalContainer.java | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalInstanceStackMap.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalInstanceStackMap.java index 9ecbf5374e..96fd686ef8 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalInstanceStackMap.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalInstanceStackMap.java @@ -330,15 +330,14 @@ public final class cElementalInstanceStackMap implements Comparable 0) { if (content == null || content.size() == 0) { return new String[]{translateToLocalFormatted("tt.keyword.ID", clientLocale) + ": " + EnumChatFormatting.AQUA + id, translateToLocalFormatted("tt.keyphrase.No_Stacks", clientLocale)}; -- cgit From 8ee168be62e5d5a10d0efd281293a2623d260633 Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 19 Jul 2020 12:10:15 +0200 Subject: Reduce decay counts --- .../elementalMatter/core/stacks/cElementalInstanceStack.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/stacks/cElementalInstanceStack.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/stacks/cElementalInstanceStack.java index 9d38e283db..547c0b7b9d 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/stacks/cElementalInstanceStack.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/stacks/cElementalInstanceStack.java @@ -17,14 +17,14 @@ import static com.github.technus.tectech.mechanics.elementalMatter.definitions.p import static com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.eBosonDefinition.deadEnd; import static com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_scanner.*; import static com.github.technus.tectech.util.DoubleCount.*; -import static java.lang.Math.min; -import static java.lang.Math.ulp; +import static java.lang.Math.*; /** * Created by danie_000 on 22.10.2016. */ public final class cElementalInstanceStack implements iHasElementalDefinition { - public static int MIN_MULTIPLE_DECAY_CALLS=16,MAX_MULTIPLE_DECAY_CALLS=64,DECAY_CALL_PER=144;//todo + public static int MIN_MULTIPLE_DECAY_CALLS=4,MAX_MULTIPLE_DECAY_CALLS=16; + public static double DECAY_CALL_PER=AVOGADRO_CONSTANT;//todo public final iElementalDefinition definition; //energy - if positive then particle should try to decay @@ -192,7 +192,7 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { } if(definition.usesMultipleDecayCalls(energy)){ double amountTemp=amount; - long decayCnt=(long) min(Math.max(amount/DECAY_CALL_PER,MIN_MULTIPLE_DECAY_CALLS),MAX_MULTIPLE_DECAY_CALLS); + long decayCnt=(long) min(MAX_MULTIPLE_DECAY_CALLS,max(amount/DECAY_CALL_PER,MIN_MULTIPLE_DECAY_CALLS)); double amountPer= div(amount,decayCnt); amount= sub(amount,amountPer*(--decayCnt)); @@ -418,7 +418,7 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { maxEnergy=instance.energy; } lifeTimeMul = min(lifeTimeMul, instance.lifeTimeMult); - age = Math.max(age, instance.age); + age = max(age, instance.age); } } -- cgit From ed1a7521080d545318fccd27b5c4351489db9690 Mon Sep 17 00:00:00 2001 From: basdxz Date: Sun, 19 Jul 2020 12:05:45 +0100 Subject: Refactor TecTechConfig.java --- .../java/com/github/technus/tectech/TecTech.java | 2 +- .../technus/tectech/loader/TecTechConfig.java | 156 ++++++++++++--------- .../multi/GT_MetaTileEntity_TM_teslaCoil.java | 18 +-- .../single/GT_MetaTileEntity_TeslaCoil.java | 2 +- 4 files changed, 100 insertions(+), 78 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/TecTech.java b/src/main/java/com/github/technus/tectech/TecTech.java index 47a3b576b1..809a7e877d 100644 --- a/src/main/java/com/github/technus/tectech/TecTech.java +++ b/src/main/java/com/github/technus/tectech/TecTech.java @@ -78,7 +78,7 @@ public class TecTech { LOGGER.error(Reference.MODID + " could not load its config file. Things are going to be weird!"); } - if (configTecTech.modAdminErrorLogs) { + if (configTecTech.MOD_ADMIN_ERROR_LOGS) { LOGGER.setDebugOutput(DEBUG_MODE); LOGGER.debug("moduleAdminErrorLogs is enabled"); moduleAdminErrorLogs = new IngameErrorLog(); diff --git a/src/main/java/com/github/technus/tectech/loader/TecTechConfig.java b/src/main/java/com/github/technus/tectech/loader/TecTechConfig.java index cc6afd3f00..66e549ddb1 100644 --- a/src/main/java/com/github/technus/tectech/loader/TecTechConfig.java +++ b/src/main/java/com/github/technus/tectech/loader/TecTechConfig.java @@ -9,65 +9,70 @@ public class TecTechConfig extends ConfigManager { super(pConfigBaseDirectory, pModCollectionDirectory, pModID); } - public boolean modAdminErrorLogs; - //final static to allow compiler to remove the debug code when this is false public static boolean DEBUG_MODE = false; + public boolean DISABLE_MATERIAL_LOADING_FFS; + public boolean BOOM_ENABLE; + public boolean DISABLE_BLOCK_HARDNESS_NERF; public boolean EASY_SCAN; public boolean NERF_FUSION; public boolean ENABLE_TURRET_EXPLOSIONS; - public boolean DISABLE_MATERIAL_LOADING_FFS; - public boolean DISABLE_BLOCK_HARDNESS_NERF; public float TURRET_DAMAGE_FACTOR; public float TURRET_EXPLOSION_FACTOR; - public int TESLA_MULTI_TOWER_RANGE; - public int TESLA_MULTI_TRANSCEIVER_RANGE; - public int TESLA_MULTI_COVER_RANGE; - public int TESLA_MULTI_PLASMA_RANGE_MULTI_T1; - public int TESLA_MULTI_PLASMA_RANGE_MULTI_T2; - public int TESLA_MULTI_HELIUM_PLASMA_PER_SECOND; - public int TESLA_MULTI_NITROGEN_PLASMA_PER_SECOND; - public int TESLA_MULTI_RADON_PLASMA_PER_SECOND; + + public boolean MOD_ADMIN_ERROR_LOGS; + + public boolean TESLA_MULTI_GAS_OUTPUT; + public float TESLA_MULTI_LOSS_FACTOR_OVERDRIVE; public int TESLA_MULTI_LOSS_PER_BLOCK_T0; public int TESLA_MULTI_LOSS_PER_BLOCK_T1; public int TESLA_MULTI_LOSS_PER_BLOCK_T2; - public float TESLA_MULTI_OVERDRIVE_LOSS_FACTOR; - public boolean TESLA_MULTI_GAS_OUTPUT; - public int TESLA_SINGLE_RANGE; + public int TESLA_MULTI_PLASMA_PER_SECOND_T1_HELIUM; + public int TESLA_MULTI_PLASMA_PER_SECOND_T1_NITROGEN; + public int TESLA_MULTI_PLASMA_PER_SECOND_T2_RADON; + public int TESLA_MULTI_RANGE_COEFFICIENT_PLASMA_T1; + public int TESLA_MULTI_RANGE_COEFFICIENT_PLASMA_T2; + public int TESLA_MULTI_RANGE_COVER; + public int TESLA_MULTI_RANGE_TOWER; + public int TESLA_MULTI_RANGE_TRANSCEIVER; + public float TESLA_SINGLE_LOSS_FACTOR_OVERDRIVE; public int TESLA_SINGLE_LOSS_PER_BLOCK; - public float TESLA_SINGLE_OVERDRIVE_LOSS_FACTOR; + public int TESLA_SINGLE_RANGE; /** * This loading phases do not correspond to mod loading phases! */ @Override protected void PreInit() { - modAdminErrorLogs = false; - EASY_SCAN = false; + DISABLE_MATERIAL_LOADING_FFS = false; + BOOM_ENABLE = true; - NERF_FUSION = false; DISABLE_BLOCK_HARDNESS_NERF = false; + EASY_SCAN = false; + NERF_FUSION = false; ENABLE_TURRET_EXPLOSIONS = true; - DISABLE_MATERIAL_LOADING_FFS = false; TURRET_DAMAGE_FACTOR = 10; TURRET_EXPLOSION_FACTOR = 1; - TESLA_MULTI_TOWER_RANGE= 32; - TESLA_MULTI_TRANSCEIVER_RANGE= 16; - TESLA_MULTI_COVER_RANGE= 16; - TESLA_MULTI_PLASMA_RANGE_MULTI_T1= 2; - TESLA_MULTI_PLASMA_RANGE_MULTI_T2= 4; - TESLA_MULTI_HELIUM_PLASMA_PER_SECOND = 100; - TESLA_MULTI_NITROGEN_PLASMA_PER_SECOND = 50; - TESLA_MULTI_RADON_PLASMA_PER_SECOND = 50; + + MOD_ADMIN_ERROR_LOGS = false; + + TESLA_MULTI_GAS_OUTPUT = false; + TESLA_MULTI_LOSS_FACTOR_OVERDRIVE = 0.25F; TESLA_MULTI_LOSS_PER_BLOCK_T0 = 1; TESLA_MULTI_LOSS_PER_BLOCK_T1 = 1; TESLA_MULTI_LOSS_PER_BLOCK_T2 = 1; - TESLA_MULTI_OVERDRIVE_LOSS_FACTOR = 0.25F; - TESLA_MULTI_GAS_OUTPUT = false; - TESLA_SINGLE_RANGE = 20; + TESLA_MULTI_PLASMA_PER_SECOND_T1_HELIUM = 100; + TESLA_MULTI_PLASMA_PER_SECOND_T1_NITROGEN = 50; + TESLA_MULTI_PLASMA_PER_SECOND_T2_RADON = 50; + TESLA_MULTI_RANGE_COEFFICIENT_PLASMA_T1 = 2; + TESLA_MULTI_RANGE_COEFFICIENT_PLASMA_T2 = 4; + TESLA_MULTI_RANGE_COVER = 16; + TESLA_MULTI_RANGE_TOWER = 32; + TESLA_MULTI_RANGE_TRANSCEIVER = 16; + TESLA_SINGLE_LOSS_FACTOR_OVERDRIVE = 0.25F; TESLA_SINGLE_LOSS_PER_BLOCK = 1; - TESLA_SINGLE_OVERDRIVE_LOSS_FACTOR = 0.25F; + TESLA_SINGLE_RANGE = 20; } /** @@ -75,43 +80,61 @@ public class TecTechConfig extends ConfigManager { */ @Override protected void Init() { - modAdminErrorLogs = _mainConfig.getBoolean("AdminErrorLog", "Modules", modAdminErrorLogs, - "If set to true, every op/admin will receive all errors occurred during the startup phase as in game message on join"); - DEBUG_MODE = _mainConfig.getBoolean("DebugMode", "Debug", DEBUG_MODE, + DEBUG_MODE = _mainConfig.getBoolean("DebugMode", "debug", DEBUG_MODE, "Enables logging and other purely debug features"); - EASY_SCAN = _mainConfig.getBoolean("EasyScan", "Features", EASY_SCAN, - "Enables tricorder to scan EM i/o hatches directly, too CHEEKY"); - BOOM_ENABLE = _mainConfig.getBoolean("BoomEnable", "Features", BOOM_ENABLE, + DISABLE_MATERIAL_LOADING_FFS = _mainConfig.getBoolean("DisableMaterialLoading", "debug", + DISABLE_MATERIAL_LOADING_FFS, "Set to true to disable gregtech material processing"); + + BOOM_ENABLE = _mainConfig.getBoolean("BoomEnable", "features", BOOM_ENABLE, "Set to false to disable explosions on everything bad that you can do"); - NERF_FUSION = _mainConfig.getBoolean("NerfFusion", "Features", NERF_FUSION, + DISABLE_BLOCK_HARDNESS_NERF = _mainConfig.getBoolean("DisableBlockHardnessNerf", "features", + DISABLE_BLOCK_HARDNESS_NERF, "Set to true to disable the block hardness nerf"); + EASY_SCAN = _mainConfig.getBoolean("EasyScan", "features", EASY_SCAN, + "Enables tricorder to scan EM i/o hatches directly, too CHEEKY"); + NERF_FUSION = _mainConfig.getBoolean("NerfFusion", "features", NERF_FUSION, "Set to true to enable removal of plasmas heavier than Fe and other weird ones"); - ENABLE_TURRET_EXPLOSIONS = _mainConfig.getBoolean("TurretBoomEnable", "Features", ENABLE_TURRET_EXPLOSIONS, - "Set to false to disable explosions caused by EM turrets"); - TURRET_DAMAGE_FACTOR = _mainConfig.getFloat("TurretDamageFactor", "Features", TURRET_DAMAGE_FACTOR, 0, Short.MAX_VALUE, - "Damage is multiplied by this number"); - TURRET_EXPLOSION_FACTOR = _mainConfig.getFloat("TurretExplosionFactor", "Features", TURRET_EXPLOSION_FACTOR, 0, Short.MAX_VALUE, - "Explosion strength is multiplied by this number"); - DISABLE_BLOCK_HARDNESS_NERF = _mainConfig.getBoolean("DisableBlockHardnessNerf", "Features", DISABLE_BLOCK_HARDNESS_NERF, - "Set to true to disable the block hardness nerf"); - DISABLE_MATERIAL_LOADING_FFS = _mainConfig.getBoolean("DisableMaterialLoading", "Debug", DISABLE_MATERIAL_LOADING_FFS, - "Set to true to disable gregtech material processing"); - - TESLA_MULTI_TOWER_RANGE = _mainConfig.getInt("TeslaMultiTowerRange", "Balance Tweaks", TESLA_MULTI_TOWER_RANGE, 0, Integer.MAX_VALUE, "Tesla Tower to Tower max range"); - TESLA_MULTI_TRANSCEIVER_RANGE = _mainConfig.getInt("TeslaMultiTransceiverRange", "Balance Tweaks", TESLA_MULTI_TRANSCEIVER_RANGE, 0, Integer.MAX_VALUE, "Tesla Tower to Transceiver max range"); - TESLA_MULTI_COVER_RANGE = _mainConfig.getInt("TeslaMultiCoverRange", "Balance Tweaks", TESLA_MULTI_COVER_RANGE, 0, Integer.MAX_VALUE, "Tesla Tower to Tesla Coil Rich Edition Cover max range"); - TESLA_MULTI_PLASMA_RANGE_MULTI_T1 = _mainConfig.getInt("TeslaMultiPlasmaRangeMultiT1", "Balance Tweaks", TESLA_MULTI_PLASMA_RANGE_MULTI_T1, 0, Integer.MAX_VALUE, "Tesla Tower T1 Plasmas Range Multiplier"); - TESLA_MULTI_PLASMA_RANGE_MULTI_T2 = _mainConfig.getInt("TeslaMultiPlasmaRangeMultiT2", "Balance Tweaks", TESLA_MULTI_PLASMA_RANGE_MULTI_T2, 0, Integer.MAX_VALUE, "Tesla Tower T2 Plasmas Range Multiplier"); - TESLA_MULTI_HELIUM_PLASMA_PER_SECOND = _mainConfig.getInt("TeslaMultiHeliumPlasmaPerSecond", "Balance Tweaks", TESLA_MULTI_HELIUM_PLASMA_PER_SECOND, 0, Integer.MAX_VALUE, "Tesla Tower helium plasma consumed each second the tesla tower is active"); - TESLA_MULTI_NITROGEN_PLASMA_PER_SECOND = _mainConfig.getInt("TeslaMultiNitrogenPlasmaPerSecond", "Balance Tweaks", TESLA_MULTI_NITROGEN_PLASMA_PER_SECOND, 0, Integer.MAX_VALUE, "Tesla Tower nitrogen plasma consumed each second the tesla tower is active"); - TESLA_MULTI_RADON_PLASMA_PER_SECOND = _mainConfig.getInt("TeslaMultiRadonPlasmaPerSecond", "Balance Tweaks", TESLA_MULTI_RADON_PLASMA_PER_SECOND, 0, Integer.MAX_VALUE, "Tesla Tower radon plasma consumed each second the tesla tower is active"); - TESLA_MULTI_LOSS_PER_BLOCK_T0 = _mainConfig.getInt("TeslaMultiLossPerBlockT0", "Balance Tweaks", TESLA_MULTI_LOSS_PER_BLOCK_T0, 0, Integer.MAX_VALUE, "Tesla Tower power transmission loss per block per amp using no plasmas"); - TESLA_MULTI_LOSS_PER_BLOCK_T1 = _mainConfig.getInt("TeslaMultiLossPerBlockT1", "Balance Tweaks", TESLA_MULTI_LOSS_PER_BLOCK_T1, 0, Integer.MAX_VALUE, "Tesla Tower power transmission loss per block per amp using helium or nitrogen plasma"); - TESLA_MULTI_LOSS_PER_BLOCK_T2 = _mainConfig.getInt("TeslaMultiLossPerBlockT1", "Balance Tweaks", TESLA_MULTI_LOSS_PER_BLOCK_T2, 0, Integer.MAX_VALUE, "Tesla Tower power transmission loss per block per amp using radon plasma"); - TESLA_MULTI_OVERDRIVE_LOSS_FACTOR = _mainConfig.getFloat("TeslaMultiOverdriveLossFactor", "Balance Tweaks", TESLA_MULTI_OVERDRIVE_LOSS_FACTOR, 0, 1, "Additional Tesla Tower power loss per amp as a factor of the tier voltage"); - TESLA_MULTI_GAS_OUTPUT = _mainConfig.getBoolean("TeslaMultiMoltenOutput", "Balance Tweaks", TESLA_MULTI_GAS_OUTPUT, "Set to true to enable outputting plasmas as gasses from the tesla tower with a 1:1 ratio"); - TESLA_SINGLE_RANGE = _mainConfig.getInt("TeslaSingleRange", "Balance Tweaks", TESLA_SINGLE_RANGE, 0, Integer.MAX_VALUE, "Tesla Transceiver to max range"); - TESLA_SINGLE_LOSS_PER_BLOCK = _mainConfig.getInt("TeslaSingleLossPerBlock", "Balance Tweaks", TESLA_SINGLE_LOSS_PER_BLOCK, 0, Integer.MAX_VALUE, "Tesla Transceiver power transmission loss per block per amp"); - TESLA_SINGLE_OVERDRIVE_LOSS_FACTOR = _mainConfig.getFloat("TeslaSingleOverdriveLossFactor", "Balance Tweaks", TESLA_SINGLE_OVERDRIVE_LOSS_FACTOR, 0, 1, "Additional Tesla Transceiver power loss per amp as a factor of the tier voltage"); + ENABLE_TURRET_EXPLOSIONS = _mainConfig.getBoolean("TurretBoomEnable", "features", + ENABLE_TURRET_EXPLOSIONS, "Set to false to disable explosions caused by EM turrets"); + TURRET_DAMAGE_FACTOR = _mainConfig.getFloat("TurretDamageFactor", "features", TURRET_DAMAGE_FACTOR, + 0, Short.MAX_VALUE, "Damage is multiplied by this number"); + TURRET_EXPLOSION_FACTOR = _mainConfig.getFloat("TurretExplosionFactor", "features", + TURRET_EXPLOSION_FACTOR, 0, Short.MAX_VALUE, "Explosion strength is multiplied by this number"); + + MOD_ADMIN_ERROR_LOGS = _mainConfig.getBoolean("AdminErrorLog", "modules", MOD_ADMIN_ERROR_LOGS, + "If set to true, every op/admin will receive all errors occurred during the startup phase as in game message on join"); + + TESLA_MULTI_GAS_OUTPUT = _mainConfig.getBoolean("TeslaMultiGasOutput", "tesla_tweaks", + TESLA_MULTI_GAS_OUTPUT, "Set to true to enable outputting plasmas as gasses from the tesla tower with a 1:1 ratio"); + TESLA_MULTI_LOSS_FACTOR_OVERDRIVE = _mainConfig.getFloat("TeslaMultiLossFactorOverdrive", "tesla_tweaks", + TESLA_MULTI_LOSS_FACTOR_OVERDRIVE, 0, 1, "Additional Tesla Tower power loss per amp as a factor of the tier voltage"); + TESLA_MULTI_LOSS_PER_BLOCK_T0 = _mainConfig.getInt("TeslaMultiLossPerBlockT0", "tesla_tweaks", + TESLA_MULTI_LOSS_PER_BLOCK_T0, 0, Integer.MAX_VALUE, "Tesla Tower power transmission loss per block per amp using no plasmas"); + TESLA_MULTI_LOSS_PER_BLOCK_T1 = _mainConfig.getInt("TeslaMultiLossPerBlockT1", "tesla_tweaks", + TESLA_MULTI_LOSS_PER_BLOCK_T1, 0, Integer.MAX_VALUE, "Tesla Tower power transmission loss per block per amp using helium or nitrogen plasma"); + TESLA_MULTI_LOSS_PER_BLOCK_T2 = _mainConfig.getInt("TeslaMultiLossPerBlockT2", "tesla_tweaks", + TESLA_MULTI_LOSS_PER_BLOCK_T2, 0, Integer.MAX_VALUE, "Tesla Tower power transmission loss per block per amp using radon plasma"); + TESLA_MULTI_PLASMA_PER_SECOND_T1_HELIUM = _mainConfig.getInt("TeslaMultiPlasmaPerSecondT1Helium", + "tesla_tweaks", TESLA_MULTI_PLASMA_PER_SECOND_T1_HELIUM, 0, Integer.MAX_VALUE, "Tesla Tower helium plasma consumed each second the tesla tower is active"); + TESLA_MULTI_PLASMA_PER_SECOND_T1_NITROGEN = _mainConfig.getInt("TeslaMultiPlasmaPerSecondT1Nitrogen", + "tesla_tweaks", TESLA_MULTI_PLASMA_PER_SECOND_T1_NITROGEN, 0, Integer.MAX_VALUE, "Tesla Tower nitrogen plasma consumed each second the tesla tower is active"); + TESLA_MULTI_PLASMA_PER_SECOND_T2_RADON = _mainConfig.getInt("TeslaMultiPlasmaPerSecondT2Radon", + "tesla_tweaks", TESLA_MULTI_PLASMA_PER_SECOND_T2_RADON, 0, Integer.MAX_VALUE, "Tesla Tower radon plasma consumed each second the tesla tower is active"); + TESLA_MULTI_RANGE_COEFFICIENT_PLASMA_T1 = _mainConfig.getInt("TeslaMultiRangeCoefficientPlasmaT1", + "tesla_tweaks", TESLA_MULTI_RANGE_COEFFICIENT_PLASMA_T1, 0, Integer.MAX_VALUE, "Tesla Tower T1 Plasmas Range Multiplier"); + TESLA_MULTI_RANGE_COEFFICIENT_PLASMA_T2 = _mainConfig.getInt("TeslaMultiRangeCoefficientPlasmaT2", + "tesla_tweaks", TESLA_MULTI_RANGE_COEFFICIENT_PLASMA_T2, 0, Integer.MAX_VALUE, "Tesla Tower T2 Plasmas Range Multiplier"); + TESLA_MULTI_RANGE_COVER = _mainConfig.getInt("TeslaMultiRangeCover", "tesla_tweaks", + TESLA_MULTI_RANGE_COVER, 0, Integer.MAX_VALUE, "Tesla Tower to Tesla Coil Rich Edition Cover max range"); + TESLA_MULTI_RANGE_TOWER = _mainConfig.getInt("TeslaMultiRangeTower", "tesla_tweaks", + TESLA_MULTI_RANGE_TOWER, 0, Integer.MAX_VALUE, "Tesla Tower to Tower max range"); + TESLA_MULTI_RANGE_TRANSCEIVER = _mainConfig.getInt("TeslaMultiRangeTransceiver", "tesla_tweaks", + TESLA_MULTI_RANGE_TRANSCEIVER, 0, Integer.MAX_VALUE, "Tesla Tower to Transceiver max range"); + TESLA_SINGLE_LOSS_FACTOR_OVERDRIVE = _mainConfig.getFloat("TeslaSingleLossFactorOverdrive", "tesla_tweaks", + TESLA_SINGLE_LOSS_FACTOR_OVERDRIVE, 0, 1, "Additional Tesla Transceiver power loss per amp as a factor of the tier voltage"); + TESLA_SINGLE_LOSS_PER_BLOCK = _mainConfig.getInt("TeslaSingleLossPerBlock", "tesla_tweaks", + TESLA_SINGLE_LOSS_PER_BLOCK, 0, Integer.MAX_VALUE, "Tesla Transceiver power transmission loss per block per amp"); + TESLA_SINGLE_RANGE = _mainConfig.getInt("TeslaSingleRange", "tesla_tweaks", + TESLA_SINGLE_RANGE, 0, Integer.MAX_VALUE, "Tesla Transceiver to max range"); } /** @@ -119,6 +142,5 @@ public class TecTechConfig extends ConfigManager { */ @Override protected void PostInit() { - } } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java index 8ab6be3a50..e63a92d107 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java @@ -53,18 +53,18 @@ import static net.minecraft.util.StatCollector.translateToLocal; public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_MultiblockBase_EM implements IConstructable { //region variables - private static final int transferRadiusTowerFromConfig = TecTech.configTecTech.TESLA_MULTI_TOWER_RANGE;//Default is 32 - private static final int transferRadiusTransceiverFromConfig = TecTech.configTecTech.TESLA_MULTI_TRANSCEIVER_RANGE;//Default is 16 - private static final int transferRadiusCoverUltimateFromConfig = TecTech.configTecTech.TESLA_MULTI_COVER_RANGE;//Default is 16 - private static final int plasmaRangeMultiT1 = TecTech.configTecTech.TESLA_MULTI_PLASMA_RANGE_MULTI_T1;//Default is 2 - private static final int plasmaRangeMultiT2 = TecTech.configTecTech.TESLA_MULTI_PLASMA_RANGE_MULTI_T2;//Default is 4 - private static final int heliumUse = TecTech.configTecTech.TESLA_MULTI_HELIUM_PLASMA_PER_SECOND;//Default is 100 - private static final int nitrogenUse = TecTech.configTecTech.TESLA_MULTI_NITROGEN_PLASMA_PER_SECOND;//Default is 50 - private static final int radonUse = TecTech.configTecTech.TESLA_MULTI_RADON_PLASMA_PER_SECOND;//Default is 50 + private static final int transferRadiusTowerFromConfig = TecTech.configTecTech.TESLA_MULTI_RANGE_TOWER;//Default is 32 + private static final int transferRadiusTransceiverFromConfig = TecTech.configTecTech.TESLA_MULTI_RANGE_TRANSCEIVER;//Default is 16 + private static final int transferRadiusCoverUltimateFromConfig = TecTech.configTecTech.TESLA_MULTI_RANGE_COVER;//Default is 16 + private static final int plasmaRangeMultiT1 = TecTech.configTecTech.TESLA_MULTI_RANGE_COEFFICIENT_PLASMA_T1;//Default is 2 + private static final int plasmaRangeMultiT2 = TecTech.configTecTech.TESLA_MULTI_RANGE_COEFFICIENT_PLASMA_T2;//Default is 4 + private static final int heliumUse = TecTech.configTecTech.TESLA_MULTI_PLASMA_PER_SECOND_T1_HELIUM;//Default is 100 + private static final int nitrogenUse = TecTech.configTecTech.TESLA_MULTI_PLASMA_PER_SECOND_T1_NITROGEN;//Default is 50 + private static final int radonUse = TecTech.configTecTech.TESLA_MULTI_PLASMA_PER_SECOND_T2_RADON;//Default is 50 //Default is {1, 1, 1} private static final int[] plasmaTierLoss = new int[]{TecTech.configTecTech.TESLA_MULTI_LOSS_PER_BLOCK_T0, TecTech.configTecTech.TESLA_MULTI_LOSS_PER_BLOCK_T1, TecTech.configTecTech.TESLA_MULTI_LOSS_PER_BLOCK_T2}; - private static final float overDriveLoss = TecTech.configTecTech.TESLA_MULTI_OVERDRIVE_LOSS_FACTOR;//Default is 0.25F; + private static final float overDriveLoss = TecTech.configTecTech.TESLA_MULTI_LOSS_FACTOR_OVERDRIVE;//Default is 0.25F; private static final boolean doFluidOutput = TecTech.configTecTech.TESLA_MULTI_GAS_OUTPUT; //Default is false //Face icons diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java index fcf85e26c3..8d3696d9ad 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java @@ -38,7 +38,7 @@ import static net.minecraft.util.StatCollector.translateToLocalFormatted; public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryBuffer { private final static int transferRadiusMax = TecTech.configTecTech.TESLA_SINGLE_RANGE;//Default is 20 private final static int perBlockLoss = TecTech.configTecTech.TESLA_SINGLE_LOSS_PER_BLOCK;//Default is 1 - private final static float overDriveLoss = TecTech.configTecTech.TESLA_SINGLE_OVERDRIVE_LOSS_FACTOR;//Default is 0.25F + private final static float overDriveLoss = TecTech.configTecTech.TESLA_SINGLE_LOSS_FACTOR_OVERDRIVE;//Default is 0.25F private Map teslaNodeMap = new HashMap<>();//Tesla Map to map them tesla bois! private final static HashSet sparkList = new HashSet<>(); -- cgit From 9566fb9aa67f3dfc9f2e03252dd005fb0dda1fda Mon Sep 17 00:00:00 2001 From: basdxz Date: Sun, 19 Jul 2020 16:02:05 +0100 Subject: Bump version --- build.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.properties b/build.properties index 90269e3abe..ec613edcdf 100644 --- a/build.properties +++ b/build.properties @@ -1,6 +1,6 @@ minecraft.version=1.7.10 forge.version=10.13.4.1614 -tectech.version=3.9.1 +tectech.version=3.10.0 ic2.version=2.2.790-experimental codechickenlib.version=1.1.3.140 -- cgit From 9182db0ff8a7205b012b6a61b26c8550c52fc744 Mon Sep 17 00:00:00 2001 From: basdxz Date: Sun, 19 Jul 2020 16:09:49 +0100 Subject: Added git hash as version appendage https://forgegradle.readthedocs.io/en/latest/cookbook/ --- build.gradle | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index c969fb1e47..8701264e0e 100644 --- a/build.gradle +++ b/build.gradle @@ -30,6 +30,12 @@ file "build.properties" withReader { ext.config = new ConfigSlurper().parse prop } +def getVersionAppendage() { + def proc = "git rev-parse --short HEAD".execute() + proc.waitFor() + return "DEV." + proc.exitValue() ? "GITBORK" : proc.text.trim() +} + ext.set("minecraftVersion","${config.minecraft.version}-${config.forge.version}-${config.minecraft.version}") import de.undercouch.gradle.tasks.download.Download @@ -51,7 +57,7 @@ sourceSets { } } -version = "${config.minecraft.version}-${config.tectech.version}" +version = "${config.minecraft.version}-${config.tectech.version}-"+getVersionAppendage() group = "com.github.technus" archivesBaseName = "TecTech" -- cgit From adf24c44acf9762f80ccb4d2903b8870d5137ed6 Mon Sep 17 00:00:00 2001 From: basdxz Date: Sun, 19 Jul 2020 16:22:23 +0100 Subject: Flipping this seems to fix it? --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 8701264e0e..9689a82607 100644 --- a/build.gradle +++ b/build.gradle @@ -33,7 +33,7 @@ file "build.properties" withReader { def getVersionAppendage() { def proc = "git rev-parse --short HEAD".execute() proc.waitFor() - return "DEV." + proc.exitValue() ? "GITBORK" : proc.text.trim() + return "DEV." + proc.exitValue() ? proc.text.trim() : "GITBORK" } ext.set("minecraftVersion","${config.minecraft.version}-${config.forge.version}-${config.minecraft.version}") -- cgit From 5cc23f76bbb12b13f5456793796aa8f5a8db08b2 Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 19 Jul 2020 18:50:01 +0200 Subject: Adjust some logic IDK --- .../elementalMatter/core/cElementalDecay.java | 6 +- .../core/cElementalInstanceStackMap.java | 7 +++ .../core/stacks/cElementalInstanceStack.java | 28 ++++++--- .../core/templates/cElementalPrimitive.java | 6 +- .../core/transformations/bTransformationInfo.java | 4 +- .../definitions/complex/dAtomDefinition.java | 13 ++--- .../definitions/complex/dHadronDefinition.java | 22 +++---- .../definitions/complex/iaeaNuclide.java | 12 +++- .../definitions/primitive/eBosonDefinition.java | 12 ++-- .../definitions/primitive/eLeptonDefinition.java | 36 ++++++------ .../definitions/primitive/eNeutrinoDefinition.java | 10 ++-- .../definitions/primitive/eQuarkDefinition.java | 67 +++++++++++----------- ...GT_MetaTileEntity_Hatch_ElementalContainer.java | 2 - .../multi/GT_MetaTileEntity_EM_decay.java | 8 +-- .../github/technus/tectech/util/DoubleCount.java | 9 ++- 15 files changed, 139 insertions(+), 103 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalDecay.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalDecay.java index e00bf2d264..e67f773a86 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalDecay.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalDecay.java @@ -20,7 +20,7 @@ public final class cElementalDecay { public final double probability; public cElementalDecay(iElementalDefinition... outSafe) { - this(2D, outSafe); + this(1D, outSafe); } public cElementalDecay(double probability, iElementalDefinition... outSafe) { @@ -33,7 +33,7 @@ public final class cElementalDecay { } public cElementalDecay(cElementalDefinitionStack... outSafe) { - this(2D, outSafe); + this(1D, outSafe); } public cElementalDecay(double probability, cElementalDefinitionStack... out) { @@ -42,7 +42,7 @@ public final class cElementalDecay { } public cElementalDecay(cElementalDefinitionStackMap tree) { - this(2D, tree); + this(1D, tree); } public cElementalDecay(double probability, cElementalDefinitionStackMap tree) { diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalInstanceStackMap.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalInstanceStackMap.java index 96fd686ef8..e1fdc6a553 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalInstanceStackMap.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/core/cElementalInstanceStackMap.java @@ -99,6 +99,11 @@ public final class cElementalInstanceStackMap implements Comparable> getEntrySet() { + return map.entrySet(); + } + + //Removers public void clear() { map.clear(); @@ -336,6 +341,7 @@ public final class cElementalInstanceStackMap implements Comparable fluidQuantization=new HashMap<>(32); diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dAtomDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dAtomDefinition.java index b990adef15..965c46cef6 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dAtomDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dAtomDefinition.java @@ -2,8 +2,6 @@ package com.github.technus.tectech.mechanics.elementalMatter.definitions.complex import com.github.technus.tectech.Reference; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.util.Util; -import com.github.technus.tectech.util.XSTR; import com.github.technus.tectech.compatibility.gtpp.GtppAtomLoader; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalDecay; import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalDefinitionStackMap; @@ -19,19 +17,21 @@ import com.github.technus.tectech.mechanics.elementalMatter.core.transformations import com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.eBosonDefinition; import com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.eLeptonDefinition; import com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.eNeutrinoDefinition; +import com.github.technus.tectech.util.Util; +import com.github.technus.tectech.util.XSTR; import cpw.mods.fml.common.Loader; import gregtech.api.enums.Materials; import net.minecraft.nbt.NBTTagCompound; import java.util.*; -import static com.github.technus.tectech.mechanics.elementalMatter.core.transformations.bTransformationInfo.AVOGADRO_CONSTANT_144; -import static com.github.technus.tectech.util.XSTR.XSTR_INSTANCE; import static com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.definitions.dComplexAspectDefinition.getNbtTagCompound; import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; +import static com.github.technus.tectech.mechanics.elementalMatter.core.transformations.bTransformationInfo.AVOGADRO_CONSTANT_144; import static com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.eBosonDefinition.boson_Y__; import static com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.eBosonDefinition.deadEnd; import static com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_scanner.*; +import static com.github.technus.tectech.util.XSTR.XSTR_INSTANCE; import static gregtech.api.enums.OrePrefixes.dust; /** @@ -178,7 +178,7 @@ public final class dAtomDefinition extends cElementalDefinition { } else { rawLifeTimeTemp = calculateLifeTime(izoDiff, izoDiffAbs, element, neutralCount, containsAnti); } - rawLifeTime = Math.min(rawLifeTimeTemp, iElementalDefinition.STABLE_RAW_LIFE_TIME); + rawLifeTime = Math.min(rawLifeTimeTemp, STABLE_RAW_LIFE_TIME); }else { rawLifeTime = containsAnti ? iaea.halfTime * 1.5514433E-21d * (1d + xstr.nextDouble() * 9d) : iaea.halfTime; } @@ -193,7 +193,7 @@ public final class dAtomDefinition extends cElementalDefinition { } else { rawLifeTimeTemp = calculateLifeTime(izoDiff, izoDiffAbs, element, neutralCount, containsAnti); } - rawLifeTime = Math.min(rawLifeTimeTemp, iElementalDefinition.STABLE_RAW_LIFE_TIME); + rawLifeTime = Math.min(rawLifeTimeTemp, STABLE_RAW_LIFE_TIME); iaeaDefinitionExistsAndHasEnergyLevels =false; } @@ -208,7 +208,6 @@ public final class dAtomDefinition extends cElementalDefinition { decayMode = izoDiff > 0 ? (byte) (Math.min(2, 1 + izoDiffAbs / 4)+ BYTE_OFFSET) : (byte) (-Math.min(2, 1 + izoDiffAbs / 4) + BYTE_OFFSET); } //this.stable = this.rawLifeTime >= STABLE_RAW_LIFE_TIME; - hash=super.hashCode(); } diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dHadronDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dHadronDefinition.java index 6b9e56bbf1..c5efaf1403 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dHadronDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/dHadronDefinition.java @@ -154,7 +154,7 @@ public final class dHadronDefinition extends cElementalDefinition {//TODO Optimi name.append(' ').append(sym); }else { for (cElementalDefinitionStack quark : quarkStacks.values()) { - name.append(' ').append(quark.definition.getSymbol()).append(quark.amount); + name.append(' ').append(quark.definition.getSymbol()).append((int)quark.amount); } } return name.toString(); @@ -278,7 +278,9 @@ public final class dHadronDefinition extends cElementalDefinition {//TODO Optimi @Override public cElementalDecay[] getDecayArray() { cElementalDefinitionStack[] quarkStacks = this.quarkStacks.values(); - if (amount == 2 && quarkStacks.length == 2 && quarkStacks[0].definition.getMass() == quarkStacks[1].definition.getMass() && quarkStacks[0].definition.getType() == -quarkStacks[1].definition.getType()) { + if (amount == 2 && quarkStacks.length == 2 && + quarkStacks[0].definition.getMass() == quarkStacks[1].definition.getMass() && + quarkStacks[0].definition.getType() == -quarkStacks[1].definition.getType()) { return cElementalDecay.noProduct; } else if (amount != 3) { return new cElementalDecay[]{new cElementalDecay(0.95D, quarkStacks), eBosonDefinition.deadEnd}; //decay into quarks @@ -293,24 +295,22 @@ public final class dHadronDefinition extends cElementalDefinition {//TODO Optimi //remove last eQuarkDefinition lastQuark = newBaryon.remove(2); + cElementalDefinitionStack[] decay; if (Math.abs(lastQuark.getType()) > 1) { - cElementalDefinitionStack[] decay = lastQuark.getDecayArray()[1].outputStacks.values(); - newBaryon.add((eQuarkDefinition) decay[0].definition); - Particles[0] = decay[1].definition; - Particles[1] = decay[2].definition; + decay = lastQuark.getDecayArray()[1].outputStacks.values(); } else { - cElementalDefinitionStack[] decay = lastQuark.getDecayArray()[0].outputStacks.values(); - newBaryon.add((eQuarkDefinition) decay[0].definition); - Particles[0] = decay[1].definition; - Particles[1] = decay[2].definition; + decay = lastQuark.getDecayArray()[2].outputStacks.values(); } + newBaryon.add((eQuarkDefinition) decay[0].definition); + Particles[0] = decay[1].definition; + Particles[1] = decay[2].definition; eQuarkDefinition[] contentOfBaryon = newBaryon.toArray(new eQuarkDefinition[3]); try { return new cElementalDecay[]{ - new cElementalDecay(0.99D, new dHadronDefinition(false, contentOfBaryon), Particles[0], Particles[1]), new cElementalDecay(0.001D, new dHadronDefinition(false, contentOfBaryon), Particles[0], Particles[1], boson_Y__), + new cElementalDecay(0.99D, new dHadronDefinition(false, contentOfBaryon), Particles[0], Particles[1]), eBosonDefinition.deadEnd}; } catch (tElementalException e) { if (DEBUG_MODE) { diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/iaeaNuclide.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/iaeaNuclide.java index 410e53810e..8b09bfd2e0 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/iaeaNuclide.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/complex/iaeaNuclide.java @@ -52,7 +52,7 @@ public final class iaeaNuclide { while((line=reader.readLine())!=null) { String[] split= splitButDifferent(line,","); if(split.length!=47) { - throw new Error("Invalid count (" + split.length + ") of separators in IAEA nuvlidesTable database " + line); + throw new Error("Invalid count (" + split.length + ") of separators in IAEA nuclidesTable database " + line); } get(Integer.parseInt(split[0]),Integer.parseInt(split[1])).getMoreData(split); } @@ -140,6 +140,14 @@ public final class iaeaNuclide { energeticStatesArray = empty; } else { energeticStatesArray = energeticStates.values().toArray(new energeticState[0]); + double life=halfTime; + for (energeticState energeticState : energeticStatesArray) { + if(Double.isNaN(energeticState.Thalf)){ + energeticState.Thalf=life; + }else { + life=energeticState.Thalf; + } + } } } @@ -162,7 +170,7 @@ public final class iaeaNuclide { public static final class energeticState{ public final double energy; - public final double Thalf; + public double Thalf; public final iaeaDecay[] decaymodes; private energeticState(iaeaNuclide nuclide,double Thalf,iaeaDecay[] decaymodes){ diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/eBosonDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/eBosonDefinition.java index f1f740f665..9a82cdd6c0 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/eBosonDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/eBosonDefinition.java @@ -4,6 +4,10 @@ import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalDecay import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalDefinitionStack; import com.github.technus.tectech.mechanics.elementalMatter.core.templates.cElementalPrimitive; +import static com.github.technus.tectech.mechanics.elementalMatter.core.cElementalDecay.*; +import static com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.eLeptonDefinition.*; +import static com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.eQuarkDefinition.*; + /** * Created by danie_000 on 22.10.2016. */ @@ -21,11 +25,11 @@ public final class eBosonDefinition extends cElementalPrimitive { } public static void run() { - boson_Y__.init(null, NO_DECAY_RAW_LIFE_TIME, -1, -1, cElementalDecay.noDecay); - boson_H__.init(null, 1.56e-22D, 0, 0, + boson_Y__.init(null, NO_DECAY_RAW_LIFE_TIME, -1, -1, noDecay); + boson_H__.init(null, 1.56e-22D, 2, 2, + new cElementalDecay(0.01D, quark_b, quark_b_), + new cElementalDecay(0.02D, lepton_t, lepton_t_), new cElementalDecay(0.96D, new cElementalDefinitionStack(boson_Y__, 4)), - new cElementalDecay(0.02D, eLeptonDefinition.lepton_t, eLeptonDefinition.lepton_t_), - new cElementalDecay(0.01D, eQuarkDefinition.quark_b, eQuarkDefinition.quark_b_), deadEnd); } diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/eLeptonDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/eLeptonDefinition.java index dd57d6875e..1e3b7189a8 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/eLeptonDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/eLeptonDefinition.java @@ -4,6 +4,10 @@ import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalDecay import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalDefinitionStack; import com.github.technus.tectech.mechanics.elementalMatter.core.templates.cElementalPrimitive; +import static com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.eBosonDefinition.*; +import static com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.eBosonDefinition.boson_Y__; +import static com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.eNeutrinoDefinition.*; + /** * Created by danie_000 on 22.10.2016. */ @@ -29,28 +33,28 @@ public final class eLeptonDefinition extends cElementalPrimitive { public static void run() { lepton_e.init(lepton_e_, STABLE_RAW_LIFE_TIME, 0, 1, - eBosonDefinition.deadEnd,//makes photons and don't care - new cElementalDecay(lepton_e, eBosonDefinition.boson_Y__)); + deadEnd, + new cElementalDecay(lepton_e,boson_Y__)); lepton_m.init(lepton_m_, 2.197019e-6D, 0, 1, - new cElementalDecay(0.9D, lepton_e, eNeutrinoDefinition.lepton_Ve_, eNeutrinoDefinition.lepton_Vm), - eBosonDefinition.deadEnd);//makes photons and don't care + new cElementalDecay(0.9D, lepton_e, lepton_Ve_, lepton_Vm), + deadEnd);//makes photons and don't care lepton_t.init(lepton_t_, 2.906e-13D, 1, 3, - new cElementalDecay(0.8D, lepton_m, eNeutrinoDefinition.lepton_Vm_, eNeutrinoDefinition.lepton_Vt, eBosonDefinition.boson_Y__), - new cElementalDecay(0.1D, lepton_e, eNeutrinoDefinition.lepton_Ve_, eNeutrinoDefinition.lepton_Vm), - new cElementalDecay(0.05F, lepton_m, eNeutrinoDefinition.lepton_Vm_, eNeutrinoDefinition.lepton_Vt, eBosonDefinition.boson_H__), - eBosonDefinition.deadEnd);//makes photons and don't care + new cElementalDecay(0.05F, lepton_m, lepton_Vm_, lepton_Vt, boson_H__), + new cElementalDecay(0.1D, lepton_e, lepton_Ve_, lepton_Vm), + new cElementalDecay(0.8D, lepton_m, lepton_Vm_, lepton_Vt, boson_Y__), + deadEnd);//makes photons and don't care lepton_e_.init(lepton_e, STABLE_RAW_LIFE_TIME, 0, 1, - eBosonDefinition.deadEnd,//makes photons and don't care - new cElementalDecay(lepton_e_, eBosonDefinition.boson_Y__)); + deadEnd, + new cElementalDecay(lepton_e,boson_Y__)); lepton_m_.init(lepton_m, 2.197019e-6F, 0, 1, - new cElementalDecay(0.9F, lepton_e_, eNeutrinoDefinition.lepton_Ve, eNeutrinoDefinition.lepton_Vm_), - eBosonDefinition.deadEnd);//makes photons and don't care + new cElementalDecay(0.9F, lepton_e_, lepton_Ve, lepton_Vm_), + deadEnd);//makes photons and don't care lepton_t_.init(lepton_t, 2.906e-13F, 1, 3, - new cElementalDecay(0.8F, lepton_m_, eNeutrinoDefinition.lepton_Vm, eNeutrinoDefinition.lepton_Vt_, eBosonDefinition.boson_Y__), - new cElementalDecay(0.1F, lepton_e_, eNeutrinoDefinition.lepton_Ve, eNeutrinoDefinition.lepton_Vm_), - new cElementalDecay(0.05F, lepton_m_, eNeutrinoDefinition.lepton_Vm, eNeutrinoDefinition.lepton_Vt_, eBosonDefinition.boson_H__), - eBosonDefinition.deadEnd);//makes photons and don't care + new cElementalDecay(0.05F, lepton_m_, lepton_Vm, lepton_Vt_, boson_H__), + new cElementalDecay(0.1F, lepton_e_, lepton_Ve, lepton_Vm_), + new cElementalDecay(0.8F, lepton_m_, lepton_Vm, lepton_Vt_, boson_Y__), + deadEnd);//makes photons and don't care } @Override diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/eNeutrinoDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/eNeutrinoDefinition.java index ba084af9a2..c55e7f6364 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/eNeutrinoDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/eNeutrinoDefinition.java @@ -4,6 +4,8 @@ import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalDecay import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElementalDefinitionStack; import com.github.technus.tectech.mechanics.elementalMatter.core.templates.cElementalPrimitive; +import static com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.eBosonDefinition.*; + /** * Created by danie_000 on 22.10.2016. */ @@ -30,19 +32,19 @@ public final class eNeutrinoDefinition extends cElementalPrimitive { cElementalDecay.noProduct); lepton_Vm.init(lepton_Vm_, 1D, 1, 0, new cElementalDecay(0.825D, nothing), - eBosonDefinition.deadEndHalf); + deadEndHalf); lepton_Vt.init(lepton_Vt_, 1, 1, 0, new cElementalDecay(0.75F, nothing), - eBosonDefinition.deadEnd); + deadEnd); lepton_Ve_.init(lepton_Ve, 1, -1, -1, cElementalDecay.noProduct); lepton_Vm_.init(lepton_Vm, 1, 1, 0, new cElementalDecay(0.825F, nothing), - eBosonDefinition.deadEndHalf); + deadEndHalf); lepton_Vt_.init(lepton_Vt, 1, 1, 0, new cElementalDecay(0.75F, nothing), - eBosonDefinition.deadEnd); + deadEnd); } @Override diff --git a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/eQuarkDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/eQuarkDefinition.java index 027b604dc5..9e5b2e66bb 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/eQuarkDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/elementalMatter/definitions/primitive/eQuarkDefinition.java @@ -3,6 +3,9 @@ package com.github.technus.tectech.mechanics.elementalMatter.definitions.primiti import com.github.technus.tectech.mechanics.elementalMatter.core.cElementalDecay; import com.github.technus.tectech.mechanics.elementalMatter.core.templates.cElementalPrimitive; +import static com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.eLeptonDefinition.*; +import static com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.eNeutrinoDefinition.*; + /** * Created by danie_000 on 22.10.2016. */ @@ -27,67 +30,67 @@ public final class eQuarkDefinition extends cElementalPrimitive { public static void run() { quark_u.init(quark_u_, STABLE_RAW_LIFE_TIME, 3, -1, - new cElementalDecay(0.9D, quark_d, eLeptonDefinition.lepton_e_, eNeutrinoDefinition.lepton_Ve), - new cElementalDecay(0.050778116D, quark_s/*,lepton_m_,lepton_Vm*/), new cElementalDecay(1.23201e-5D, quark_b/*,lepton_t_,lepton_Vt*/), + new cElementalDecay(0.050778116D, quark_s/*,lepton_m_,lepton_Vm*/), + new cElementalDecay(0.9D, quark_d, lepton_e_, lepton_Ve), eBosonDefinition.deadEnd);//makes photons and don't care quark_c.init(quark_c_, 0.5e-13D, 1, -1, - new cElementalDecay(0.9D, quark_s, eLeptonDefinition.lepton_e_, eNeutrinoDefinition.lepton_Ve), - new cElementalDecay(0.05071504D, quark_d, eLeptonDefinition.lepton_m_, eNeutrinoDefinition.lepton_Vm), new cElementalDecay(0.00169744D, quark_b/*,lepton_t_,lepton_Vt*/), + new cElementalDecay(0.05071504D, quark_d, lepton_m_, lepton_Vm), + new cElementalDecay(0.9D, quark_s, lepton_e_, lepton_Ve), eBosonDefinition.deadEnd);//makes photons and don't care - quark_t.init(quark_t_, 2.5e-26D, 2, -1, - new cElementalDecay(0.9D, quark_b, eLeptonDefinition.lepton_e_, eNeutrinoDefinition.lepton_Ve), - new cElementalDecay(0.00163216D, quark_s, eLeptonDefinition.lepton_m_, eNeutrinoDefinition.lepton_Vm), - new cElementalDecay(7.51689e-5D, quark_d, eLeptonDefinition.lepton_t_, eNeutrinoDefinition.lepton_Vt), + quark_t.init(quark_t_, 2.5e-26D, 0, -1, + new cElementalDecay(7.51689e-5D, quark_d, lepton_t_, lepton_Vt), + new cElementalDecay(0.00163216D, quark_s, lepton_m_, lepton_Vm), + new cElementalDecay(0.9D, quark_b, lepton_e_, lepton_Ve), eBosonDefinition.deadEnd);//makes photons and don't care quark_d.init(quark_d_, STABLE_RAW_LIFE_TIME, 3, -1, - new cElementalDecay(0.9D, quark_u, eLeptonDefinition.lepton_e, eNeutrinoDefinition.lepton_Ve_), - new cElementalDecay(0.05071504D, quark_c/*,lepton_m,lepton_Vm_*/), new cElementalDecay(7.51689e-5D, quark_t/*,lepton_t,lepton_Vt_*/), + new cElementalDecay(0.05071504D, quark_c/*,lepton_m,lepton_Vm_*/), + new cElementalDecay(0.9D, quark_u, lepton_e, lepton_Ve_), eBosonDefinition.deadEnd);//makes photons and don't care quark_s.init(quark_s_, 0.6e-9D, 1, -1, - new cElementalDecay(0.9D, quark_c, eLeptonDefinition.lepton_e, eNeutrinoDefinition.lepton_Ve_), - new cElementalDecay(0.050778116D, quark_u, eLeptonDefinition.lepton_m, eNeutrinoDefinition.lepton_Vm_), new cElementalDecay(0.00163216D, quark_t/*,lepton_t,lepton_Vt_*/), + new cElementalDecay(0.050778116D, quark_u, lepton_m, lepton_Vm_), + new cElementalDecay(0.9D, quark_c, lepton_e, lepton_Ve_), eBosonDefinition.deadEnd);//makes photons and don't care - quark_b.init(quark_b_, 0.7e-13D, 2, -1, - new cElementalDecay(0.9D, quark_t, eLeptonDefinition.lepton_e, eNeutrinoDefinition.lepton_Ve_), - new cElementalDecay(0.00169744D, quark_c, eLeptonDefinition.lepton_m, eNeutrinoDefinition.lepton_Vm_), - new cElementalDecay(1.23201e-5D, quark_u, eLeptonDefinition.lepton_t, eNeutrinoDefinition.lepton_Vt_), + quark_b.init(quark_b_, 0.7e-13D, 0, -1, + new cElementalDecay(1.23201e-5D, quark_u, lepton_t, lepton_Vt_), + new cElementalDecay(0.00169744D, quark_c, lepton_m, lepton_Vm_), + new cElementalDecay(0.9D, quark_t, lepton_e, lepton_Ve_), eBosonDefinition.deadEnd);//makes photons and don't care quark_u_.init(quark_u, STABLE_RAW_LIFE_TIME, 3, -1, - new cElementalDecay(0.9D, quark_d_, eLeptonDefinition.lepton_e, eNeutrinoDefinition.lepton_Ve_), - new cElementalDecay(0.050778116D, quark_s_/*,lepton_m,lepton_Vm_*/), new cElementalDecay(1.23201e-5D, quark_b_/*,lepton_t,lepton_Vt_*/), + new cElementalDecay(0.050778116D, quark_s_/*,lepton_m,lepton_Vm_*/), + new cElementalDecay(0.9D, quark_d_, lepton_e, lepton_Ve_), eBosonDefinition.deadEnd);//makes photons and don't care quark_c_.init(quark_c, 0.5e-13D, 1, -1, - new cElementalDecay(0.9F, quark_s_, eLeptonDefinition.lepton_e, eNeutrinoDefinition.lepton_Ve_), - new cElementalDecay(0.05071504F, quark_d_, eLeptonDefinition.lepton_m, eNeutrinoDefinition.lepton_Vm_), new cElementalDecay(0.00169744F, quark_b_/*,lepton_t,lepton_Vt_*/), + new cElementalDecay(0.05071504F, quark_d_, lepton_m, lepton_Vm_), + new cElementalDecay(0.9F, quark_s_, lepton_e, lepton_Ve_), eBosonDefinition.deadEnd);//makes photons and don't care - quark_t_.init(quark_t, 2.5e-26F, 2, -1, - new cElementalDecay(0.9F, quark_b_, eLeptonDefinition.lepton_e, eNeutrinoDefinition.lepton_Ve_), - new cElementalDecay(0.00163216F, quark_s_, eLeptonDefinition.lepton_m, eNeutrinoDefinition.lepton_Vm_), - new cElementalDecay(7.51689e-5F, quark_d_, eLeptonDefinition.lepton_t, eNeutrinoDefinition.lepton_Vt_), + quark_t_.init(quark_t, 2.5e-26F, 0, -1, + new cElementalDecay(7.51689e-5F, quark_d_, lepton_t, lepton_Vt_), + new cElementalDecay(0.00163216F, quark_s_, lepton_m, lepton_Vm_), + new cElementalDecay(0.9F, quark_b_, lepton_e, lepton_Ve_), eBosonDefinition.deadEnd);//makes photons and don't care quark_d_.init(quark_d, STABLE_RAW_LIFE_TIME, 3, -1, - new cElementalDecay(0.9F, quark_u_, eLeptonDefinition.lepton_e_, eNeutrinoDefinition.lepton_Ve), - new cElementalDecay(0.05071504F, quark_c_/*,lepton_m_,lepton_Vm*/), new cElementalDecay(7.51689e-5F, quark_t_/*,lepton_t_,lepton_Vt*/), + new cElementalDecay(0.05071504F, quark_c_/*,lepton_m_,lepton_Vm*/), + new cElementalDecay(0.9F, quark_u_, lepton_e_, lepton_Ve), eBosonDefinition.deadEnd);//makes photons and don't care quark_s_.init(quark_s, 0.6e-9F, 1, -1, - new cElementalDecay(0.9F, quark_c_, eLeptonDefinition.lepton_e_, eNeutrinoDefinition.lepton_Ve), - new cElementalDecay(0.050778116F, quark_u_, eLeptonDefinition.lepton_m_, eNeutrinoDefinition.lepton_Vm), new cElementalDecay(0.00163216F, quark_t_/*,lepton_t_,lepton_Vt*/), + new cElementalDecay(0.050778116F, quark_u_, lepton_m_, lepton_Vm), + new cElementalDecay(0.9F, quark_c_, lepton_e_, lepton_Ve), eBosonDefinition.deadEnd);//makes photons and don't care - quark_b_.init(quark_b, 0.7e-13F, 2, -1, - new cElementalDecay(0.9F, quark_t_, eLeptonDefinition.lepton_e_, eNeutrinoDefinition.lepton_Ve), - new cElementalDecay(0.00169744F, quark_c_, eLeptonDefinition.lepton_m_, eNeutrinoDefinition.lepton_Vm), - new cElementalDecay(1.23201e-5F, quark_u_, eLeptonDefinition.lepton_t_, eNeutrinoDefinition.lepton_Vt), + quark_b_.init(quark_b, 0.7e-13F, 0, -1, + new cElementalDecay(1.23201e-5F, quark_u_, lepton_t_, lepton_Vt), + new cElementalDecay(0.00169744F, quark_c_, lepton_m_, lepton_Vm), + new cElementalDecay(0.9F, quark_t_, lepton_e_, lepton_Ve), eBosonDefinition.deadEnd);//makes photons and don't care } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ElementalContainer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ElementalContainer.java index 5b09e05fe5..c8606f68f0 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ElementalContainer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ElementalContainer.java @@ -111,10 +111,8 @@ public abstract class GT_MetaTileEntity_Hatch_ElementalContainer extends GT_Meta if (aBaseMetaTileEntity.isServerSide()) { byte Tick = (byte) (aTick % 20); if (DECAY_AT == Tick) { - content.cleanUp(); purgeOverflow(); content.tickContentByOneSecond(1, postEnergize);//Hatches don't life time mult things - content.cleanUp(); purgeOverflow(); } else if (OVERFLOW_AT == Tick) { if (overflowMatter <= 0) { diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java index fe96ca45ba..d534b41fec 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java @@ -132,17 +132,15 @@ public class GT_MetaTileEntity_EM_decay extends GT_MetaTileEntity_MultiblockBase outputEM[0] = input; outputEM[1] = new cElementalInstanceStackMap(); - for (cElementalInstanceStack stack : outputEM[0].values()) { - if (stack.getEnergy() == 0 && stack.definition.decayMakesEnergy(1) - && getBaseMetaTileEntity().decreaseStoredEnergyUnits( - (long) (stack.getEnergySettingCost(1) * URANIUM_MASS_TO_EU_INSTANT), false)) { + if (stack.getEnergy() == 0 && stack.definition.decayMakesEnergy(1) && + getBaseMetaTileEntity().decreaseStoredEnergyUnits( + (long) (stack.getEnergySettingCost(1) * URANIUM_MASS_TO_EU_INSTANT), false)) { stack.setEnergy(1); } else if (!stack.definition.decayMakesEnergy(stack.getEnergy())) { outputEM[0].remove(stack.definition); outputEM[1].putReplace(stack); } - //System.out.println(stack.definition.getSymbol()+" "+stack.amount); } eAmpereFlow = (long) ampereFlow.get(); diff --git a/src/main/java/com/github/technus/tectech/util/DoubleCount.java b/src/main/java/com/github/technus/tectech/util/DoubleCount.java index e7ef18be08..0c5865d56e 100644 --- a/src/main/java/com/github/technus/tectech/util/DoubleCount.java +++ b/src/main/java/com/github/technus/tectech/util/DoubleCount.java @@ -6,7 +6,7 @@ import static java.lang.Math.max; import static java.lang.Math.ulp; public class DoubleCount { - public static double[] distribute(double count,double... probabilities){ + public static double[] distribute(double count,double... probabilities) throws ArithmeticException{ if(probabilities==null){ return null; }else if(count==0){ @@ -20,12 +20,15 @@ public class DoubleCount { double remaining=count,previous=probabilities[size],probability,out,sum=0; for (int i = size - 1; i >= 0; i--) { probability=probabilities[i]; - remaining-=out=count*probability; - sum+=output[i]=out-ulp(out); + remaining-=out=count*(probability-ulp(probability)); + sum+=output[i]=out; if(previous=1){ + break; + } } if(remaining*count<0){ throw new ArithmeticException("Malformed probability sum: "+ Arrays.toString(probabilities)); -- cgit From 0ef6ba49d81394cc7e8500a3915543b65e7ae57e Mon Sep 17 00:00:00 2001 From: Tec Date: Sun, 19 Jul 2020 18:51:49 +0200 Subject: Bump version --- build.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.properties b/build.properties index 3b282b43c2..0f85658bd6 100644 --- a/build.properties +++ b/build.properties @@ -1,6 +1,6 @@ minecraft.version=1.7.10 forge.version=10.13.4.1614 -tectech.version=3.8.3 +tectech.version=4.8.3 ic2.version=2.2.790-experimental codechickenlib.version=1.1.3.140 -- cgit From e3a10c40e5bae790ea25495eb1253a7b5b6ce1e7 Mon Sep 17 00:00:00 2001 From: basdxz Date: Sun, 19 Jul 2020 16:09:49 +0100 Subject: Added git hash as version appendage https://forgegradle.readthedocs.io/en/latest/cookbook/ (cherry picked from commit 9182db0ff8a7205b012b6a61b26c8550c52fc744) --- build.gradle | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index c969fb1e47..8701264e0e 100644 --- a/build.gradle +++ b/build.gradle @@ -30,6 +30,12 @@ file "build.properties" withReader { ext.config = new ConfigSlurper().parse prop } +def getVersionAppendage() { + def proc = "git rev-parse --short HEAD".execute() + proc.waitFor() + return "DEV." + proc.exitValue() ? "GITBORK" : proc.text.trim() +} + ext.set("minecraftVersion","${config.minecraft.version}-${config.forge.version}-${config.minecraft.version}") import de.undercouch.gradle.tasks.download.Download @@ -51,7 +57,7 @@ sourceSets { } } -version = "${config.minecraft.version}-${config.tectech.version}" +version = "${config.minecraft.version}-${config.tectech.version}-"+getVersionAppendage() group = "com.github.technus" archivesBaseName = "TecTech" -- cgit From ffd28fb466558047815aeedc3bd9f56b271fb373 Mon Sep 17 00:00:00 2001 From: basdxz Date: Sun, 19 Jul 2020 16:22:23 +0100 Subject: Flipping this seems to fix it? (cherry picked from commit adf24c44acf9762f80ccb4d2903b8870d5137ed6) --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 8701264e0e..9689a82607 100644 --- a/build.gradle +++ b/build.gradle @@ -33,7 +33,7 @@ file "build.properties" withReader { def getVersionAppendage() { def proc = "git rev-parse --short HEAD".execute() proc.waitFor() - return "DEV." + proc.exitValue() ? "GITBORK" : proc.text.trim() + return "DEV." + proc.exitValue() ? proc.text.trim() : "GITBORK" } ext.set("minecraftVersion","${config.minecraft.version}-${config.forge.version}-${config.minecraft.version}") -- cgit From 2026ac448d504c02287f12c2685d4c92bd612870 Mon Sep 17 00:00:00 2001 From: DreamMasterXXL Date: Sat, 25 Jul 2020 20:37:55 +0200 Subject: fix(TecTech)Really Ultimated Batterie fix the recipe Really Ultimated Batterie change Neutronium wires(which not exists) to Superconductor Wires UHV --- .../tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java index b669165176..ab4c6003cf 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java +++ b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java @@ -1213,7 +1213,7 @@ public class DreamCraftRecipeLoader implements Runnable { ItemList.Circuit_Wafer_UHPIC.get(64), ItemList.Circuit_Wafer_SoC2.get(32), ItemList.Circuit_Parts_DiodeASMD.get(64), - GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.Neutronium, 64), + GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.SuperconductorUHV, 64), }, new FluidStack[]{ Materials.SolderingAlloy.getMolten(3760), Materials.Naquadria.getMolten(9216), -- cgit From 8e81f24ce5f168e7f4269c8c006d0b85f2472550 Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Sun, 26 Jul 2020 07:51:35 +0200 Subject: feat(Extra Utilities, TecTech)Deep Dark Portal (#36) Add new raw DD Portal Block recipe to Tec Tech TT Station update GT dependencies GTNewHorizons/GT-New-Horizons-Modpack#6260 --- build.properties | 4 ++-- .../dreamcraft/DreamCraftRecipeLoader.java | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/build.properties b/build.properties index 0f85658bd6..be76171615 100644 --- a/build.properties +++ b/build.properties @@ -6,8 +6,8 @@ ic2.version=2.2.790-experimental codechickenlib.version=1.1.3.140 codechickencore.version=1.0.7.47 nei.version=1.0.5.120 -gregtech.jenkinsbuild=620 -gregtech.version=5.09.33.50 +gregtech.jenkinsbuild=648 +gregtech.version=5.09.33.52 cofhcore.version=[1.7.10]3.1.4-329-dev yamcore.version=0.5.79 baubles.version=1.0.1.10 diff --git a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java index ab4c6003cf..8047efe5a3 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java +++ b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java @@ -1181,6 +1181,26 @@ public class DreamCraftRecipeLoader implements Runnable { Materials.Concrete.getMolten(73728L) }, getItemContainer("StargateFramePart").get(1L), 72000, 2000000); + //Deep Dark Portal + TT_recipeAdder.addResearchableAssemblylineRecipe(GT_ModHandler.getModItem("dreamcraft", "item.HeavyDutyPlateTier8", 1, 0), + 16777216, 2048, 2000000, 64, new Object[]{ + GT_ModHandler.getModItem("ExtraUtilities", "cobblestone_compressed", 1, 7), + GT_ModHandler.getModItem("IC2", "blockMachine2", 1, 0), + GT_OreDictUnificator.get(OrePrefixes.block, Materials.Infinity, 4L), + new Object[]{OrePrefixes.circuit.get(Materials.Nano), 1}, + new Object[]{OrePrefixes.circuit.get(Materials.Nano), 1}, + new Object[]{OrePrefixes.circuit.get(Materials.Nano), 1}, + new Object[]{OrePrefixes.circuit.get(Materials.Nano), 1}, + GT_ModHandler.getModItem("dreamcraft", "item.PicoWafer", 32, 0), + ItemList.Robot_Arm_UEV.get(4), + ItemList.Emitter_UEV.get(4), + ItemList.Sensor_UEV.get(4), + }, new FluidStack[]{ + new FluidStack(FluidRegistry.getFluid("oganesson"), 50000), + Materials.Infinity.getMolten(9216L), + Materials.Cheese.getMolten(232000L), + }, ItemList.Block_BedrockiumCompressed.get(1), 10000, 5000000); + //Batteries TT_recipeAdder.addResearchableAssemblylineRecipe(ItemList.Energy_Cluster.get(1L), 12000, 16, 100000, 3, new Object[]{ -- cgit From 18ec8a9bc25aed92dda52334c4fff5b39f1dc010 Mon Sep 17 00:00:00 2001 From: basdxz Date: Tue, 4 Aug 2020 22:32:50 +0100 Subject: Repackage Tesla code into interfaces and util class Currently bugged, Tesla Towers always drain power from Energy Injectors --- .../tectech/mechanics/spark/ThaumSpark.java | 29 +- .../tectech/mechanics/tesla/ITeslaConnectable.java | 127 ++++++++ .../mechanics/tesla/ITeslaConnectableSimple.java | 22 ++ .../tectech/thing/cover/GT_Cover_TM_TeslaCoil.java | 65 +++- .../cover/GT_Cover_TM_TeslaCoil_Ultimate.java | 10 + .../multi/GT_MetaTileEntity_TM_teslaCoil.java | 357 +++++++-------------- .../single/GT_MetaTileEntity_TeslaCoil.java | 171 +++++----- 7 files changed, 450 insertions(+), 331 deletions(-) create mode 100644 src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectableSimple.java diff --git a/src/main/java/com/github/technus/tectech/mechanics/spark/ThaumSpark.java b/src/main/java/com/github/technus/tectech/mechanics/spark/ThaumSpark.java index 604624828c..e31e63f250 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/spark/ThaumSpark.java +++ b/src/main/java/com/github/technus/tectech/mechanics/spark/ThaumSpark.java @@ -1,5 +1,7 @@ package com.github.technus.tectech.mechanics.spark; +import com.github.technus.tectech.util.Vec3Impl; + import java.io.Serializable; import java.util.Objects; @@ -9,22 +11,10 @@ public class ThaumSpark implements Serializable { public int x, y, z, wID; public byte xR, yR, zR; - public ThaumSpark(){ - this.x = 0; - this.z = 0; - this.y = 0; - - this.xR = 0; - this.yR = 0; - this.zR = 0; - - this.wID = 0; - } - public ThaumSpark(int x, int y, int z, byte xR, byte yR, byte zR, int wID) { this.x = x; - this.z = z; this.y = y; + this.z = z; this.xR = xR; this.yR = yR; @@ -33,6 +23,19 @@ public class ThaumSpark implements Serializable { this.wID = wID; } + public ThaumSpark(Vec3Impl origin, Vec3Impl target, int wID) { + this.x = origin.get0(); + this.y = origin.get1(); + this.z = origin.get2(); + + Vec3Impl offset = target.sub(origin); + this.xR = (byte) offset.get0(); + this.yR = (byte) offset.get1(); + this.zR = (byte) offset.get2(); + + this.wID = wID; + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java b/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java new file mode 100644 index 0000000000..07ecc4bc31 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java @@ -0,0 +1,127 @@ +package com.github.technus.tectech.mechanics.tesla; + +import com.github.technus.tectech.mechanics.spark.ThaumSpark; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; + +import static com.github.technus.tectech.util.Util.entriesSortedByValues; +import static java.lang.Math.sqrt; + +public interface ITeslaConnectable extends ITeslaConnectableSimple { + //Map with all Teslas in the same dimension and the distance to them //TODO Range + Map teslaNodeMap = new HashMap<>(); + //ThaumCraft lighting coordinate pairs, so we can send them in bursts and save on lag + HashSet sparkList = new HashSet<>(); + + //-128 to -1 disables capability + //0 means any source or target + //1 to 127 must match on source and target or source/target must be 0 + byte getTeslaTransmissionCapability(); + + //Transmission Range is typically 16+ in blocks + int getTeslaTransmissionRange(); + boolean isOverdriveEnabled(); + + int getTeslaEnergyLossPerBlock(); + float getTeslaOverdriveLossCoefficient(); + + long getTeslaOutputVoltage(); + long getTeslaOutputCurrent(); + + boolean teslaDrainEnergy(long teslaVoltageDrained); + + class TeslaUtil { + public static final HashSet teslaNodeSet = new HashSet<>();//Targets for power transmission + + public static void generateTeslaNodeMap(ITeslaConnectable origin) { + origin.teslaNodeMap.clear(); + for (ITeslaConnectableSimple target : teslaNodeSet) { + //Sanity checks + if (target == null) { + //The Tesla Covers do not remove themselves from the list and this is the code that does + teslaNodeSet.remove(null); + continue; + } else if (origin.equals(target) || !origin.getTeslaDimension().equals(target.getTeslaDimension())) { + //Skip if looking at myself and skip if not in the same dimension + //TODO, INTERDIM? + continue; + } else if (origin.getTeslaTransmissionCapability() != 0 && origin.getTeslaReceptionCapability() != 0 && + origin.getTeslaTransmissionCapability() != origin.getTeslaReceptionCapability()) { + //Skip if incompatible + continue; + } + + //Range calc + int distance = (int) sqrt(origin.getTeslaPosition().distanceSq(target.getTeslaPosition())); + if (distance > origin.getTeslaTransmissionRange() * target.getTeslaReceptionCoefficient()) { + //Skip if the range is too vast + continue; + } + origin.teslaNodeMap.put(target, distance); + } + } + + public static void cleanTeslaNodeMap(ITeslaConnectable origin) { + //TODO Do we still need this? + for (ITeslaConnectableSimple target : origin.teslaNodeMap.keySet()) { + if (target == null) { + origin.teslaNodeMap.remove(null); + } + } + } + + public static long powerTeslaNodeMap(ITeslaConnectable origin) { + //Teslas can only send OR receive + if (origin.isTeslaReadyToReceive()) { + return 0L;//TODO Negative values to indicate charging? + } + long remainingAmperes = origin.getTeslaOutputCurrent(); + while (remainingAmperes > 0) { + long startingAmperes = remainingAmperes; + for (Map.Entry Rx : entriesSortedByValues(teslaNodeMap)) { + if (origin.getTeslaStoredEnergy() < (origin.isOverdriveEnabled() ? origin.getTeslaOutputVoltage() * 2 : origin.getTeslaOutputVoltage())) { + //Return and end the tick if we're out of energy to send + return origin.getTeslaOutputCurrent() - remainingAmperes; + } + + ITeslaConnectableSimple target = Rx.getKey(); + int distance = Rx.getValue(); + + //Calculate the voltage output + long outputVoltageInjectable; + long outputVoltageConsumption; + + if (origin.isOverdriveEnabled()) { + outputVoltageInjectable = origin.getTeslaOutputVoltage(); + outputVoltageConsumption = origin.getTeslaOutputVoltage() + (distance * origin.getTeslaEnergyLossPerBlock()) + + (long) Math.round(origin.getTeslaOutputVoltage() * origin.getTeslaOverdriveLossCoefficient()); + } else { + outputVoltageInjectable = origin.getTeslaOutputVoltage() - (distance * origin.getTeslaEnergyLossPerBlock()); + outputVoltageConsumption = origin.getTeslaOutputVoltage(); + } + + //Skip the target if the cost is too high + if (origin.getTeslaStoredEnergy() < outputVoltageConsumption) { + continue; + } + + if (target.teslaInjectEnergy(outputVoltageInjectable)) { + origin.teslaDrainEnergy(outputVoltageConsumption); + sparkList.add(new ThaumSpark(origin.getTeslaPosition(), target.getTeslaPosition(), origin.getTeslaDimension())); + remainingAmperes--; + } + if (remainingAmperes == 0) { + return origin.getTeslaOutputCurrent(); + } + } + //End the tick after one iteration with no transmissions + if (remainingAmperes == startingAmperes) { + return origin.getTeslaOutputCurrent() - remainingAmperes; + } + } + return origin.getTeslaOutputCurrent() - remainingAmperes; + } + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectableSimple.java b/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectableSimple.java new file mode 100644 index 0000000000..3b56b6968c --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectableSimple.java @@ -0,0 +1,22 @@ +package com.github.technus.tectech.mechanics.tesla; + +import com.github.technus.tectech.util.Vec3Impl; + +public interface ITeslaConnectableSimple { + //-128 to -1 disables capability + //0 means any source or target + //1 to 127 must match on source and target or source/target must be 0 + byte getTeslaReceptionCapability(); + + //Reception Coefficient is a range extension, typical is 1 + float getTeslaReceptionCoefficient(); + + boolean isTeslaReadyToReceive(); + + long getTeslaStoredEnergy(); + + boolean teslaInjectEnergy(long teslaVoltageInjected); + + Vec3Impl getTeslaPosition(); + Integer getTeslaDimension(); +} diff --git a/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil.java b/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil.java index 6442ba51b6..2efe2f3cbc 100644 --- a/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil.java @@ -1,40 +1,95 @@ package com.github.technus.tectech.thing.cover; +import com.github.technus.tectech.mechanics.tesla.ITeslaConnectableSimple; +import com.github.technus.tectech.util.Vec3Impl; import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.util.GT_CoverBehavior; import gregtech.api.util.GT_Utility; import net.minecraft.entity.player.EntityPlayer; -import static com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_TM_teslaCoil.teslaNodeSet; +import static com.github.technus.tectech.mechanics.tesla.ITeslaConnectable.TeslaUtil.*; import static ic2.api.info.Info.DMG_ELECTRIC; -public class GT_Cover_TM_TeslaCoil extends GT_CoverBehavior { +public class GT_Cover_TM_TeslaCoil extends GT_CoverBehavior implements ITeslaConnectableSimple { + private IGregTechTileEntity IGT; + public GT_Cover_TM_TeslaCoil() { } + @Override public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer) { - if (aTileEntity.getEUCapacity() > 0) { - teslaNodeSet.add(aTileEntity.getIGregTechTileEntityOffset(0, 0, 0)); + //Only do stuff if we're on top and have power + if (aSide == 1 || aTileEntity.getEUCapacity() > 0) { + //Pull IGT onto the outside, should only execute first tick + if (IGT == null) { + IGT = aTileEntity.getIGregTechTileEntityOffset(0, 0, 0); + } + //Makes sure we're on the list + teslaNodeSet.add(this); } + return super.doCoverThings(aSide, aInputRedstone, aCoverID, aCoverVariable, aTileEntity, aTimer); } + @Override public String getDescription(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return "Do not attempt to use screwdriver!"; + return "Do not attempt to use screwdriver!";//TODO Translation support } + @Override public boolean letsEnergyIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { return true; } + @Override public int onCoverScrewdriverclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { + //Shock a non-hazmat player if they dare stuff a screwdriver into one of these if (aTileEntity.getStoredEU() > 0 && !GT_Utility.isWearingFullElectroHazmat(aPlayer)) { aPlayer.attackEntityFrom(DMG_ELECTRIC, 20); } return aCoverVariable; } + @Override public int getTickRate(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + //It updates once every 200 ticks, so once every 10 seconds return 200; } + + @Override + public byte getTeslaReceptionCapability() { + return 2; + } + + @Override + public float getTeslaReceptionCoefficient() { + return 1; + } + + @Override + public boolean isTeslaReadyToReceive() { + return true; + } + + @Override + public long getTeslaStoredEnergy() { + return IGT.getStoredEU(); + } + + @Override + public Vec3Impl getTeslaPosition() { + return new Vec3Impl(IGT); + } + + @Override + public Integer getTeslaDimension() { + return IGT.getWorld().provider.dimensionId; + } + + @Override + public boolean teslaInjectEnergy(long teslaVoltageInjected) { + //Same as in the microwave transmitters, this does not account for amp limits + return IGT.injectEnergyUnits((byte) 1, teslaVoltageInjected, 1L) > 0L; + } } diff --git a/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil_Ultimate.java b/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil_Ultimate.java index 2b5db1f5c9..028ac3a4d6 100644 --- a/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil_Ultimate.java +++ b/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil_Ultimate.java @@ -7,23 +7,33 @@ public class GT_Cover_TM_TeslaCoil_Ultimate extends GT_Cover_TM_TeslaCoil { public GT_Cover_TM_TeslaCoil_Ultimate() { } + @Override public boolean letsEnergyOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { return true; } + @Override public boolean letsItemsIn(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity) { return true; } + @Override public boolean letsItemsOut(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity) { return true; } + @Override public boolean letsFluidIn(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity) { return true; } + @Override public boolean letsFluidOut(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity) { return true; } + + @Override + public byte getTeslaReceptionCapability() { + return 1; + } } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java index e63a92d107..729b73044e 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java @@ -7,8 +7,7 @@ import com.github.technus.tectech.mechanics.spark.RendererMessage; import com.github.technus.tectech.mechanics.spark.ThaumSpark; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; -import com.github.technus.tectech.thing.cover.GT_Cover_TM_TeslaCoil; -import com.github.technus.tectech.thing.cover.GT_Cover_TM_TeslaCoil_Ultimate; +import com.github.technus.tectech.mechanics.tesla.ITeslaConnectable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Capacitor; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DynamoMulti; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; @@ -18,7 +17,6 @@ import com.github.technus.tectech.thing.metaTileEntity.multi.base.INameFunction; import com.github.technus.tectech.thing.metaTileEntity.multi.base.IStatusFunction; import com.github.technus.tectech.thing.metaTileEntity.multi.base.Parameters; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; -import com.github.technus.tectech.thing.metaTileEntity.single.GT_MetaTileEntity_TeslaCoil; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.util.Vec3Impl; import cpw.mods.fml.relauncher.Side; @@ -37,21 +35,18 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraftforge.fluids.FluidStack; import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; import static com.github.technus.tectech.mechanics.structure.Structure.adders; +import static com.github.technus.tectech.mechanics.tesla.ITeslaConnectable.TeslaUtil.*; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsBA0; import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.*; import static com.github.technus.tectech.util.CommonValues.V; -import static com.github.technus.tectech.util.Util.entriesSortedByValues; import static gregtech.api.enums.GT_Values.E; import static java.lang.Math.*; import static net.minecraft.util.StatCollector.translateToLocal; -public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_MultiblockBase_EM implements IConstructable { +public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_MultiblockBase_EM implements IConstructable, ITeslaConnectable { //region variables private static final int transferRadiusTowerFromConfig = TecTech.configTecTech.TESLA_MULTI_RANGE_TOWER;//Default is 32 private static final int transferRadiusTransceiverFromConfig = TecTech.configTecTech.TESLA_MULTI_RANGE_TRANSCEIVER;//Default is 16 @@ -76,9 +71,6 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock private FluidStack[] mOutputFluidsQueue; //Used to buffer the fluid outputs, so the tesla takes a second to 'cool' any plasma it would output as a gas - public static final HashSet teslaNodeSet = new HashSet<>(); //Targets for power transmission - private final HashSet sparkList = new HashSet<>(); //Thaumcraft lighting coordinate pairs, so we can send them in bursts and save on lag - private Map teslaNodeMap = new HashMap<>(); //Targets for power transmission private final ArrayList eCapacitorHatches = new ArrayList<>(); //Capacitor hatches which determine the max voltage tier and count of amps private int sortTime = 0; //Scan timer used for tesla search intervals @@ -88,6 +80,10 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock private int vTier = -1; //Tesla voltage tier limited by capacitors private long outputCurrentMax = 0; //Tesla current output limited by capacitors + //outputVoltage and current after settings + private long outputVoltage; + private long outputCurrent; + //Prevents unnecessary offset calculation, saving on lag private byte oldRotation = -1; private byte oldOrientation = -1; @@ -185,7 +181,8 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock if (value > transferRadiusTransceiverFromConfig) return STATUS_HIGH; if (value < transferRadiusTransceiverFromConfig) return STATUS_LOW; return STATUS_OK; - }; private static final IStatusFunction TRANSFER_RADIUS_COVER_ULTIMATE_STATUS = (base, p) -> { + }; + private static final IStatusFunction TRANSFER_RADIUS_COVER_ULTIMATE_STATUS = (base, p) -> { double value = p.get(); if (Double.isNaN(value)) return STATUS_WRONG; value = (int) value; @@ -262,24 +259,6 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock super(aName); } - private int getPerBlockLoss(){ - return plasmaTierLoss[plasmaTier]; - } - - private long[] getOutputVoltage(long outputVoltage, int distance, boolean overDriveToggle) { - long outputVoltageInjectable; - long outputVoltageConsumption; - - if (overDriveToggle) { - outputVoltageInjectable = outputVoltage; - outputVoltageConsumption = outputVoltage + (distance * getPerBlockLoss()) + (long) Math.round(overDriveLoss * outputVoltage); - } else { - outputVoltageInjectable = outputVoltage - (distance * getPerBlockLoss()); - outputVoltageConsumption = outputVoltage; - } - return new long[]{outputVoltageInjectable, outputVoltageConsumption}; - } - private float getRangeMulti(int mTier, int vTier) { //By Default: //Helium and Nitrogen Plasmas will double the range @@ -303,16 +282,6 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock return 1F * plasmaBoost; } - private void thaumLightning(IGregTechTileEntity mte, IGregTechTileEntity node) { - byte xR = (byte) (node.getXCoord() - posTop.get0()); - byte yR = (byte) (node.getYCoord() - posTop.get1()); - byte zR = (byte) (node.getZCoord() - posTop.get2()); - - int wID = mte.getWorld().provider.dimensionId; - - sparkList.add(new ThaumSpark(posTop.get0(), posTop.get1(), posTop.get2(), xR, yR, zR, wID)); - } - private void checkPlasmaBoost() { //If there's fluid in the queue, try to output it //That way it takes at least a second to 'process' the plasma @@ -367,7 +336,9 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock Vec3Impl xyzOffsets; xyzOffsets = getExtendedFacing().getWorldOffset(new Vec3Impl(0, -1, 1)); mTier = iGregTechTileEntity.getMetaIDOffset(xyzOffsets.get0(), xyzOffsets.get1(), xyzOffsets.get2()); - if (mTier == 9){mTier = 6;}//Hacky remap because the ZPM coils were added later + if (mTier == 9) { + mTier = 6; + }//Hacky remap because the ZPM coils were added later if (structureCheck_EM(shape, blockType, blockMetas[mTier], addingMethods, casingTextures, blockTypeFallback, blockMetaFallback, 3, 16, 0) && eCapacitorHatches.size() > 0) { for (GT_MetaTileEntity_Hatch_Capacitor cap : eCapacitorHatches) { @@ -480,11 +451,10 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock @Override public void onRemoval() { super.onRemoval(); - IGregTechTileEntity aBaseMetaTileEntity = this.getBaseMetaTileEntity(); - if (aBaseMetaTileEntity.isClientSide()) { + if (this.getBaseMetaTileEntity().isClientSide()) { return; } - teslaNodeSet.remove(aBaseMetaTileEntity); + teslaNodeSet.remove(this); for (GT_MetaTileEntity_Hatch_Capacitor cap : eCapacitorHatches) { if (GT_MetaTileEntity_MultiBlockBase.isValidMetaTileEntity(cap)) { cap.getBaseMetaTileEntity().setActive(false); @@ -558,7 +528,7 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock public void loadNBTData(NBTTagCompound aNBT) { super.loadNBTData(aNBT); energyCapacity = aNBT.getLong("eEnergyCapacity"); - teslaNodeSet.add(this.getBaseMetaTileEntity()); + teslaNodeSet.add(this); } @Override @@ -578,113 +548,10 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock public void onFirstTick_EM(IGregTechTileEntity aBaseMetaTileEntity) { super.onFirstTick_EM(aBaseMetaTileEntity); if (!aBaseMetaTileEntity.isClientSide()) { - teslaNodeSet.add(aBaseMetaTileEntity); - } - } - - - public static Map generateTeslaNodeMap(IGregTechTileEntity orgin){ - Map generatedNodeMap = new HashMap<>(); - IMetaTileEntity originInside = orgin.getMetaTileEntity(); - int originX; - int originY; - int originZ; - if (originInside instanceof GT_MetaTileEntity_TM_teslaCoil) { - GT_MetaTileEntity_TM_teslaCoil teslaTower = (GT_MetaTileEntity_TM_teslaCoil) originInside; - originX = teslaTower.posTop.get0(); - originY = teslaTower.posTop.get1(); - originZ = teslaTower.posTop.get2(); - } else { - originX = orgin.getXCoord(); - originY = orgin.getYCoord(); - originZ = orgin.getZCoord(); - } - - for (IGregTechTileEntity node : teslaNodeSet) { - if (node == null) { - //Technically, the Tesla Covers do not remove themselves from the list and this is the code that does - teslaNodeSet.remove(null); - continue; - } else if (node == orgin || orgin.getWorld().provider.dimensionId != node.getWorld().provider.dimensionId) { - //Skip if looking at myself and skip if not in the same dimension - //TODO, INTERDIM? - continue; - } - - //Makes the target coordinates the center of the sphere of the tower if it has one - IMetaTileEntity nodeInside = node.getMetaTileEntity(); - int targetX; - int targetY; - int targetZ; - if (nodeInside instanceof GT_MetaTileEntity_TM_teslaCoil) { - GT_MetaTileEntity_TM_teslaCoil teslaTower = (GT_MetaTileEntity_TM_teslaCoil) nodeInside; - targetX = teslaTower.posTop.get0(); - targetY = teslaTower.posTop.get1(); - targetZ = teslaTower.posTop.get2(); - } else { - targetX = node.getXCoord(); - targetY = node.getYCoord(); - targetZ = node.getZCoord(); - } - - //Find the xyz offsets and calculate the distance between us and the target - int xPosOffset = targetX - originX; - int yPosOffset = targetY - originY; - int zPosOffset = targetZ - originZ; - int distance = (int) ceil(sqrt(pow(xPosOffset, 2) + pow(yPosOffset, 2) + pow(zPosOffset, 2))); - //Thought we need abs here, we don't. An Integer to the power of two is going to be either 0 or positive. - //We also can just put stuff here without further checks, as we always check the next section - generatedNodeMap.put(node, distance); - } - return generatedNodeMap; - } - - public static void cleanTeslaNodeMap(Map nodeMap, IGregTechTileEntity orgin) { - IMetaTileEntity orginInside = orgin.getMetaTileEntity(); - //Assumes that if the orgin is not a Tesla Tower, it mus be a single block. - boolean isMulti = orginInside instanceof GT_MetaTileEntity_TM_teslaCoil; - - for (Map.Entry Rx : nodeMap.entrySet()) { - //All the checks need to pass or the target gets removed from the transmission list - IGregTechTileEntity node = Rx.getKey(); - //Null check - if (node != null) { - IMetaTileEntity nodeInside = node.getMetaTileEntity(); - //We need this in a try catch, just as a precaution that a chunk had unloaded or a machine was removed - try { - //Is it an Active Tesla Tower with at least some energy capacity? - //Singles and Multis can send power here, so we don't check - if (nodeInside instanceof GT_MetaTileEntity_TM_teslaCoil && node.isActive()) { - GT_MetaTileEntity_TM_teslaCoil teslaTower = (GT_MetaTileEntity_TM_teslaCoil) nodeInside; - if (teslaTower.maxEUStore() > 0) { - continue; - } - //Is it a Tesla Transceiver with at least one battery? - //Only multis can send power to singles - } else if (isMulti && nodeInside instanceof GT_MetaTileEntity_TeslaCoil) { - GT_MetaTileEntity_TeslaCoil teslaTransceiver = (GT_MetaTileEntity_TeslaCoil) nodeInside; - if (teslaTransceiver.mBatteryCount > 0) { - continue; - } - //Is it a tile entity with a Tesla Coil Cover? - //Only single can send power to non-Rich edition covers - //Since Rich edition inherits from regular, we need the final check - } else if (!isMulti && node.getCoverBehaviorAtSide((byte) 1) instanceof GT_Cover_TM_TeslaCoil && - node.getEUCapacity() > 0 && !(node.getCoverBehaviorAtSide((byte) 1) instanceof GT_Cover_TM_TeslaCoil_Ultimate)) { - continue; - //Is it a tile entity with a Tesla Coil Cover Rich edition? - //Only multis can send power to Rich edition covers - } else if (isMulti && node.getCoverBehaviorAtSide((byte) 1) instanceof GT_Cover_TM_TeslaCoil_Ultimate && node.getEUCapacity() > 0) { - continue; - } - } catch (Exception ignored) { - } - } - nodeMap.remove(Rx.getKey()); + teslaNodeSet.add(this); } } - @Override public boolean onRunningTick(ItemStack aStack) { IGregTechTileEntity mte = getBaseMetaTileEntity(); @@ -706,13 +573,12 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock if (sortTime == sortTimeMinSetting.get()) { sortTime = 0; sortTimeDisplay.updateStatus(); - teslaNodeMap = generateTeslaNodeMap(mte); + generateTeslaNodeMap(this); } sortTime++; sortTimeDisplay.set(sortTime); //Power Limit Settings - long outputVoltage; if (outputVoltageSetting.get() > 0) { outputVoltage = min(outputVoltageMax, (long) outputVoltageSetting.get()); } else { @@ -720,95 +586,34 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock } outputVoltageDisplay.set(outputVoltage); - long outputCurrent; if (outputCurrentSetting.get() > 0) { outputCurrent = min(outputCurrentMax, (long) outputCurrentSetting.get()); } else { outputCurrent = outputCurrentMax; } - outputCurrentDisplay.set(0); - - //Stuff to do if ePowerPass - if (ePowerPass) { - //Range calculation and display - int transferRadiusTower = (int) (transferRadiusTowerSetting.get() * getRangeMulti(mTier, vTier)); - transferRadiusTowerDisplay.set(transferRadiusTower); - int transferRadiusTransceiver = (int) (transferRadiusTransceiverSetting.get() * getRangeMulti(mTier, vTier)); - transferRadiusTransceiverDisplay.set(transferRadiusTransceiver); - int transferRadiusCoverUltimate = (int) (transferRadiusCoverUltimateSetting.get() * getRangeMulti(mTier, vTier)); - transferRadiusCoverUltimateDisplay.set(transferRadiusCoverUltimate); - - //Clean the teslaNodeMap - cleanTeslaNodeMap(teslaNodeMap, mte); - - //Power transfer - long sparks = outputCurrent; - while (sparks > 0) { - boolean overdriveToggle = overDriveSetting.get() > 0; - boolean idle = true; - for (Map.Entry Rx : entriesSortedByValues(teslaNodeMap)) { - if (getEUVar() >= (overdriveToggle ? outputVoltage * 2 : outputVoltage)) { - IGregTechTileEntity node = Rx.getKey(); - IMetaTileEntity nodeInside = node.getMetaTileEntity(); - - long[] outputVoltageNow = getOutputVoltage(outputVoltage, Rx.getValue(), overdriveToggle); - long outputVoltageInjectable = outputVoltageNow[0]; - long outputVoltageConsumption = outputVoltageNow[1]; - - if (nodeInside instanceof GT_MetaTileEntity_TM_teslaCoil && Rx.getValue() <= transferRadiusTower) { - GT_MetaTileEntity_TM_teslaCoil nodeTesla = (GT_MetaTileEntity_TM_teslaCoil) nodeInside; - if (!nodeTesla.ePowerPass) { - if (nodeTesla.getEUVar() + outputVoltageInjectable <= (nodeTesla.maxEUStore() / 2)) { - setEUVar(getEUVar() - outputVoltageConsumption); - node.increaseStoredEnergyUnits(outputVoltageConsumption, true); - thaumLightning(mte, node); - sparks--; - idle = false; - } - } - } else if (nodeInside instanceof GT_MetaTileEntity_TeslaCoil && Rx.getValue() <= transferRadiusTransceiver) { - GT_MetaTileEntity_TeslaCoil nodeTesla = (GT_MetaTileEntity_TeslaCoil) nodeInside; - if (!nodeTesla.powerPassToggle) { - if (node.injectEnergyUnits((byte) 6, outputVoltageInjectable, 1L) > 0L) { - setEUVar(getEUVar() - outputVoltageConsumption); - thaumLightning(mte, node); - sparks--; - idle = false; - } - } - } else if ((node.getCoverBehaviorAtSide((byte) 1) instanceof GT_Cover_TM_TeslaCoil_Ultimate) && Rx.getValue() <= transferRadiusCoverUltimate) { - if (node.injectEnergyUnits((byte) 1, outputVoltageInjectable, 1L) > 0L) { - setEUVar(getEUVar() - outputVoltageConsumption); - thaumLightning(mte, node); - sparks--; - idle = false; - } - } - if (sparks == 0) { - break; - } - } else { - idle = true; - break; - } - } - if (idle) { - break; - } - } - outputCurrentDisplay.set(outputCurrent - sparks); - if (sortTime % 60 == 0 && !sparkList.isEmpty()) { - NetworkDispatcher.INSTANCE.sendToAllAround(new RendererMessage.RendererData(sparkList), - mte.getWorld().provider.dimensionId, - posTop.get0(), - posTop.get1(), - posTop.get2(), - 256); - } - sparkList.clear(); - } else { - outputCurrentDisplay.set(0); + + //Range calculation and display + int transferRadiusTower = getTeslaTransmissionRange(); + transferRadiusTowerDisplay.set(transferRadiusTower); + transferRadiusTransceiverDisplay.set(transferRadiusTower * 2); + transferRadiusCoverUltimateDisplay.set(transferRadiusTower); + + //Clean the teslaNodeMap + cleanTeslaNodeMap(this); + + //Power transfer + outputCurrentDisplay.set(powerTeslaNodeMap(this)); + + if (!sparkList.isEmpty()) { + NetworkDispatcher.INSTANCE.sendToAllAround(new RendererMessage.RendererData(sparkList), + mte.getWorld().provider.dimensionId, + posTop.get0(), + posTop.get1(), + posTop.get2(), + 256); } + sparkList.clear(); + return true; } @@ -882,4 +687,88 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock public String[] getStructureDescription(ItemStack stackSize) { return description; } + + @Override + public byte getTeslaReceptionCapability() { + return 0; + } + + @Override + public float getTeslaReceptionCoefficient() { + return 0; + } + + @Override + public byte getTeslaTransmissionCapability() { + return 1; + } + + @Override + public int getTeslaTransmissionRange() { + return (int) (transferRadiusTowerSetting.get() * getRangeMulti(mTier, vTier)); + } + + @Override + public boolean isOverdriveEnabled() { + return overDriveSetting.get() > 0; + } + + @Override + public int getTeslaEnergyLossPerBlock() { + return plasmaTierLoss[plasmaTier]; + } + + @Override + public float getTeslaOverdriveLossCoefficient() { + return overDriveLoss; + } + + @Override + public long getTeslaOutputVoltage() { + return outputVoltage; + } + + @Override + public long getTeslaOutputCurrent() { + return outputCurrent; + } + + @Override + public boolean teslaDrainEnergy(long teslaVoltageDrained) { + if (getEUVar() < teslaVoltageDrained) { + return false; + } + + setEUVar(getEUVar() - teslaVoltageDrained); + return true; + } + + @Override + public boolean isTeslaReadyToReceive() { + return !this.ePowerPass; + } + + @Override + public long getTeslaStoredEnergy() { + return getEUVar(); + } + + @Override + public Vec3Impl getTeslaPosition() { + return posTop; + } + + @Override + public Integer getTeslaDimension() { + return this.getBaseMetaTileEntity().getWorld().provider.dimensionId; + } + + @Override + public boolean teslaInjectEnergy(long teslaVoltageInjected) { + if (this.getEUVar() + teslaVoltageInjected <= (this.maxEUStore() / 2)) { + this.getBaseMetaTileEntity().increaseStoredEnergyUnits(teslaVoltageInjected, true); + return true; + } + return false; + } } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java index 8d3696d9ad..388a253b27 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java @@ -1,14 +1,14 @@ package com.github.technus.tectech.thing.metaTileEntity.single; +import com.github.technus.tectech.mechanics.tesla.ITeslaConnectable; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.util.Util; import com.github.technus.tectech.loader.NetworkDispatcher; import com.github.technus.tectech.mechanics.spark.RendererMessage; import com.github.technus.tectech.mechanics.spark.ThaumSpark; -import com.github.technus.tectech.thing.cover.GT_Cover_TM_TeslaCoil; -import com.github.technus.tectech.thing.cover.GT_Cover_TM_TeslaCoil_Ultimate; import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_TM_teslaCoil; +import com.github.technus.tectech.util.Util; +import com.github.technus.tectech.util.Vec3Impl; import eu.usrv.yamcore.auxiliary.PlayerChatHelper; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; @@ -23,25 +23,19 @@ import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.reflect.FieldUtils; import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import static com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_TM_teslaCoil.*; +import static com.github.technus.tectech.mechanics.tesla.ITeslaConnectable.TeslaUtil.*; import static com.github.technus.tectech.util.CommonValues.V; -import static com.github.technus.tectech.util.Util.entriesSortedByValues; import static com.github.technus.tectech.thing.metaTileEntity.Textures.*; import static java.lang.Math.round; import static net.minecraft.util.StatCollector.translateToLocal; import static net.minecraft.util.StatCollector.translateToLocalFormatted; -public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryBuffer { +public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryBuffer implements ITeslaConnectable { private final static int transferRadiusMax = TecTech.configTecTech.TESLA_SINGLE_RANGE;//Default is 20 private final static int perBlockLoss = TecTech.configTecTech.TESLA_SINGLE_LOSS_PER_BLOCK;//Default is 1 private final static float overDriveLoss = TecTech.configTecTech.TESLA_SINGLE_LOSS_FACTOR_OVERDRIVE;//Default is 0.25F - private Map teslaNodeMap = new HashMap<>();//Tesla Map to map them tesla bois! - private final static HashSet sparkList = new HashSet<>(); private byte sparkCount = 0; private final static int transferRadiusMin = 4;//Minimum user configurable @@ -229,23 +223,22 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { super.onFirstTick(aBaseMetaTileEntity); if (!aBaseMetaTileEntity.isClientSide()) { - teslaNodeSet.add(aBaseMetaTileEntity); + teslaNodeSet.add(this); } } @Override public void onRemoval() { super.onRemoval(); - IGregTechTileEntity aBaseMetaTileEntity = this.getBaseMetaTileEntity(); - if (!aBaseMetaTileEntity.isClientSide()) { - teslaNodeSet.remove(aBaseMetaTileEntity); + if (!this.getBaseMetaTileEntity().isClientSide()) { + teslaNodeSet.remove(this); } } @Override public void loadNBTData(NBTTagCompound aNBT) { super.loadNBTData(aNBT); - teslaNodeSet.add(this.getBaseMetaTileEntity()); + teslaNodeSet.add(this); } @Override @@ -270,72 +263,13 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB //Create the teslaNodeMap if (sortTime == sortTimeMax) { sortTime = 0; - teslaNodeMap = generateTeslaNodeMap(aBaseMetaTileEntity); + generateTeslaNodeMap(this); } sortTime++; - //Stuff to do if ePowerPass - if (powerPassToggle) { - float rangeFrac = (float) ((-0.5 * Math.pow(energyFrac, 2)) + (1.5 * energyFrac)); - long outputCurrent = mBatteryCount; - //Radius for transceiver to tower transfers - int transferRadiusTower = (int) (transferRadius * rangeFrac); - //Radius for transceiver to cover transfers - int transferRadiusCover = (int) (transferRadiusTower / 1.25); - - //Clean the teslaNodeMap - cleanTeslaNodeMap(teslaNodeMap, aBaseMetaTileEntity); - - //Power transfer - while (outputCurrent > 0) { - boolean idle = true; - for (Map.Entry Rx : entriesSortedByValues(teslaNodeMap)) { - if (getEUVar() >= (overdriveToggle ? outputVoltage * 2 : outputVoltage)) { - IGregTechTileEntity node = Rx.getKey(); - IMetaTileEntity nodeInside = node.getMetaTileEntity(); - - long[] outputVoltageNow = getOutputVoltage(outputVoltage, Rx.getValue(), overdriveToggle); - long outputVoltageInjectable = outputVoltageNow[0]; - long outputVoltageConsumption = outputVoltageNow[1]; - - if (nodeInside instanceof GT_MetaTileEntity_TM_teslaCoil && Rx.getValue() <= transferRadiusTower) { - GT_MetaTileEntity_TM_teslaCoil nodeTesla = (GT_MetaTileEntity_TM_teslaCoil) nodeInside; - if (!nodeTesla.ePowerPass) { - if (nodeTesla.getEUVar() + outputVoltageInjectable <= (nodeTesla.maxEUStore() / 2)) { - setEUVar(getEUVar() - outputVoltageConsumption); - node.increaseStoredEnergyUnits(outputVoltageInjectable, true); - thaumLightning(aBaseMetaTileEntity, node); - outputCurrent--; - idle = false; - } - } - } else if ((node.getCoverBehaviorAtSide((byte) 1) instanceof GT_Cover_TM_TeslaCoil) && !(node.getCoverBehaviorAtSide((byte) 1) instanceof GT_Cover_TM_TeslaCoil_Ultimate) && Rx.getValue() <= transferRadiusCover) { - if (nodeInside instanceof GT_MetaTileEntity_TeslaCoil){ - GT_MetaTileEntity_TeslaCoil nodeTesla = (GT_MetaTileEntity_TeslaCoil) nodeInside; - if (nodeTesla.powerPassToggle){ - continue; - } - } - if (node.injectEnergyUnits((byte) 1, outputVoltageInjectable, 1L) > 0L) { - setEUVar(getEUVar() - outputVoltageConsumption); - thaumLightning(aBaseMetaTileEntity, node); - outputCurrent--; - idle = false; - } - } - if (outputCurrent == 0) { - break; - } - } else { - idle = true; - break; - } - } - if (idle) { - break; - } - } - } + //Send Power + powerTeslaNodeMap(this); + sparkCount++; if (sparkCount == 60 && !sparkList.isEmpty()) { sparkCount = 0; @@ -364,4 +298,83 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB return true; } + @Override + public byte getTeslaReceptionCapability() { + return 1; + } + + @Override + public float getTeslaReceptionCoefficient() { + return 1; + } + + @Override + public byte getTeslaTransmissionCapability() { + return 2; + } + + @Override + public int getTeslaTransmissionRange() { + return transferRadius; + } + + @Override + public boolean isOverdriveEnabled() { + return overdriveToggle; + } + + @Override + public int getTeslaEnergyLossPerBlock() { + return perBlockLoss; + } + + @Override + public float getTeslaOverdriveLossCoefficient() { + return overDriveLoss; + } + + @Override + public long getTeslaOutputVoltage() { + return outputVoltage; + } + + @Override + public long getTeslaOutputCurrent() { + return mBatteryCount; + } + + @Override + public boolean teslaDrainEnergy(long teslaVoltageDrained) { + if (getEUVar() < teslaVoltageDrained) { + return false; + } + + setEUVar(getEUVar() - teslaVoltageDrained); + return true; + } + + @Override + public boolean isTeslaReadyToReceive() { + return !this.powerPassToggle; + } + + @Override + public long getTeslaStoredEnergy() { + return getEUVar(); + } + + @Override + public Vec3Impl getTeslaPosition() { + return new Vec3Impl(this.getBaseMetaTileEntity()); + } + + @Override + public Integer getTeslaDimension() { + return this.getBaseMetaTileEntity().getWorld().provider.dimensionId; + } + + @Override + public boolean teslaInjectEnergy(long teslaVoltageInjected) { + return this.getBaseMetaTileEntity().injectEnergyUnits((byte) 1, teslaVoltageInjected, 1L) > 0L; + } } -- cgit From 23e8843b01ec3ff95123e6472656c61632c1c598 Mon Sep 17 00:00:00 2001 From: basdxz Date: Wed, 5 Aug 2020 00:14:42 +0100 Subject: Fix Tesla draining energy when disabled --- .../thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java index 729b73044e..93f6e50c5a 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java @@ -619,12 +619,15 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock @Override public long maxEUStore() { - return energyCapacity * 2; + //Setting the power here so that the tower looses all it's charge once disabled + //This also stops it from exploding + return getBaseMetaTileEntity().isActive() ? energyCapacity * 2 : 0; } @Override public long getEUVar() { - return getBaseMetaTileEntity().isActive() ? super.getEUVar() : 0; + //Same reason as maxEUStore, set to 1 instead of zero so it doesn't drain constantly + return getBaseMetaTileEntity().isActive() ? super.getEUVar() : 1; } private boolean addCapacitorToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { -- cgit From 47ab2b7b988c95518b862059ef0c0d8b4c71c5d7 Mon Sep 17 00:00:00 2001 From: Lex <50260829+4gname@users.noreply.github.com> Date: Tue, 25 Aug 2020 01:02:12 +0700 Subject: add check only block without meta (#37) Meta 0 will be used to build and display the hologram. For example, you can make 16 kinds of glass blocks, and check only the block, without meta. --- .../technus/tectech/mechanics/structure/StructureUtility.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java index a9b88af2f3..1b89b80036 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java @@ -391,6 +391,7 @@ public class StructureUtility { @Override public boolean check(T t, World world, int x, int y, int z) { Block worldBlock = world.getBlock(x, y, z); + if (meta == -1) return block == worldBlock; return block == worldBlock && meta == worldBlock.getDamageValue(world, x, y, z); } @@ -411,6 +412,7 @@ public class StructureUtility { @Override public boolean check(T t, World world, int x, int y, int z) { Block worldBlock = world.getBlock(x, y, z); + if (meta == -1) return block == worldBlock; return block == worldBlock && meta == worldBlock.getDamageValue(world, x, y, z); } @@ -432,6 +434,10 @@ public class StructureUtility { public static IStructureElement ofBlock(Block block, int meta) { return ofBlock(block, meta, block, meta); } + + public static IStructureElement ofBlock(Block block) { + return ofBlock(block, -1, block, 0); + } //endregion -- cgit From 4dcc2865086950ac8397206d47342d3613d14ae2 Mon Sep 17 00:00:00 2001 From: Tec Date: Mon, 24 Aug 2020 20:16:11 +0200 Subject: Add block with any meta structure utility --- .../mechanics/structure/StructureUtility.java | 62 +++++++++++++++++++--- 1 file changed, 55 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java index 1b89b80036..a02e87308d 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java @@ -23,6 +23,7 @@ import java.util.function.Function; import java.util.function.Supplier; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sHintCasingsTT; +import static java.lang.Integer.MIN_VALUE; public class StructureUtility { private static final String NICE_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz=|!@#$%&()[]{};:<>/?_,.*^'`"; @@ -197,7 +198,7 @@ public class StructureUtility { @Override public boolean check(T t, World world, int x, int y, int z) { Block worldBlock = world.getBlock(x, y, z); - return blocsMap.getOrDefault(worldBlock, -1) == worldBlock.getDamageValue(world, x, y, z); + return blocsMap.getOrDefault(worldBlock, MIN_VALUE) == worldBlock.getDamageValue(world, x, y, z); } @Override @@ -289,7 +290,7 @@ public class StructureUtility { @Override public boolean check(T t, World world, int x, int y, int z) { Block worldBlock = world.getBlock(x, y, z); - return blocsMap.getOrDefault(worldBlock, -1) == worldBlock.getDamageValue(world, x, y, z); + return blocsMap.getOrDefault(worldBlock, MIN_VALUE) == worldBlock.getDamageValue(world, x, y, z); } @Override @@ -309,7 +310,7 @@ public class StructureUtility { @Override public boolean check(T t, World world, int x, int y, int z) { Block worldBlock = world.getBlock(x, y, z); - return blocsMap.getOrDefault(worldBlock, -1) == worldBlock.getDamageValue(world, x, y, z); + return blocsMap.getOrDefault(worldBlock, MIN_VALUE) == worldBlock.getDamageValue(world, x, y, z); } @Override @@ -391,7 +392,6 @@ public class StructureUtility { @Override public boolean check(T t, World world, int x, int y, int z) { Block worldBlock = world.getBlock(x, y, z); - if (meta == -1) return block == worldBlock; return block == worldBlock && meta == worldBlock.getDamageValue(world, x, y, z); } @@ -412,7 +412,6 @@ public class StructureUtility { @Override public boolean check(T t, World world, int x, int y, int z) { Block worldBlock = world.getBlock(x, y, z); - if (meta == -1) return block == worldBlock; return block == worldBlock && meta == worldBlock.getDamageValue(world, x, y, z); } @@ -431,12 +430,61 @@ public class StructureUtility { } } + public static IStructureElement ofBlockAnyMeta(Block block, Block defaultBlock, int defaultMeta) { + if (block == null || defaultBlock == null) { + throw new IllegalArgumentException(); + } + if(block instanceof ICustomBlockSetting){ + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + return block == world.getBlock(x, y, z); + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + ((ICustomBlockSetting) defaultBlock).setBlock(world, x, y, z, defaultMeta); + return true; + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); + return true; + } + }; + } else { + return new IStructureElement() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + return block == world.getBlock(x, y, z); + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + world.setBlock(x, y, z, defaultBlock, defaultMeta, 2); + return true; + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); + return true; + } + }; + } + } + public static IStructureElement ofBlock(Block block, int meta) { return ofBlock(block, meta, block, meta); } - public static IStructureElement ofBlock(Block block) { - return ofBlock(block, -1, block, 0); + public static IStructureElement ofBlockAnyMeta(Block block) { + return ofBlockAnyMeta(block, block, 0); + } + + public static IStructureElement ofBlockAnyMeta(Block block,int defaultMeta) { + return ofBlockAnyMeta(block, block, defaultMeta); } //endregion -- cgit From 4eb402956e5bc05c4954ae9812f2d60024677129 Mon Sep 17 00:00:00 2001 From: Tec Date: Mon, 24 Aug 2020 20:23:33 +0200 Subject: Add some comments --- .../tectech/mechanics/structure/StructureUtility.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java index a02e87308d..2f6998f028 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java @@ -25,6 +25,11 @@ import java.util.function.Supplier; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sHintCasingsTT; import static java.lang.Integer.MIN_VALUE; +/** + * Fluent API for structure checking! + * + * (Just import static this class to have a nice fluent syntax while defining structure definitions) + */ public class StructureUtility { private static final String NICE_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz=|!@#$%&()[]{};:<>/?_,.*^'`"; @SuppressWarnings("rawtypes") @@ -430,6 +435,9 @@ public class StructureUtility { } } + /** + * Same as above but ignores target meta id + */ public static IStructureElement ofBlockAnyMeta(Block block, Block defaultBlock, int defaultMeta) { if (block == null || defaultBlock == null) { throw new IllegalArgumentException(); @@ -478,11 +486,17 @@ public class StructureUtility { public static IStructureElement ofBlock(Block block, int meta) { return ofBlock(block, meta, block, meta); } - + + /** + * Same as above but ignores target meta id + */ public static IStructureElement ofBlockAnyMeta(Block block) { return ofBlockAnyMeta(block, block, 0); } + /** + * Same as above but allows to set hint particle render + */ public static IStructureElement ofBlockAnyMeta(Block block,int defaultMeta) { return ofBlockAnyMeta(block, block, defaultMeta); } -- cgit From 5d43e5230fe6e184d3f71f11da333086ee78960e Mon Sep 17 00:00:00 2001 From: Tec Date: Thu, 10 Sep 2020 19:06:43 +0200 Subject: Cleanup structure iterator code --- .../mechanics/structure/IStructureDefinition.java | 134 ++------------------- .../structure/StructureIterationType.java | 8 ++ .../mechanics/structure/StructureUtility.java | 130 ++++++++++++++++++++ 3 files changed, 145 insertions(+), 127 deletions(-) create mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/StructureIterationType.java diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java index c8488d5cea..de7a98f9bc 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java @@ -1,13 +1,11 @@ package com.github.technus.tectech.mechanics.structure; -import com.github.technus.tectech.TecTech; import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; import net.minecraft.item.ItemStack; import net.minecraft.world.World; -import java.util.Arrays; - -import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; +import static com.github.technus.tectech.mechanics.structure.StructureIterationType.*; +import static com.github.technus.tectech.mechanics.structure.StructureUtility.iterate; public interface IStructureDefinition { /** @@ -22,146 +20,28 @@ public interface IStructureDefinition { int basePositionA, int basePositionB, int basePositionC, boolean forceCheckAllBlocks){ return iterate(object, null, getStructureFor(piece), world, extendedFacing, basePositionX, basePositionY, basePositionZ, - basePositionA, basePositionB, basePositionC,false,forceCheckAllBlocks); + basePositionA, basePositionB, basePositionC,forceCheckAllBlocks? CHECK_FULLY:CHECK); } default boolean hints(T object, ItemStack trigger,String piece, World world, ExtendedFacing extendedFacing, int basePositionX, int basePositionY, int basePositionZ, int basePositionA, int basePositionB, int basePositionC) { return iterate(object, trigger, getStructureFor(piece), world, extendedFacing, basePositionX, basePositionY, basePositionZ, - basePositionA, basePositionB, basePositionC,true,null); + basePositionA, basePositionB, basePositionC,SPAWN_HINTS); } default boolean build(T object, ItemStack trigger,String piece, World world, ExtendedFacing extendedFacing, int basePositionX, int basePositionY, int basePositionZ, int basePositionA, int basePositionB, int basePositionC) { return iterate(object, trigger, getStructureFor(piece), world, extendedFacing, basePositionX, basePositionY, basePositionZ, - basePositionA, basePositionB, basePositionC,false,null); + basePositionA, basePositionB, basePositionC,BUILD_TEMPLATE); } default boolean buildOrHints(T object, ItemStack trigger,String piece, World world, ExtendedFacing extendedFacing, int basePositionX, int basePositionY, int basePositionZ, int basePositionA, int basePositionB, int basePositionC, - boolean hintsOnly){ + boolean hints){ return iterate(object, trigger, getStructureFor(piece), world, extendedFacing, basePositionX, basePositionY, basePositionZ, - basePositionA, basePositionB, basePositionC,hintsOnly,null); - } - - static boolean iterate(T object, ItemStack trigger, IStructureElement[] elements, World world, ExtendedFacing extendedFacing, - int basePositionX, int basePositionY, int basePositionZ, - int basePositionA, int basePositionB, int basePositionC, - boolean hintsOnly, Boolean checkBlocksIfNotNullForceCheckAllIfTrue){ - if(world.isRemote ^ hintsOnly){ - return false; - } - - //change base position to base offset - basePositionA=-basePositionA; - basePositionB=-basePositionB; - basePositionC=-basePositionC; - - int[] abc = new int[]{basePositionA,basePositionB,basePositionC}; - int[] xyz = new int[3]; - - if(checkBlocksIfNotNullForceCheckAllIfTrue!=null){ - if(checkBlocksIfNotNullForceCheckAllIfTrue){ - for (IStructureElement element : elements) { - if(element.isNavigating()) { - abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA(); - abc[1] = (element.resetB() ? basePositionB : abc[1]) + element.getStepB(); - abc[2] = (element.resetC() ? basePositionC : abc[2]) + element.getStepC(); - }else { - extendedFacing.getWorldOffset(abc, xyz); - xyz[0] += basePositionX; - xyz[1] += basePositionY; - xyz[2] += basePositionZ; - - if (world.blockExists(xyz[0], xyz[1], xyz[2])) { - if(!element.check(object, world, xyz[0], xyz[1], xyz[2])){ - if(DEBUG_MODE){ - TecTech.LOGGER.info("Multi ["+basePositionX+", "+basePositionY+", "+basePositionZ+"] failed @ "+ - Arrays.toString(xyz)+" "+Arrays.toString(abc)); - } - return false; - } - } else { - if(DEBUG_MODE){ - TecTech.LOGGER.info("Multi ["+basePositionX+", "+basePositionY+", "+basePositionZ+"] !blockExists @ "+ - Arrays.toString(xyz)+" "+Arrays.toString(abc)); - } - return false; - } - abc[0]+=1; - } - } - } else { - for (IStructureElement element : elements) { - if(element.isNavigating()) { - abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA(); - abc[1] = (element.resetB() ? basePositionB : abc[1]) + element.getStepB(); - abc[2] = (element.resetC() ? basePositionC : abc[2]) + element.getStepC(); - }else { - extendedFacing.getWorldOffset(abc, xyz); - xyz[0] += basePositionX; - xyz[1] += basePositionY; - xyz[2] += basePositionZ; - - if (world.blockExists(xyz[0], xyz[1], xyz[2])) { - if(!element.check(object, world, xyz[0], xyz[1], xyz[2])){ - if(DEBUG_MODE){ - TecTech.LOGGER.info("Multi ["+basePositionX+", "+basePositionY+", "+basePositionZ+"] failed @ "+ - Arrays.toString(xyz)+" "+Arrays.toString(abc)); - } - return false; - } - } else { - if(DEBUG_MODE){ - TecTech.LOGGER.info("Multi ["+basePositionX+", "+basePositionY+", "+basePositionZ+"] !blockExists @ "+ - Arrays.toString(xyz)+" "+Arrays.toString(abc)); - } - } - abc[0]+=1; - } - } - } - }else { - if(hintsOnly) { - for (IStructureElement element : elements) { - if(element.isNavigating()) { - abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA(); - abc[1] = (element.resetB() ? basePositionB : abc[1]) + element.getStepB(); - abc[2] = (element.resetC() ? basePositionC : abc[2]) + element.getStepC(); - }else { - extendedFacing.getWorldOffset(abc, xyz); - xyz[0] += basePositionX; - xyz[1] += basePositionY; - xyz[2] += basePositionZ; - - element.spawnHint(object, world, xyz[0], xyz[1], xyz[2], trigger); - - abc[0]+=1; - } - } - } else { - for (IStructureElement element : elements) { - if(element.isNavigating()) { - abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA(); - abc[1] = (element.resetB() ? basePositionB : abc[1]) + element.getStepB(); - abc[2] = (element.resetC() ? basePositionC : abc[2]) + element.getStepC(); - }else { - extendedFacing.getWorldOffset(abc, xyz); - xyz[0] += basePositionX; - xyz[1] += basePositionY; - xyz[2] += basePositionZ; - - if (world.blockExists(xyz[0], xyz[1], xyz[2])) { - element.placeBlock(object, world, xyz[0], xyz[1], xyz[2], trigger); - } - abc[0]+=1; - } - } - } - } - return true; + basePositionA, basePositionB, basePositionC,hints?SPAWN_HINTS:BUILD_TEMPLATE); } } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureIterationType.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureIterationType.java new file mode 100644 index 0000000000..618c07f970 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureIterationType.java @@ -0,0 +1,8 @@ +package com.github.technus.tectech.mechanics.structure; + +public enum StructureIterationType { + SPAWN_HINTS, //only spawn hint particles + BUILD_TEMPLATE, //only builds template + CHECK, //checks the structure skipping all unloaded chunks (for machines that were validated already) + CHECK_FULLY, //checks the structure failing on unloaded chunks (for machines that are not valid currently) +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java index 2f6998f028..131822fa46 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java @@ -22,6 +22,8 @@ import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; +import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; +import static com.github.technus.tectech.mechanics.structure.StructureIterationType.SPAWN_HINTS; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sHintCasingsTT; import static java.lang.Integer.MIN_VALUE; @@ -1376,6 +1378,134 @@ public class StructureUtility { } } + public static boolean iterate(T object, + ItemStack trigger, + IStructureElement[] elements, + World world, + ExtendedFacing extendedFacing, + int basePositionX, int basePositionY, int basePositionZ, + int basePositionA, int basePositionB, int basePositionC, + StructureIterationType iterationType) { + if (world.isRemote ^ (iterationType == SPAWN_HINTS)) { + return false; + } + + //change base position to base offset + basePositionA = -basePositionA; + basePositionB = -basePositionB; + basePositionC = -basePositionC; + + int[] abc = new int[]{basePositionA, basePositionB, basePositionC}; + int[] xyz = new int[3]; + + switch (iterationType) { + case SPAWN_HINTS: { + for (IStructureElement element : elements) { + if (element.isNavigating()) { + abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA(); + abc[1] = (element.resetB() ? basePositionB : abc[1]) + element.getStepB(); + abc[2] = (element.resetC() ? basePositionC : abc[2]) + element.getStepC(); + } else { + extendedFacing.getWorldOffset(abc, xyz); + xyz[0] += basePositionX; + xyz[1] += basePositionY; + xyz[2] += basePositionZ; + + element.spawnHint(object, world, xyz[0], xyz[1], xyz[2], trigger); + + abc[0] += 1; + } + } + break; + } + case BUILD_TEMPLATE: { + for (IStructureElement element : elements) { + if (element.isNavigating()) { + abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA(); + abc[1] = (element.resetB() ? basePositionB : abc[1]) + element.getStepB(); + abc[2] = (element.resetC() ? basePositionC : abc[2]) + element.getStepC(); + } else { + extendedFacing.getWorldOffset(abc, xyz); + xyz[0] += basePositionX; + xyz[1] += basePositionY; + xyz[2] += basePositionZ; + + if (world.blockExists(xyz[0], xyz[1], xyz[2])) { + element.placeBlock(object, world, xyz[0], xyz[1], xyz[2], trigger); + } + abc[0] += 1; + } + } + break; + } + case CHECK: { + for (IStructureElement element : elements) { + if (element.isNavigating()) { + abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA(); + abc[1] = (element.resetB() ? basePositionB : abc[1]) + element.getStepB(); + abc[2] = (element.resetC() ? basePositionC : abc[2]) + element.getStepC(); + } else { + extendedFacing.getWorldOffset(abc, xyz); + xyz[0] += basePositionX; + xyz[1] += basePositionY; + xyz[2] += basePositionZ; + + if (world.blockExists(xyz[0], xyz[1], xyz[2])) { + if (!element.check(object, world, xyz[0], xyz[1], xyz[2])) { + if (DEBUG_MODE) { + TecTech.LOGGER.info("Multi [" + basePositionX + ", " + basePositionY + ", " + basePositionZ + "] failed @ " + + Arrays.toString(xyz) + " " + Arrays.toString(abc)); + } + return false; + } + } else { + if (DEBUG_MODE) { + TecTech.LOGGER.info("Multi [" + basePositionX + ", " + basePositionY + ", " + basePositionZ + "] !blockExists @ " + + Arrays.toString(xyz) + " " + Arrays.toString(abc)); + } + } + abc[0] += 1; + } + break; + } + } + case CHECK_FULLY: { + for (IStructureElement element : elements) { + if (element.isNavigating()) { + abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA(); + abc[1] = (element.resetB() ? basePositionB : abc[1]) + element.getStepB(); + abc[2] = (element.resetC() ? basePositionC : abc[2]) + element.getStepC(); + } else { + extendedFacing.getWorldOffset(abc, xyz); + xyz[0] += basePositionX; + xyz[1] += basePositionY; + xyz[2] += basePositionZ; + + if (world.blockExists(xyz[0], xyz[1], xyz[2])) { + if (!element.check(object, world, xyz[0], xyz[1], xyz[2])) { + if (DEBUG_MODE) { + TecTech.LOGGER.info("Multi [" + basePositionX + ", " + basePositionY + ", " + basePositionZ + "] failed @ " + + Arrays.toString(xyz) + " " + Arrays.toString(abc)); + } + return false; + } + } else { + if (DEBUG_MODE) { + TecTech.LOGGER.info("Multi [" + basePositionX + ", " + basePositionY + ", " + basePositionZ + "] !blockExists @ " + + Arrays.toString(xyz) + " " + Arrays.toString(abc)); + } + return false; + } + abc[0] += 1; + } + } + break; + } + default: return false; + } + return true; + } + /** * Transposes shape (swaps B and C axis, can be used to un-transpose transposed shape) * WARNING! Do not use on old api... -- cgit From 62953799f55937348fa49b8de9f3dad11963bd52 Mon Sep 17 00:00:00 2001 From: Tec Date: Mon, 14 Sep 2020 18:52:27 +0200 Subject: Renamge Generic parameter --- .../mechanics/structure/IStructureDefinition.java | 12 +++--- .../mechanics/structure/IStructureElement.java | 8 ++-- .../structure/IStructureElementChain.java | 22 +++++----- .../structure/IStructureElementCheckOnly.java | 6 +-- .../structure/IStructureElementDeferred.java | 2 +- .../structure/IStructureElementNoPlacement.java | 4 +- .../mechanics/structure/IStructureNavigate.java | 8 ++-- .../mechanics/structure/StructureDefinition.java | 50 +++++++++++----------- .../mechanics/structure/adders/IBlockAdder.java | 4 +- .../mechanics/structure/adders/IHatchAdder.java | 6 +-- .../mechanics/structure/adders/ITileAdder.java | 4 +- .../java/com/github/technus/tectech/util/Util.java | 1 - 12 files changed, 63 insertions(+), 64 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java index de7a98f9bc..ca9712df04 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java @@ -7,15 +7,15 @@ import net.minecraft.world.World; import static com.github.technus.tectech.mechanics.structure.StructureIterationType.*; import static com.github.technus.tectech.mechanics.structure.StructureUtility.iterate; -public interface IStructureDefinition { +public interface IStructureDefinition { /** * Used internally * @param name same name as for other methods here * @return the array of elements to process */ - IStructureElement[] getStructureFor(String name); + IStructureElement[] getStructureFor(String name); - default boolean check(T object,String piece, World world, ExtendedFacing extendedFacing, + default boolean check(MultiBlock object, String piece, World world, ExtendedFacing extendedFacing, int basePositionX, int basePositionY, int basePositionZ, int basePositionA, int basePositionB, int basePositionC, boolean forceCheckAllBlocks){ @@ -23,21 +23,21 @@ public interface IStructureDefinition { basePositionA, basePositionB, basePositionC,forceCheckAllBlocks? CHECK_FULLY:CHECK); } - default boolean hints(T object, ItemStack trigger,String piece, World world, ExtendedFacing extendedFacing, + default boolean hints(MultiBlock object, ItemStack trigger, String piece, World world, ExtendedFacing extendedFacing, int basePositionX, int basePositionY, int basePositionZ, int basePositionA, int basePositionB, int basePositionC) { return iterate(object, trigger, getStructureFor(piece), world, extendedFacing, basePositionX, basePositionY, basePositionZ, basePositionA, basePositionB, basePositionC,SPAWN_HINTS); } - default boolean build(T object, ItemStack trigger,String piece, World world, ExtendedFacing extendedFacing, + default boolean build(MultiBlock object, ItemStack trigger, String piece, World world, ExtendedFacing extendedFacing, int basePositionX, int basePositionY, int basePositionZ, int basePositionA, int basePositionB, int basePositionC) { return iterate(object, trigger, getStructureFor(piece), world, extendedFacing, basePositionX, basePositionY, basePositionZ, basePositionA, basePositionB, basePositionC,BUILD_TEMPLATE); } - default boolean buildOrHints(T object, ItemStack trigger,String piece, World world, ExtendedFacing extendedFacing, + default boolean buildOrHints(MultiBlock object, ItemStack trigger, String piece, World world, ExtendedFacing extendedFacing, int basePositionX, int basePositionY, int basePositionZ, int basePositionA, int basePositionB, int basePositionC, boolean hints){ diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java index f946e71f91..436c7ce203 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java @@ -6,12 +6,12 @@ import net.minecraft.world.World; /** * Use StructureUtility to instantiate */ -public interface IStructureElement { - boolean check(T t,World world,int x,int y,int z); +public interface IStructureElement { + boolean check(MultiBlock multiBlock, World world, int x, int y, int z); - boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger); + boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger); - boolean placeBlock(T t,World world,int x,int y,int z, ItemStack trigger); + boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger); default int getStepA(){ return 1; diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementChain.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementChain.java index f9593ee1c5..4c7059dd81 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementChain.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementChain.java @@ -6,13 +6,13 @@ import net.minecraft.world.World; /** * Use StructureUtility to instantiate */ -public interface IStructureElementChain extends IStructureElement { - IStructureElement[] fallbacks(); +public interface IStructureElementChain extends IStructureElement { + IStructureElement[] fallbacks(); @Override - default boolean check(T t, World world, int x, int y, int z){ - for (IStructureElement fallback : fallbacks()) { - if (fallback.check(t, world, x, y, z)) { + default boolean check(MultiBlock multiBlock, World world, int x, int y, int z){ + for (IStructureElement fallback : fallbacks()) { + if (fallback.check(multiBlock, world, x, y, z)) { return true; } } @@ -20,9 +20,9 @@ public interface IStructureElementChain extends IStructureElement { } @Override - default boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - for (IStructureElement fallback : fallbacks()) { - if (fallback.spawnHint(t, world, x, y, z, trigger)) { + default boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + for (IStructureElement fallback : fallbacks()) { + if (fallback.spawnHint(multiBlock, world, x, y, z, trigger)) { return true; } } @@ -30,9 +30,9 @@ public interface IStructureElementChain extends IStructureElement { } @Override - default boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - for (IStructureElement fallback : fallbacks()) { - if (fallback.placeBlock(t, world, x, y, z, trigger)) { + default boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + for (IStructureElement fallback : fallbacks()) { + if (fallback.placeBlock(multiBlock, world, x, y, z, trigger)) { return true; } } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementCheckOnly.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementCheckOnly.java index ec15aea53b..c6492a5ed6 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementCheckOnly.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementCheckOnly.java @@ -3,14 +3,14 @@ package com.github.technus.tectech.mechanics.structure; import net.minecraft.item.ItemStack; import net.minecraft.world.World; -public interface IStructureElementCheckOnly extends IStructureElement { +public interface IStructureElementCheckOnly extends IStructureElement { @Override - default boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger){ + default boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger){ return false; } @Override - default boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger){ + default boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger){ return false; } } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementDeferred.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementDeferred.java index dbb74312a8..c0e39bb2ad 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementDeferred.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementDeferred.java @@ -3,5 +3,5 @@ package com.github.technus.tectech.mechanics.structure; /** * Use StructureUtility to instantiate */ -public interface IStructureElementDeferred extends IStructureElement { +public interface IStructureElementDeferred extends IStructureElement { } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementNoPlacement.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementNoPlacement.java index 47e6060878..12cf2141ae 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementNoPlacement.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementNoPlacement.java @@ -3,9 +3,9 @@ package com.github.technus.tectech.mechanics.structure; import net.minecraft.item.ItemStack; import net.minecraft.world.World; -public interface IStructureElementNoPlacement extends IStructureElement { +public interface IStructureElementNoPlacement extends IStructureElement { @Override - default boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger){ + default boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger){ return false; } } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureNavigate.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureNavigate.java index d3f4134cea..8c7c837a94 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureNavigate.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureNavigate.java @@ -6,19 +6,19 @@ import net.minecraft.world.World; /** * Use StructureUtility to instantiate */ -interface IStructureNavigate extends IStructureElement { +interface IStructureNavigate extends IStructureElement { @Override - default boolean check(T t, World world, int x, int y, int z){ + default boolean check(MultiBlock multiBlock, World world, int x, int y, int z){ return true; } @Override - default boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + default boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { return true; } @Override - default boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + default boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { return true; } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java index 9a1e94d98a..f42cbd35d1 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java @@ -7,31 +7,31 @@ import java.util.*; import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; import static com.github.technus.tectech.mechanics.structure.StructureUtility.*; -public class StructureDefinition implements IStructureDefinition { - private final Map> elements; +public class StructureDefinition implements IStructureDefinition { + private final Map> elements; private final Map shapes; - private final Map[]> structures; + private final Map[]> structures; - public static Builder builder() { + public static Builder builder() { return new Builder<>(); } private StructureDefinition( - Map> elements, + Map> elements, Map shapes, - Map[]> structures) { + Map[]> structures) { this.elements =elements; this.shapes=shapes; this.structures = structures; } - public static class Builder { + public static class Builder { private static final char A='\uA000'; private static final char B='\uB000'; private static final char C='\uC000'; private char d ='\uD000'; private final Map navigates; - private final Map> elements; + private final Map> elements; private final Map shapes; private Builder() { @@ -40,7 +40,7 @@ public class StructureDefinition implements IStructureDefinition { shapes = new HashMap<>(); } - public Map> getElements() { + public Map> getElements() { return elements; } @@ -57,7 +57,7 @@ public class StructureDefinition implements IStructureDefinition { * @return */ @Deprecated - public Builder addShapeOldApi(String name, String[][] structurePiece) { + public Builder addShapeOldApi(String name, String[][] structurePiece) { StringBuilder builder = new StringBuilder(); if (structurePiece.length > 0) { for (String[] strings : structurePiece) { @@ -142,7 +142,7 @@ public class StructureDefinition implements IStructureDefinition { * @param structurePiece generated or written struct - DO NOT STORE IT ANYWHERE, or at least set them to null afterwards * @return this builder */ - public Builder addShape(String name, String[][] structurePiece) { + public Builder addShape(String name, String[][] structurePiece) { StringBuilder builder = new StringBuilder(); if (structurePiece.length > 0) { for (String[] strings : structurePiece) { @@ -199,13 +199,13 @@ public class StructureDefinition implements IStructureDefinition { return this; } - public Builder addElement(Character name, IStructureElement structurePiece) { + public Builder addElement(Character name, IStructureElement structurePiece) { elements.putIfAbsent(name, structurePiece); return this; } - public IStructureDefinition build() { - Map[]> structures = compileStructureMap(); + public IStructureDefinition build() { + Map[]> structures = compileStructureMap(); if(DEBUG_MODE){ return new StructureDefinition<>(new HashMap<>(elements), new HashMap<>(shapes), structures); }else { @@ -214,22 +214,22 @@ public class StructureDefinition implements IStructureDefinition { } @SuppressWarnings("unchecked") - private Map[]> compileElementSetMap() { + private Map[]> compileElementSetMap() { Set missing = new HashSet<>(); shapes.values().stream().map(CharSequence::chars).forEach(intStream -> intStream.forEach(c -> { - IStructureElement iStructureElement = elements.get((char) c); + IStructureElement iStructureElement = elements.get((char) c); if (iStructureElement == null) { missing.add(c); } })); if (missing.isEmpty()) { - Map[]> map = new HashMap<>(); + Map[]> map = new HashMap<>(); shapes.forEach((key, value) -> { Set chars=new HashSet<>(); for (char c : value.toCharArray()) { chars.add(c); } - IStructureElement[] compiled = new IStructureElement[chars.size()]; + IStructureElement[] compiled = new IStructureElement[chars.size()]; int i=0; for (Character aChar : chars) { compiled[i++]=elements.get(aChar); @@ -244,18 +244,18 @@ public class StructureDefinition implements IStructureDefinition { } @SuppressWarnings("unchecked") - private Map[]> compileStructureMap() { + private Map[]> compileStructureMap() { Set mising = new HashSet<>(); shapes.values().stream().map(CharSequence::chars).forEach(intStream -> intStream.forEach(c -> { - IStructureElement iStructureElement = elements.get((char) c); + IStructureElement iStructureElement = elements.get((char) c); if (iStructureElement == null) { mising.add(c); } })); if (mising.isEmpty()) { - Map[]> map = new HashMap<>(); + Map[]> map = new HashMap<>(); shapes.forEach((key, value) -> { - IStructureElement[] compiled = new IStructureElement[value.length()]; + IStructureElement[] compiled = new IStructureElement[value.length()]; for (int i = 0; i < value.length(); i++) { compiled[i] = elements.get(value.charAt(i)); } @@ -269,7 +269,7 @@ public class StructureDefinition implements IStructureDefinition { } } - public Map> getElements(){ + public Map> getElements(){ return elements; } @@ -277,12 +277,12 @@ public class StructureDefinition implements IStructureDefinition { return shapes; } - public Map[]> getStructures() { + public Map[]> getStructures() { return structures; } @Override - public IStructureElement[] getStructureFor(String name) { + public IStructureElement[] getStructureFor(String name) { return structures.get(name); } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IBlockAdder.java b/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IBlockAdder.java index 908c4c4aca..9d223ccd52 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IBlockAdder.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IBlockAdder.java @@ -3,12 +3,12 @@ package com.github.technus.tectech.mechanics.structure.adders; import net.minecraft.block.Block; -public interface IBlockAdder { +public interface IBlockAdder { /** * Callback on block added, needs to check if block is valid (and add it) * @param block block attempted to add * @param meta meta of block attempted to add * @return is structure still valid */ - boolean apply(T t,Block block, Integer meta); + boolean apply(MultiBlock multiBlock, Block block, Integer meta); } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IHatchAdder.java b/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IHatchAdder.java index a47befc2e8..e7bb5fc459 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IHatchAdder.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IHatchAdder.java @@ -3,12 +3,12 @@ package com.github.technus.tectech.mechanics.structure.adders; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -public interface IHatchAdder { +public interface IHatchAdder { /** * Callback to add hatch, needs to check if hatch is valid (and add it) * @param iGregTechTileEntity hatch - * @param aShort requested texture index, or null if not... + * @param textureIndex requested texture index, or null if not... * @return managed to add hatch (structure still valid) */ - boolean apply(T t,IGregTechTileEntity iGregTechTileEntity, Short aShort); + boolean apply(MultiBlock multiBlock, IGregTechTileEntity iGregTechTileEntity, Short textureIndex); } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/adders/ITileAdder.java b/src/main/java/com/github/technus/tectech/mechanics/structure/adders/ITileAdder.java index cc3c7dbb7a..72d08751b5 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/adders/ITileAdder.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/adders/ITileAdder.java @@ -2,11 +2,11 @@ package com.github.technus.tectech.mechanics.structure.adders; import net.minecraft.tileentity.TileEntity; -public interface ITileAdder { +public interface ITileAdder { /** * Callback to add hatch, needs to check if tile is valid (and add it) * @param tileEntity tile * @return managed to add hatch (structure still valid) */ - boolean apply(T t,TileEntity tileEntity); + boolean apply(MultiBlock multiBlock, TileEntity tileEntity); } diff --git a/src/main/java/com/github/technus/tectech/util/Util.java b/src/main/java/com/github/technus/tectech/util/Util.java index 1843770e3a..8c693620b6 100644 --- a/src/main/java/com/github/technus/tectech/util/Util.java +++ b/src/main/java/com/github/technus/tectech/util/Util.java @@ -40,7 +40,6 @@ public final class Util { private Util() { } - @SuppressWarnings("ComparatorMethodParameterNotUsed") public static > SortedSet> entriesSortedByValues(Map map) { SortedSet> sortedEntries = new TreeSet<>( (e1, e2) -> { -- cgit From f297d6c576675819a801c6f3fdeb4affc1315347 Mon Sep 17 00:00:00 2001 From: Tec Date: Mon, 14 Sep 2020 20:19:54 +0200 Subject: Remove boxing --- .../mechanics/structure/StructureUtility.java | 532 ++++++++++----------- .../mechanics/structure/adders/IBlockAdder.java | 2 +- .../mechanics/structure/adders/IHatchAdder.java | 2 +- 3 files changed, 268 insertions(+), 268 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java index 131822fa46..14930952c5 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java @@ -39,18 +39,18 @@ public class StructureUtility { @SuppressWarnings("rawtypes") private static final IStructureElement AIR = new IStructureElement() { @Override - public boolean check(Object t, World world, int x, int y, int z) { + public boolean check(Object multiBlock, World world, int x, int y, int z) { return world.getBlock(x, y, z).getMaterial() == Material.air; } @Override - public boolean spawnHint(Object o, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(Object multiBlock, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, sHintCasingsTT, 13); return true; } @Override - public boolean placeBlock(Object o, World world, int x, int y, int z, ItemStack trigger) { + public boolean placeBlock(Object multiBlock, World world, int x, int y, int z, ItemStack trigger) { world.setBlock(x, y, z, Blocks.air, 0, 2); return false; } @@ -58,18 +58,18 @@ public class StructureUtility { @SuppressWarnings("rawtypes") private static final IStructureElement NOT_AIR = new IStructureElement() { @Override - public boolean check(Object t, World world, int x, int y, int z) { + public boolean check(Object multiBlock, World world, int x, int y, int z) { return world.getBlock(x, y, z).getMaterial() != Material.air; } @Override - public boolean spawnHint(Object o, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(Object multiBlock, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, sHintCasingsTT, 14); return true; } @Override - public boolean placeBlock(Object o, World world, int x, int y, int z, ItemStack trigger) { + public boolean placeBlock(Object multiBlock, World world, int x, int y, int z, ItemStack trigger) { world.setBlock(x, y, z, sHintCasingsTT, 14, 2); return true; } @@ -77,18 +77,18 @@ public class StructureUtility { @SuppressWarnings("rawtypes") private static final IStructureElement ERROR = new IStructureElement() { @Override - public boolean check(Object t, World world, int x, int y, int z) { + public boolean check(Object multiBlock, World world, int x, int y, int z) { return false; } @Override - public boolean spawnHint(Object o, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(Object multiBlock, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, sHintCasingsTT, 15); return true; } @Override - public boolean placeBlock(Object o, World world, int x, int y, int z, ItemStack trigger) { + public boolean placeBlock(Object multiBlock, World world, int x, int y, int z, ItemStack trigger) { return true; } }; @@ -98,12 +98,12 @@ public class StructureUtility { } @SuppressWarnings("unchecked") - public static IStructureElement isAir() { + public static IStructureElement isAir() { return AIR; } @SuppressWarnings("unchecked") - public static IStructureElement notAir() { + public static IStructureElement notAir() { return NOT_AIR; } @@ -112,11 +112,11 @@ public class StructureUtility { * Placement is always handled by this and does nothing. * Makes little to no use it in fallback chain. * - * @param + * @param * @return */ @SuppressWarnings("unchecked") - public static IStructureElement error() { + public static IStructureElement error() { return ERROR; } @@ -126,19 +126,19 @@ public class StructureUtility { * Check always returns: true. * * @param dots - * @param + * @param * @return */ - public static IStructureElementNoPlacement ofHint(int dots) { + public static IStructureElementNoPlacement ofHint(int dots) { int meta = dots - 1; - return new IStructureElementNoPlacement() { + return new IStructureElementNoPlacement() { @Override - public boolean check(T t, World world, int x, int y, int z) { + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { return true; } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, sHintCasingsTT, meta); return false; } @@ -149,18 +149,18 @@ public class StructureUtility { * Check always returns: true. * * @param icons - * @param + * @param * @return */ - public static IStructureElementNoPlacement ofHintDeferred(Supplier icons) { - return new IStructureElementNoPlacement() { + public static IStructureElementNoPlacement ofHintDeferred(Supplier icons) { + return new IStructureElementNoPlacement() { @Override - public boolean check(T t, World world, int x, int y, int z) { + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { return true; } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, icons.get()); return false; } @@ -172,18 +172,18 @@ public class StructureUtility { * * @param icons * @param RGBa - * @param + * @param * @return */ - public static IStructureElementNoPlacement ofHintDeferred(Supplier icons, short[] RGBa) { - return new IStructureElementNoPlacement() { + public static IStructureElementNoPlacement ofHintDeferred(Supplier icons, short[] RGBa) { + return new IStructureElementNoPlacement() { @Override - public boolean check(T t, World world, int x, int y, int z) { + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { return true; } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle_tinted(world, x, y, z, icons.get(), RGBa); return false; } @@ -197,19 +197,19 @@ public class StructureUtility { /** * Does not allow Block duplicates (with different meta) */ - public static IStructureElementNoPlacement ofBlocksFlatHint(Map blocsMap, Block hintBlock, int hintMeta) { + public static IStructureElementNoPlacement ofBlocksFlatHint(Map blocsMap, Block hintBlock, int hintMeta) { if (blocsMap == null || blocsMap.isEmpty() || hintBlock == null) { throw new IllegalArgumentException(); } - return new IStructureElementNoPlacement() { + return new IStructureElementNoPlacement() { @Override - public boolean check(T t, World world, int x, int y, int z) { + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { Block worldBlock = world.getBlock(x, y, z); return blocsMap.getOrDefault(worldBlock, MIN_VALUE) == worldBlock.getDamageValue(world, x, y, z); } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, hintBlock, hintMeta); return true; } @@ -219,7 +219,7 @@ public class StructureUtility { /** * Allows block duplicates (with different meta) */ - public static IStructureElementNoPlacement ofBlocksMapHint(Map> blocsMap, Block hintBlock, int hintMeta) { + public static IStructureElementNoPlacement ofBlocksMapHint(Map> blocsMap, Block hintBlock, int hintMeta) { if (blocsMap == null || blocsMap.isEmpty() || hintBlock == null) { throw new IllegalArgumentException(); } @@ -228,57 +228,57 @@ public class StructureUtility { throw new IllegalArgumentException(); } } - return new IStructureElementNoPlacement() { + return new IStructureElementNoPlacement() { @Override - public boolean check(T t, World world, int x, int y, int z) { + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { Block worldBlock = world.getBlock(x, y, z); return blocsMap.getOrDefault(worldBlock, Collections.emptySet()).contains(worldBlock.getDamageValue(world, x, y, z)); } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, hintBlock, hintMeta); return true; } }; } - public static IStructureElementNoPlacement ofBlockHint(Block block, int meta, Block hintBlock, int hintMeta) { + public static IStructureElementNoPlacement ofBlockHint(Block block, int meta, Block hintBlock, int hintMeta) { if (block == null || hintBlock == null) { throw new IllegalArgumentException(); } - return new IStructureElementNoPlacement() { + return new IStructureElementNoPlacement() { @Override - public boolean check(T t, World world, int x, int y, int z) { + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { Block worldBlock = world.getBlock(x, y, z); return block == worldBlock && meta == worldBlock.getDamageValue(world, x, y, z); } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, hintBlock, hintMeta); return true; } }; } - public static IStructureElementNoPlacement ofBlockHint(Block block, int meta) { + public static IStructureElementNoPlacement ofBlockHint(Block block, int meta) { return ofBlockHint(block, meta, block, meta); } - public static IStructureElementNoPlacement ofBlockAdderHint(IBlockAdder iBlockAdder, Block hintBlock, int hintMeta) { + public static IStructureElementNoPlacement ofBlockAdderHint(IBlockAdder iBlockAdder, Block hintBlock, int hintMeta) { if (iBlockAdder == null || hintBlock == null) { throw new IllegalArgumentException(); } - return new IStructureElementNoPlacement() { + return new IStructureElementNoPlacement() { @Override - public boolean check(T t, World world, int x, int y, int z) { + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { Block worldBlock = world.getBlock(x, y, z); - return iBlockAdder.apply(t, worldBlock, worldBlock.getDamageValue(world, x, y, z)); + return iBlockAdder.apply(multiBlock, worldBlock, worldBlock.getDamageValue(world, x, y, z)); } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, hintBlock, hintMeta); return true; } @@ -288,46 +288,46 @@ public class StructureUtility { /** * Does not allow Block duplicates (with different meta) */ - public static IStructureElement ofBlocksFlat(Map blocsMap, Block defaultBlock, int defaultMeta) { + public static IStructureElement ofBlocksFlat(Map blocsMap, Block defaultBlock, int defaultMeta) { if (blocsMap == null || blocsMap.isEmpty() || defaultBlock == null) { throw new IllegalArgumentException(); } if(defaultBlock instanceof ICustomBlockSetting){ - return new IStructureElement() { + return new IStructureElement() { @Override - public boolean check(T t, World world, int x, int y, int z) { + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { Block worldBlock = world.getBlock(x, y, z); return blocsMap.getOrDefault(worldBlock, MIN_VALUE) == worldBlock.getDamageValue(world, x, y, z); } @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { ((ICustomBlockSetting) defaultBlock).setBlock(world, x, y, z, defaultMeta); return true; } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); return true; } }; }else { - return new IStructureElement() { + return new IStructureElement() { @Override - public boolean check(T t, World world, int x, int y, int z) { + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { Block worldBlock = world.getBlock(x, y, z); return blocsMap.getOrDefault(worldBlock, MIN_VALUE) == worldBlock.getDamageValue(world, x, y, z); } @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { world.setBlock(x, y, z, defaultBlock, defaultMeta, 2); return true; } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); return true; } @@ -338,7 +338,7 @@ public class StructureUtility { /** * Allows block duplicates (with different meta) */ - public static IStructureElement ofBlocksMap(Map> blocsMap, Block defaultBlock, int defaultMeta) { + public static IStructureElement ofBlocksMap(Map> blocsMap, Block defaultBlock, int defaultMeta) { if (blocsMap == null || blocsMap.isEmpty() || defaultBlock == null) { throw new IllegalArgumentException(); } @@ -348,41 +348,41 @@ public class StructureUtility { } } if(defaultBlock instanceof ICustomBlockSetting){ - return new IStructureElement() { + return new IStructureElement() { @Override - public boolean check(T t, World world, int x, int y, int z) { + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { Block worldBlock = world.getBlock(x, y, z); return blocsMap.getOrDefault(worldBlock, Collections.emptySet()).contains(worldBlock.getDamageValue(world, x, y, z)); } @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { ((ICustomBlockSetting) defaultBlock).setBlock(world, x, y, z, defaultMeta); return true; } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); return true; } }; }else { - return new IStructureElement() { + return new IStructureElement() { @Override - public boolean check(T t, World world, int x, int y, int z) { + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { Block worldBlock = world.getBlock(x, y, z); return blocsMap.getOrDefault(worldBlock, Collections.emptySet()).contains(worldBlock.getDamageValue(world, x, y, z)); } @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { world.setBlock(x, y, z, defaultBlock, defaultMeta, 2); return true; } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); return true; } @@ -390,46 +390,46 @@ public class StructureUtility { } } - public static IStructureElement ofBlock(Block block, int meta, Block defaultBlock, int defaultMeta) { + public static IStructureElement ofBlock(Block block, int meta, Block defaultBlock, int defaultMeta) { if (block == null || defaultBlock == null) { throw new IllegalArgumentException(); } if(block instanceof ICustomBlockSetting){ - return new IStructureElement() { + return new IStructureElement() { @Override - public boolean check(T t, World world, int x, int y, int z) { + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { Block worldBlock = world.getBlock(x, y, z); return block == worldBlock && meta == worldBlock.getDamageValue(world, x, y, z); } @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { ((ICustomBlockSetting) defaultBlock).setBlock(world, x, y, z, defaultMeta); return true; } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); return true; } }; } else { - return new IStructureElement() { + return new IStructureElement() { @Override - public boolean check(T t, World world, int x, int y, int z) { + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { Block worldBlock = world.getBlock(x, y, z); return block == worldBlock && meta == worldBlock.getDamageValue(world, x, y, z); } @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { world.setBlock(x, y, z, defaultBlock, defaultMeta, 2); return true; } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); return true; } @@ -440,44 +440,44 @@ public class StructureUtility { /** * Same as above but ignores target meta id */ - public static IStructureElement ofBlockAnyMeta(Block block, Block defaultBlock, int defaultMeta) { + public static IStructureElement ofBlockAnyMeta(Block block, Block defaultBlock, int defaultMeta) { if (block == null || defaultBlock == null) { throw new IllegalArgumentException(); } if(block instanceof ICustomBlockSetting){ - return new IStructureElement() { + return new IStructureElement() { @Override - public boolean check(T t, World world, int x, int y, int z) { + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { return block == world.getBlock(x, y, z); } @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { ((ICustomBlockSetting) defaultBlock).setBlock(world, x, y, z, defaultMeta); return true; } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); return true; } }; } else { - return new IStructureElement() { + return new IStructureElement() { @Override - public boolean check(T t, World world, int x, int y, int z) { + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { return block == world.getBlock(x, y, z); } @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { world.setBlock(x, y, z, defaultBlock, defaultMeta, 2); return true; } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); return true; } @@ -485,21 +485,21 @@ public class StructureUtility { } } - public static IStructureElement ofBlock(Block block, int meta) { + public static IStructureElement ofBlock(Block block, int meta) { return ofBlock(block, meta, block, meta); } /** * Same as above but ignores target meta id */ - public static IStructureElement ofBlockAnyMeta(Block block) { + public static IStructureElement ofBlockAnyMeta(Block block) { return ofBlockAnyMeta(block, block, 0); } /** * Same as above but allows to set hint particle render */ - public static IStructureElement ofBlockAnyMeta(Block block,int defaultMeta) { + public static IStructureElement ofBlockAnyMeta(Block block,int defaultMeta) { return ofBlockAnyMeta(block, block, defaultMeta); } @@ -507,46 +507,46 @@ public class StructureUtility { //region adders - public static IStructureElement ofBlockAdder(IBlockAdder iBlockAdder, Block defaultBlock, int defaultMeta) { + public static IStructureElement ofBlockAdder(IBlockAdder iBlockAdder, Block defaultBlock, int defaultMeta) { if (iBlockAdder == null || defaultBlock == null) { throw new IllegalArgumentException(); } if(defaultBlock instanceof ICustomBlockSetting){ - return new IStructureElement() { + return new IStructureElement() { @Override - public boolean check(T t, World world, int x, int y, int z) { + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { Block worldBlock = world.getBlock(x, y, z); - return iBlockAdder.apply(t, worldBlock, worldBlock.getDamageValue(world, x, y, z)); + return iBlockAdder.apply(multiBlock, worldBlock, worldBlock.getDamageValue(world, x, y, z)); } @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { ((ICustomBlockSetting) defaultBlock).setBlock(world, x, y, z, defaultMeta); return true; } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); return true; } }; }else { - return new IStructureElement() { + return new IStructureElement() { @Override - public boolean check(T t, World world, int x, int y, int z) { + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { Block worldBlock = world.getBlock(x, y, z); - return iBlockAdder.apply(t, worldBlock, worldBlock.getDamageValue(world, x, y, z)); + return iBlockAdder.apply(multiBlock, worldBlock, worldBlock.getDamageValue(world, x, y, z)); } @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { world.setBlock(x, y, z, defaultBlock, defaultMeta, 2); return true; } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); return true; } @@ -554,102 +554,102 @@ public class StructureUtility { } } - public static IStructureElement ofBlockAdder(IBlockAdder iBlockAdder, int dots) { + public static IStructureElement ofBlockAdder(IBlockAdder iBlockAdder, int dots) { return ofBlockAdder(iBlockAdder, sHintCasingsTT, dots - 1); } - public static IStructureElementNoPlacement ofTileAdder(ITileAdder iTileAdder, Block hintBlock, int hintMeta) { + public static IStructureElementNoPlacement ofTileAdder(ITileAdder iTileAdder, Block hintBlock, int hintMeta) { if (iTileAdder == null || hintBlock == null) { throw new IllegalArgumentException(); } - return new IStructureElementNoPlacement() { + return new IStructureElementNoPlacement() { @Override - public boolean check(T t, World world, int x, int y, int z) { + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { TileEntity tileEntity = world.getTileEntity(x, y, z); - return tileEntity instanceof IGregTechTileEntity && iTileAdder.apply(t, tileEntity); + return tileEntity instanceof IGregTechTileEntity && iTileAdder.apply(multiBlock, tileEntity); } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, hintBlock, hintMeta); return true; } }; } - public static IStructureElementNoPlacement ofHatchAdder(IHatchAdder iHatchAdder, int textureIndex, int dots) { + public static IStructureElementNoPlacement ofHatchAdder(IHatchAdder iHatchAdder, int textureIndex, int dots) { return ofHatchAdder(iHatchAdder, textureIndex, sHintCasingsTT, dots - 1); } - public static IStructureElementNoPlacement ofHatchAdder(IHatchAdder iHatchAdder, int textureIndex, Block hintBlock, int hintMeta) { + public static IStructureElementNoPlacement ofHatchAdder(IHatchAdder iHatchAdder, int textureIndex, Block hintBlock, int hintMeta) { if (iHatchAdder == null || hintBlock == null) { throw new IllegalArgumentException(); } - return new IStructureElementNoPlacement() { + return new IStructureElementNoPlacement() { @Override - public boolean check(T t, World world, int x, int y, int z) { + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { TileEntity tileEntity = world.getTileEntity(x, y, z); - return tileEntity instanceof IGregTechTileEntity && iHatchAdder.apply(t, (IGregTechTileEntity) tileEntity, (short) textureIndex); + return tileEntity instanceof IGregTechTileEntity && iHatchAdder.apply(multiBlock, (IGregTechTileEntity) tileEntity, (short) textureIndex); } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, hintBlock, hintMeta); return true; } }; } - public static IStructureElement ofHatchAdderOptional(IHatchAdder iHatchAdder, int textureIndex, int dots, Block placeCasing, int placeCasingMeta) { + public static IStructureElement ofHatchAdderOptional(IHatchAdder iHatchAdder, int textureIndex, int dots, Block placeCasing, int placeCasingMeta) { return ofHatchAdderOptional(iHatchAdder, textureIndex, sHintCasingsTT, dots - 1, placeCasing, placeCasingMeta); } - public static IStructureElement ofHatchAdderOptional(IHatchAdder iHatchAdder, int textureIndex, Block hintBlock, int hintMeta, Block placeCasing, int placeCasingMeta) { + public static IStructureElement ofHatchAdderOptional(IHatchAdder iHatchAdder, int textureIndex, Block hintBlock, int hintMeta, Block placeCasing, int placeCasingMeta) { if (iHatchAdder == null || hintBlock == null) { throw new IllegalArgumentException(); } if(placeCasing instanceof ICustomBlockSetting){ - return new IStructureElement() { + return new IStructureElement() { @Override - public boolean check(T t, World world, int x, int y, int z) { + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { TileEntity tileEntity = world.getTileEntity(x, y, z); Block worldBlock = world.getBlock(x, y, z); return (tileEntity instanceof IGregTechTileEntity && - iHatchAdder.apply(t, (IGregTechTileEntity) tileEntity, (short) textureIndex)) || + iHatchAdder.apply(multiBlock, (IGregTechTileEntity) tileEntity, (short) textureIndex)) || (worldBlock == placeCasing && worldBlock.getDamageValue(world, x, y, z) == placeCasingMeta); } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, hintBlock, hintMeta); return true; } @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { ((ICustomBlockSetting) placeCasing).setBlock(world, x, y, z, placeCasingMeta); return true; } }; }else { - return new IStructureElement() { + return new IStructureElement() { @Override - public boolean check(T t, World world, int x, int y, int z) { + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { TileEntity tileEntity = world.getTileEntity(x, y, z); Block worldBlock = world.getBlock(x, y, z); return (tileEntity instanceof IGregTechTileEntity && - iHatchAdder.apply(t, (IGregTechTileEntity) tileEntity, (short) textureIndex)) || + iHatchAdder.apply(multiBlock, (IGregTechTileEntity) tileEntity, (short) textureIndex)) || (worldBlock == placeCasing && worldBlock.getDamageValue(world, x, y, z) == placeCasingMeta); } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, hintBlock, hintMeta); return true; } @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { world.setBlock(x, y, z, placeCasing, placeCasingMeta, 2); return true; } @@ -661,48 +661,48 @@ public class StructureUtility { //region side effects - public static , T> IStructureElement onElementPass(Consumer onCheckPass, B element) { - return new IStructureElement() { + public static IStructureElement onElementPass(Consumer onCheckPass, IStructureElement element) { + return new IStructureElement() { @Override - public boolean check(T t, World world, int x, int y, int z) { - boolean check = element.check(t, world, x, y, z); + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + boolean check = element.check(multiBlock, world, x, y, z); if (check) { - onCheckPass.accept(t); + onCheckPass.accept(multiBlock); } return check; } @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return element.placeBlock(t, world, x, y, z, trigger); + public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + return element.placeBlock(multiBlock, world, x, y, z, trigger); } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - return element.spawnHint(t, world, x, y, z, trigger); + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + return element.spawnHint(multiBlock, world, x, y, z, trigger); } }; } - public static , T> IStructureElement onElementFail(Consumer onFail, B element) { - return new IStructureElement() { + public static IStructureElement onElementFail(Consumer onFail, IStructureElement element) { + return new IStructureElement() { @Override - public boolean check(T t, World world, int x, int y, int z) { - boolean check = element.check(t, world, x, y, z); + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + boolean check = element.check(multiBlock, world, x, y, z); if (!check) { - onFail.accept(t); + onFail.accept(multiBlock); } return check; } @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return element.placeBlock(t, world, x, y, z, trigger); + public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + return element.placeBlock(multiBlock, world, x, y, z, trigger); } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - return element.spawnHint(t, world, x, y, z, trigger); + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + return element.spawnHint(multiBlock, world, x, y, z, trigger); } }; } @@ -714,15 +714,15 @@ public class StructureUtility { * If none does it will finally return false. * * @param elementChain - * @param + * @param * @return */ @SafeVarargs - public static IStructureElementChain ofChain(IStructureElement... elementChain) { + public static IStructureElementChain ofChain(IStructureElement... elementChain) { if (elementChain == null || elementChain.length == 0) { throw new IllegalArgumentException(); } - for (IStructureElement iStructureElement : elementChain) { + for (IStructureElement iStructureElement : elementChain) { if (iStructureElement == null) { throw new IllegalArgumentException(); } @@ -735,317 +735,317 @@ public class StructureUtility { * If none does it will finally return false. * * @param elementChain - * @param + * @param * @return */ @SuppressWarnings("unchecked") - public static IStructureElementChain ofChain(List> elementChain) { + public static IStructureElementChain ofChain(List> elementChain) { return ofChain(elementChain.toArray(new IStructureElement[0])); } //region defer - public static IStructureElementDeferred defer(Supplier> to) { + public static IStructureElementDeferred defer(Supplier> to) { if (to == null) { throw new IllegalArgumentException(); } - return new IStructureElementDeferred() { + return new IStructureElementDeferred() { @Override - public boolean check(T t, World world, int x, int y, int z) { - return to.get().check(t, world, x, y, z); + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + return to.get().check(multiBlock, world, x, y, z); } @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return to.get().placeBlock(t, world, x, y, z, trigger); + public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + return to.get().placeBlock(multiBlock, world, x, y, z, trigger); } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - return to.get().spawnHint(t, world, x, y, z, trigger); + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + return to.get().spawnHint(multiBlock, world, x, y, z, trigger); } }; } - public static IStructureElementDeferred defer(Function> to) { + public static IStructureElementDeferred defer(Function> to) { if (to == null) { throw new IllegalArgumentException(); } - return new IStructureElementDeferred() { + return new IStructureElementDeferred() { @Override - public boolean check(T t, World world, int x, int y, int z) { - return to.apply(t).check(t, world, x, y, z); + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + return to.apply(multiBlock).check(multiBlock, world, x, y, z); } @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return to.apply(t).placeBlock(t, world, x, y, z, trigger); + public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + return to.apply(multiBlock).placeBlock(multiBlock, world, x, y, z, trigger); } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - return to.apply(t).spawnHint(t, world, x, y, z, trigger); + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + return to.apply(multiBlock).spawnHint(multiBlock, world, x, y, z, trigger); } }; } - public static IStructureElementDeferred defer(Function keyExtractor, Map> map) { + public static IStructureElementDeferred defer(Function keyExtractor, Map> map) { if (keyExtractor == null || map == null) { throw new IllegalArgumentException(); } - return new IStructureElementDeferred() { + return new IStructureElementDeferred() { @Override - public boolean check(T t, World world, int x, int y, int z) { - return map.get(keyExtractor.apply(t)).check(t, world, x, y, z); + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + return map.get(keyExtractor.apply(multiBlock)).check(multiBlock, world, x, y, z); } @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return map.get(keyExtractor.apply(t)).placeBlock(t, world, x, y, z, trigger); + public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + return map.get(keyExtractor.apply(multiBlock)).placeBlock(multiBlock, world, x, y, z, trigger); } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - return map.get(keyExtractor.apply(t)).spawnHint(t, world, x, y, z, trigger); + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + return map.get(keyExtractor.apply(multiBlock)).spawnHint(multiBlock, world, x, y, z, trigger); } }; } - public static IStructureElementDeferred defer(Function keyExtractor, Map> map, IStructureElement defaultElem) { + public static IStructureElementDeferred defer(Function keyExtractor, Map> map, IStructureElement defaultElem) { if (keyExtractor == null || map == null) { throw new IllegalArgumentException(); } - return new IStructureElementDeferred() { + return new IStructureElementDeferred() { @Override - public boolean check(T t, World world, int x, int y, int z) { - return map.getOrDefault(keyExtractor.apply(t), defaultElem).check(t, world, x, y, z); + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + return map.getOrDefault(keyExtractor.apply(multiBlock), defaultElem).check(multiBlock, world, x, y, z); } @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return map.getOrDefault(keyExtractor.apply(t), defaultElem).placeBlock(t, world, x, y, z, trigger); + public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + return map.getOrDefault(keyExtractor.apply(multiBlock), defaultElem).placeBlock(multiBlock, world, x, y, z, trigger); } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - return map.getOrDefault(keyExtractor.apply(t), defaultElem).spawnHint(t, world, x, y, z, trigger); + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + return map.getOrDefault(keyExtractor.apply(multiBlock), defaultElem).spawnHint(multiBlock, world, x, y, z, trigger); } }; } @SafeVarargs - public static IStructureElementDeferred defer(Function keyExtractor, IStructureElement... array) { + public static IStructureElementDeferred defer(Function keyExtractor, IStructureElement... array) { if (keyExtractor == null || array == null) { throw new IllegalArgumentException(); } - return new IStructureElementDeferred() { + return new IStructureElementDeferred() { @Override - public boolean check(T t, World world, int x, int y, int z) { - return array[keyExtractor.apply(t)].check(t, world, x, y, z); + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + return array[keyExtractor.apply(multiBlock)].check(multiBlock, world, x, y, z); } @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return array[keyExtractor.apply(t)].placeBlock(t, world, x, y, z, trigger); + public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + return array[keyExtractor.apply(multiBlock)].placeBlock(multiBlock, world, x, y, z, trigger); } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - return array[keyExtractor.apply(t)].spawnHint(t, world, x, y, z, trigger); + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + return array[keyExtractor.apply(multiBlock)].spawnHint(multiBlock, world, x, y, z, trigger); } }; } @SuppressWarnings("unchecked") - public static IStructureElementDeferred defer(Function keyExtractor, List> array) { + public static IStructureElementDeferred defer(Function keyExtractor, List> array) { return defer(keyExtractor, array.toArray(new IStructureElement[0])); } - public static IStructureElementDeferred defer(BiFunction> to) { + public static IStructureElementDeferred defer(BiFunction> to) { if (to == null) { throw new IllegalArgumentException(); } - return new IStructureElementDeferred() { + return new IStructureElementDeferred() { @Override - public boolean check(T t, World world, int x, int y, int z) { - return to.apply(t, null).check(t, world, x, y, z); + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + return to.apply(multiBlock, null).check(multiBlock, world, x, y, z); } @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return to.apply(t, trigger).placeBlock(t, world, x, y, z, trigger); + public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + return to.apply(multiBlock, trigger).placeBlock(multiBlock, world, x, y, z, trigger); } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - return to.apply(t, trigger).spawnHint(t, world, x, y, z, trigger); + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + return to.apply(multiBlock, trigger).spawnHint(multiBlock, world, x, y, z, trigger); } }; } - public static IStructureElementDeferred defer(BiFunction keyExtractor, Map> map) { + public static IStructureElementDeferred defer(BiFunction keyExtractor, Map> map) { if (keyExtractor == null || map == null) { throw new IllegalArgumentException(); } - return new IStructureElementDeferred() { + return new IStructureElementDeferred() { @Override - public boolean check(T t, World world, int x, int y, int z) { - return map.get(keyExtractor.apply(t, null)).check(t, world, x, y, z); + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + return map.get(keyExtractor.apply(multiBlock, null)).check(multiBlock, world, x, y, z); } @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return map.get(keyExtractor.apply(t, trigger)).placeBlock(t, world, x, y, z, trigger); + public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + return map.get(keyExtractor.apply(multiBlock, trigger)).placeBlock(multiBlock, world, x, y, z, trigger); } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - return map.get(keyExtractor.apply(t, trigger)).spawnHint(t, world, x, y, z, trigger); + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + return map.get(keyExtractor.apply(multiBlock, trigger)).spawnHint(multiBlock, world, x, y, z, trigger); } }; } - public static IStructureElementDeferred defer(BiFunction keyExtractor, Map> map, IStructureElement defaultElem) { + public static IStructureElementDeferred defer(BiFunction keyExtractor, Map> map, IStructureElement defaultElem) { if (keyExtractor == null || map == null) { throw new IllegalArgumentException(); } - return new IStructureElementDeferred() { + return new IStructureElementDeferred() { @Override - public boolean check(T t, World world, int x, int y, int z) { - return map.getOrDefault(keyExtractor.apply(t, null), defaultElem).check(t, world, x, y, z); + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + return map.getOrDefault(keyExtractor.apply(multiBlock, null), defaultElem).check(multiBlock, world, x, y, z); } @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return map.getOrDefault(keyExtractor.apply(t, trigger), defaultElem).placeBlock(t, world, x, y, z, trigger); + public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + return map.getOrDefault(keyExtractor.apply(multiBlock, trigger), defaultElem).placeBlock(multiBlock, world, x, y, z, trigger); } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - return map.getOrDefault(keyExtractor.apply(t, trigger), defaultElem).spawnHint(t, world, x, y, z, trigger); + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + return map.getOrDefault(keyExtractor.apply(multiBlock, trigger), defaultElem).spawnHint(multiBlock, world, x, y, z, trigger); } }; } @SafeVarargs - public static IStructureElementDeferred defer(BiFunction keyExtractor, IStructureElement... array) { + public static IStructureElementDeferred defer(BiFunction keyExtractor, IStructureElement... array) { if (keyExtractor == null || array == null) { throw new IllegalArgumentException(); } - return new IStructureElementDeferred() { + return new IStructureElementDeferred() { @Override - public boolean check(T t, World world, int x, int y, int z) { - return array[keyExtractor.apply(t, null)].check(t, world, x, y, z); + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + return array[keyExtractor.apply(multiBlock, null)].check(multiBlock, world, x, y, z); } @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return array[keyExtractor.apply(t, trigger)].placeBlock(t, world, x, y, z, trigger); + public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + return array[keyExtractor.apply(multiBlock, trigger)].placeBlock(multiBlock, world, x, y, z, trigger); } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - return array[keyExtractor.apply(t, trigger)].spawnHint(t, world, x, y, z, trigger); + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + return array[keyExtractor.apply(multiBlock, trigger)].spawnHint(multiBlock, world, x, y, z, trigger); } }; } @SuppressWarnings("unchecked") - public static IStructureElementDeferred defer(BiFunction keyExtractor, List> array) { + public static IStructureElementDeferred defer(BiFunction keyExtractor, List> array) { return defer(keyExtractor, array.toArray(new IStructureElement[0])); } - public static IStructureElementDeferred defer(Function> toCheck, BiFunction> to) { + public static IStructureElementDeferred defer(Function> toCheck, BiFunction> to) { if (to == null) { throw new IllegalArgumentException(); } - return new IStructureElementDeferred() { + return new IStructureElementDeferred() { @Override - public boolean check(T t, World world, int x, int y, int z) { - return toCheck.apply(t).check(t, world, x, y, z); + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + return toCheck.apply(multiBlock).check(multiBlock, world, x, y, z); } @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return to.apply(t, trigger).placeBlock(t, world, x, y, z, trigger); + public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + return to.apply(multiBlock, trigger).placeBlock(multiBlock, world, x, y, z, trigger); } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - return to.apply(t, trigger).spawnHint(t, world, x, y, z, trigger); + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + return to.apply(multiBlock, trigger).spawnHint(multiBlock, world, x, y, z, trigger); } }; } - public static IStructureElementDeferred defer(Function keyExtractorCheck, BiFunction keyExtractor, Map> map) { + public static IStructureElementDeferred defer(Function keyExtractorCheck, BiFunction keyExtractor, Map> map) { if (keyExtractor == null || map == null) { throw new IllegalArgumentException(); } - return new IStructureElementDeferred() { + return new IStructureElementDeferred() { @Override - public boolean check(T t, World world, int x, int y, int z) { - return map.get(keyExtractorCheck.apply(t)).check(t, world, x, y, z); + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + return map.get(keyExtractorCheck.apply(multiBlock)).check(multiBlock, world, x, y, z); } @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return map.get(keyExtractor.apply(t, trigger)).placeBlock(t, world, x, y, z, trigger); + public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + return map.get(keyExtractor.apply(multiBlock, trigger)).placeBlock(multiBlock, world, x, y, z, trigger); } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - return map.get(keyExtractor.apply(t, trigger)).spawnHint(t, world, x, y, z, trigger); + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + return map.get(keyExtractor.apply(multiBlock, trigger)).spawnHint(multiBlock, world, x, y, z, trigger); } }; } - public static IStructureElementDeferred defer(Function keyExtractorCheck, BiFunction keyExtractor, Map> map, IStructureElement defaultElem) { + public static IStructureElementDeferred defer(Function keyExtractorCheck, BiFunction keyExtractor, Map> map, IStructureElement defaultElem) { if (keyExtractor == null || map == null) { throw new IllegalArgumentException(); } - return new IStructureElementDeferred() { + return new IStructureElementDeferred() { @Override - public boolean check(T t, World world, int x, int y, int z) { - return map.getOrDefault(keyExtractorCheck.apply(t), defaultElem).check(t, world, x, y, z); + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + return map.getOrDefault(keyExtractorCheck.apply(multiBlock), defaultElem).check(multiBlock, world, x, y, z); } @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return map.getOrDefault(keyExtractor.apply(t, trigger), defaultElem).placeBlock(t, world, x, y, z, trigger); + public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + return map.getOrDefault(keyExtractor.apply(multiBlock, trigger), defaultElem).placeBlock(multiBlock, world, x, y, z, trigger); } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - return map.getOrDefault(keyExtractor.apply(t, trigger), defaultElem).spawnHint(t, world, x, y, z, trigger); + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + return map.getOrDefault(keyExtractor.apply(multiBlock, trigger), defaultElem).spawnHint(multiBlock, world, x, y, z, trigger); } }; } @SafeVarargs - public static IStructureElementDeferred defer(Function keyExtractorCheck, BiFunction keyExtractor, IStructureElement... array) { + public static IStructureElementDeferred defer(Function keyExtractorCheck, BiFunction keyExtractor, IStructureElement... array) { if (keyExtractor == null || array == null) { throw new IllegalArgumentException(); } - return new IStructureElementDeferred() { + return new IStructureElementDeferred() { @Override - public boolean check(T t, World world, int x, int y, int z) { - return array[keyExtractorCheck.apply(t)].check(t, world, x, y, z); + public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + return array[keyExtractorCheck.apply(multiBlock)].check(multiBlock, world, x, y, z); } @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return array[keyExtractor.apply(t, trigger)].placeBlock(t, world, x, y, z, trigger); + public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + return array[keyExtractor.apply(multiBlock, trigger)].placeBlock(multiBlock, world, x, y, z, trigger); } @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - return array[keyExtractor.apply(t, trigger)].spawnHint(t, world, x, y, z, trigger); + public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + return array[keyExtractor.apply(multiBlock, trigger)].spawnHint(multiBlock, world, x, y, z, trigger); } }; } @SuppressWarnings("unchecked") - public static IStructureElementDeferred defer(Function keyExtractorCheck, BiFunction keyExtractor, List> array) { + public static IStructureElementDeferred defer(Function keyExtractorCheck, BiFunction keyExtractor, List> array) { return defer(keyExtractorCheck, keyExtractor, array.toArray(new IStructureElement[0])); } @@ -1057,10 +1057,10 @@ public class StructureUtility { * @param a * @param b * @param c - * @param + * @param * @return */ - public static IStructureNavigate step(int a, int b, int c) { + public static IStructureNavigate step(int a, int b, int c) { return step(new Vec3Impl(a, b, c)); } @@ -1068,11 +1068,11 @@ public class StructureUtility { * Used internally, to generate skips for structure definitions * * @param step - * @param + * @param * @return */ @SuppressWarnings("unchecked") - public static IStructureNavigate step(Vec3Impl step) { + public static IStructureNavigate step(Vec3Impl step) { if (step == null || step.get0() < 0 || step.get1() < 0 || step.get2() < 0) { throw new IllegalArgumentException(); } @@ -1087,8 +1087,8 @@ public class StructureUtility { }); } - private static IStructureNavigate stepA(int a, int b, int c) { - return new IStructureNavigate() { + private static IStructureNavigate stepA(int a, int b, int c) { + return new IStructureNavigate() { @Override public int getStepA() { return a; @@ -1106,8 +1106,8 @@ public class StructureUtility { }; } - private static IStructureNavigate stepB(int a, int b, int c) { - return new IStructureNavigate() { + private static IStructureNavigate stepB(int a, int b, int c) { + return new IStructureNavigate() { @Override public int getStepA() { return a; @@ -1130,8 +1130,8 @@ public class StructureUtility { }; } - private static IStructureNavigate stepC(int a, int b, int c) { - return new IStructureNavigate() { + private static IStructureNavigate stepC(int a, int b, int c) { + return new IStructureNavigate() { @Override public int getStepA() { return a; @@ -1378,9 +1378,9 @@ public class StructureUtility { } } - public static boolean iterate(T object, + public static boolean iterate(MultiBlock object, ItemStack trigger, - IStructureElement[] elements, + IStructureElement[] elements, World world, ExtendedFacing extendedFacing, int basePositionX, int basePositionY, int basePositionZ, @@ -1400,7 +1400,7 @@ public class StructureUtility { switch (iterationType) { case SPAWN_HINTS: { - for (IStructureElement element : elements) { + for (IStructureElement element : elements) { if (element.isNavigating()) { abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA(); abc[1] = (element.resetB() ? basePositionB : abc[1]) + element.getStepB(); @@ -1419,7 +1419,7 @@ public class StructureUtility { break; } case BUILD_TEMPLATE: { - for (IStructureElement element : elements) { + for (IStructureElement element : elements) { if (element.isNavigating()) { abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA(); abc[1] = (element.resetB() ? basePositionB : abc[1]) + element.getStepB(); @@ -1439,7 +1439,7 @@ public class StructureUtility { break; } case CHECK: { - for (IStructureElement element : elements) { + for (IStructureElement element : elements) { if (element.isNavigating()) { abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA(); abc[1] = (element.resetB() ? basePositionB : abc[1]) + element.getStepB(); @@ -1470,7 +1470,7 @@ public class StructureUtility { } } case CHECK_FULLY: { - for (IStructureElement element : elements) { + for (IStructureElement element : elements) { if (element.isNavigating()) { abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA(); abc[1] = (element.resetB() ? basePositionB : abc[1]) + element.getStepB(); diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IBlockAdder.java b/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IBlockAdder.java index 9d223ccd52..36ebfb3d21 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IBlockAdder.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IBlockAdder.java @@ -10,5 +10,5 @@ public interface IBlockAdder { * @param meta meta of block attempted to add * @return is structure still valid */ - boolean apply(MultiBlock multiBlock, Block block, Integer meta); + boolean apply(MultiBlock multiBlock, Block block, int meta); } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IHatchAdder.java b/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IHatchAdder.java index e7bb5fc459..0545a83d9e 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IHatchAdder.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IHatchAdder.java @@ -10,5 +10,5 @@ public interface IHatchAdder { * @param textureIndex requested texture index, or null if not... * @return managed to add hatch (structure still valid) */ - boolean apply(MultiBlock multiBlock, IGregTechTileEntity iGregTechTileEntity, Short textureIndex); + boolean apply(MultiBlock multiBlock, IGregTechTileEntity iGregTechTileEntity, int textureIndex); } -- cgit From 30097b9cf11fefa9a40eaa19b0fa6d397f42d34d Mon Sep 17 00:00:00 2001 From: bartimaeusnek <33183715+bartimaeusnek@users.noreply.github.com> Date: Tue, 29 Sep 2020 20:45:58 +0200 Subject: removed unused import (#38) --- .../technus/tectech/mechanics/structure/StructureUtility.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java index 2f6998f028..521b0e7645 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java @@ -217,11 +217,11 @@ public class StructureUtility { /** * Allows block duplicates (with different meta) */ - public static IStructureElementNoPlacement ofBlocksMapHint(Map> blocsMap, Block hintBlock, int hintMeta) { + public static IStructureElementNoPlacement ofBlocksMapHint(Map> blocsMap, Block hintBlock, int hintMeta) { if (blocsMap == null || blocsMap.isEmpty() || hintBlock == null) { throw new IllegalArgumentException(); } - for (Set value : blocsMap.values()) { + for (Collection value : blocsMap.values()) { if (value.isEmpty()) { throw new IllegalArgumentException(); } @@ -336,11 +336,11 @@ public class StructureUtility { /** * Allows block duplicates (with different meta) */ - public static IStructureElement ofBlocksMap(Map> blocsMap, Block defaultBlock, int defaultMeta) { + public static IStructureElement ofBlocksMap(Map> blocsMap, Block defaultBlock, int defaultMeta) { if (blocsMap == null || blocsMap.isEmpty() || defaultBlock == null) { throw new IllegalArgumentException(); } - for (Set value : blocsMap.values()) { + for (Collection value : blocsMap.values()) { if (value.isEmpty()) { throw new IllegalArgumentException(); } -- cgit From 474c28ca31043f9b1861e149e79bb540b81f08f5 Mon Sep 17 00:00:00 2001 From: Motias <47714084+MotiasF33@users.noreply.github.com> Date: Fri, 2 Oct 2020 07:02:42 +0300 Subject: fix division by 144 #6649 and ^ required soldering for higher circuits (#39) * fix nanocircuit /144 fluid * divided by 144 molten soldering divided by 144, and it is required a little more than in previous tier recipes Co-authored-by: MotDT <47714084+MotDT@users.noreply.github.com> --- .../tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java index 8047efe5a3..caa307cb86 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java +++ b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java @@ -1079,7 +1079,7 @@ public class DreamCraftRecipeLoader implements Runnable { GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Silicone, 64), GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Polybenzimidazole, 64) }, new FluidStack[]{ - Materials.SolderingAlloy.getMolten(3760L), + Materials.SolderingAlloy.getMolten(3744L), Materials.Naquadria.getMolten(4032L), new FluidStack(FluidRegistry.getFluid("ic2coolant"), 20000) }, getItemContainer("NanoCircuit").get(1L), 8000, 8000000); @@ -1100,7 +1100,7 @@ public class DreamCraftRecipeLoader implements Runnable { GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.Neutronium, 16), GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Lanthanum, 64) }, new FluidStack[]{ - Materials.SolderingAlloy.getMolten(3760L), + Materials.SolderingAlloy.getMolten(4032L), Materials.UUMatter.getFluid(8000L), Materials.Osmium.getMolten(1152L) }, getItemContainer("PikoCircuit").get(1L), 10000, 8000000); @@ -1119,7 +1119,7 @@ public class DreamCraftRecipeLoader implements Runnable { GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Bedrockium, 8), GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Lanthanum, 64) }, new FluidStack[]{ - Materials.SolderingAlloy.getMolten(3760L), + Materials.SolderingAlloy.getMolten(4608L), Materials.UUMatter.getFluid(24000L), Materials.Osmium.getMolten(2304L) }, getItemContainer("QuantumCircuit").get(1L), 20000, 32000000); -- cgit From 9b640643a01ad9835f1baf4ca37cd25c558dfb6f Mon Sep 17 00:00:00 2001 From: Tec Date: Wed, 7 Oct 2020 19:50:28 +0200 Subject: Add getters for translating relative coordinates to world --- .../alignment/enumerable/ExtendedFacing.java | 28 ++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/main/java/com/github/technus/tectech/mechanics/alignment/enumerable/ExtendedFacing.java b/src/main/java/com/github/technus/tectech/mechanics/alignment/enumerable/ExtendedFacing.java index 2a93bcc540..5949b432df 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/alignment/enumerable/ExtendedFacing.java +++ b/src/main/java/com/github/technus/tectech/mechanics/alignment/enumerable/ExtendedFacing.java @@ -128,6 +128,7 @@ public enum ExtendedFacing { private static final Map NAME_LOOKUP = stream(VALUES).collect(toMap(ExtendedFacing::getName2, (extendedFacing) -> extendedFacing)); private final ForgeDirection direction; + private final ForgeDirection a,b,c; private final Rotation rotation; private final Flip flip; @@ -206,6 +207,9 @@ public enum ExtendedFacing { default: throw new RuntimeException("More impossible..."); } + this.a=a; + this.b=b; + this.c=c; integerAxisSwap =new IntegerAxisSwap(a,b,c); } @@ -327,4 +331,28 @@ public enum ExtendedFacing { public IntegerAxisSwap getIntegerAxisSwap() { return integerAxisSwap; } + + public ForgeDirection getRelativeLeftInWorld() { + return a; + } + + public ForgeDirection getRelativeRightInWorld() { + return a.getOpposite(); + } + + public ForgeDirection getRelativeDownInWorld() { + return b; + } + + public ForgeDirection getRelativeUpInWorld() { + return b.getOpposite(); + } + + public ForgeDirection getRelativeBackInWorld() { + return c; + } + + public ForgeDirection getRelativeForwardInWorld() { + return c.getOpposite(); + } } -- cgit From 57d8442bdaab404c06bff3abebd4d962d6512b89 Mon Sep 17 00:00:00 2001 From: Tec Date: Wed, 7 Oct 2020 20:11:34 +0200 Subject: Invalidate machine on rotation --- .../multi/base/GT_MetaTileEntity_MultiblockBase_EM.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java index 9e508f9e7e..9af6d40df7 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java @@ -166,10 +166,11 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt } @Override - public void setExtendedFacing(ExtendedFacing alignment) { - if(extendedFacing!=alignment){ - extendedFacing=alignment; + public void setExtendedFacing(ExtendedFacing newExtendedFacing) { + if(extendedFacing!=newExtendedFacing){ + extendedFacing=newExtendedFacing; IGregTechTileEntity base = getBaseMetaTileEntity(); + mMachine = false; if (getBaseMetaTileEntity().isServerSide()) { NetworkDispatcher.INSTANCE.sendToAllAround(new AlignmentMessage.AlignmentData(this), base.getWorld().provider.dimensionId, -- cgit From f14ea1f84ab07a7fd32fa520ca4fc1e18a1333d5 Mon Sep 17 00:00:00 2001 From: Prometheus0000 Date: Mon, 26 Oct 2020 12:46:12 -0400 Subject: Change FG recipe for UHV and UEV (#40) * Add items for consistancy * Change to nano for consistency * number --- .../tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java index caa307cb86..7ab4a8fab5 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java +++ b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java @@ -928,6 +928,8 @@ public class DreamCraftRecipeLoader implements Runnable { 48000, 64, 200000, 8, new Object[]{ GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.CosmicNeutronium, 1L), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.CosmicNeutronium, 6L), + ItemList.Gravistar.get(4L), + ItemList.Emitter_UHV.get(4L), new Object[]{OrePrefixes.circuit.get(Materials.Bio), 4L}, GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), @@ -947,7 +949,9 @@ public class DreamCraftRecipeLoader implements Runnable { 96000, 128, 400000, 16, new Object[]{ GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1L), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Infinity, 6L), - new Object[]{OrePrefixes.circuit.get(Materials.Bio), 8L}, + ItemList.Gravistar.get(8L), + ItemList.Emitter_UEV.get(4L), + new Object[]{OrePrefixes.circuit.get(Materials.Nano), 4}, GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Tritanium, 64L), GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Tritanium, 64L), GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Tritanium, 64L), -- cgit From 4c06bcafc8eda79369777abb2135397e12f1356a Mon Sep 17 00:00:00 2001 From: basdxz Date: Wed, 4 Nov 2020 04:46:38 +0000 Subject: Remove Cofh Core dep Compiles fine without. --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 9689a82607..d10b7d77df 100644 --- a/build.gradle +++ b/build.gradle @@ -127,7 +127,7 @@ dependencies { compile "micdoodle8.mods:Galacticraft:${config.galacticraft.version}:API" compile "com.mod-buildcraft:buildcraft:${config.buildcraft.version}:dev" //Ivy - compile name: 'CoFHCore', version: config.cofhcore.version, ext: 'jar' + //compile name: 'CoFHCore', version: config.cofhcore.version, ext: 'jar' } task getGregTech(type: Download) { -- cgit From e26a6f058a5e1dcdb4c73b076d9970ec4d731eb7 Mon Sep 17 00:00:00 2001 From: basdxz Date: Wed, 4 Nov 2020 08:32:25 +0000 Subject: Add the COFH Core Dep back as runtime Needed for Thaum stuff --- build.gradle | 14 +++++++++++--- build.properties | 3 ++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index d10b7d77df..ca8da27742 100644 --- a/build.gradle +++ b/build.gradle @@ -97,10 +97,14 @@ repositories { name "Tterrag maven" url "https://maven.tterrag.com/" } - ivy { //CoFHCore - name 'gtnh_download_source' - artifactPattern "http://downloads.gtnewhorizons.com/Mods_for_Jenkins/[module]-[revision].[ext]" + maven { + name = "Curse Maven" + url = "https://www.cursemaven.com" } + //ivy { //CoFHCore + // name 'gtnh_download_source' + // artifactPattern "http://downloads.gtnewhorizons.com/Mods_for_Jenkins/[module]-[revision].[ext]" + //} } dependencies { @@ -126,8 +130,12 @@ dependencies { compile "micdoodle8.mods:Galacticraft-Planets:${config.galacticraft.version}:Dev" compile "micdoodle8.mods:Galacticraft:${config.galacticraft.version}:API" compile "com.mod-buildcraft:buildcraft:${config.buildcraft.version}:dev" + + //TODO Re-work the formatting and add documentation + runtime "curse.maven:cofh-core:${config.cofh_core_version}" //Ivy //compile name: 'CoFHCore', version: config.cofhcore.version, ext: 'jar' + } task getGregTech(type: Download) { diff --git a/build.properties b/build.properties index be76171615..d0ee72aeac 100644 --- a/build.properties +++ b/build.properties @@ -8,7 +8,8 @@ codechickencore.version=1.0.7.47 nei.version=1.0.5.120 gregtech.jenkinsbuild=648 gregtech.version=5.09.33.52 -cofhcore.version=[1.7.10]3.1.4-329-dev +#cofhcore.version=[1.7.10]3.1.4-329-dev +cofh_core_version=2388751 yamcore.version=0.5.79 baubles.version=1.0.1.10 thaumcraft.version=4.2.3.5 -- cgit From dac069de4ba59e14833d7c661f4c8ff5722abc84 Mon Sep 17 00:00:00 2001 From: basdxz Date: Wed, 4 Nov 2020 08:32:46 +0000 Subject: Fix disconnect on Tesla Lightning Now properly getting the world from player --- .../technus/tectech/mechanics/spark/RendererMessage.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/mechanics/spark/RendererMessage.java b/src/main/java/com/github/technus/tectech/mechanics/spark/RendererMessage.java index f2fd17817d..58caed7951 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/spark/RendererMessage.java +++ b/src/main/java/com/github/technus/tectech/mechanics/spark/RendererMessage.java @@ -5,6 +5,7 @@ import cpw.mods.fml.common.network.simpleimpl.IMessage; import cpw.mods.fml.common.network.simpleimpl.MessageContext; import eu.usrv.yamcore.network.client.AbstractClientMessageHandler; import io.netty.buffer.ByteBuf; +import net.minecraft.client.Minecraft; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.world.World; import net.minecraftforge.common.DimensionManager; @@ -71,12 +72,14 @@ public class RendererMessage implements IMessage { private static void thaumLightning(int tX, int tY, int tZ, int tXN, int tYN, int tZN, int wID) { //This is enough to check for thaum, since it only ever matters for client side effects (Tested not to crash) if (Loader.isModLoaded("Thaumcraft")) { - World world = DimensionManager.getWorld(wID); - FXLightningBolt bolt = new FXLightningBolt(world, tX + 0.5F, tY + 0.5F, tZ + 0.5F, tX + tXN + 0.5F, tY + tYN + 0.5F, tZ + tZN + 0.5F, world.rand.nextLong(), 6, 0.5F, 8); - bolt.defaultFractal(); - bolt.setType(2); - bolt.setWidth(0.125F); - bolt.finalizeBolt(); + World world = Minecraft.getMinecraft().theWorld; + if (world.provider.dimensionId == wID){ + FXLightningBolt bolt = new FXLightningBolt(world, tX + 0.5F, tY + 0.5F, tZ + 0.5F, tX + tXN + 0.5F, tY + tYN + 0.5F, tZ + tZN + 0.5F, world.rand.nextLong(), 6, 0.5F, 8); + bolt.defaultFractal(); + bolt.setType(2); + bolt.setWidth(0.125F); + bolt.finalizeBolt(); + } } } } \ No newline at end of file -- cgit From 8bed7d36a5e0574015395b64e8f9d3d59d3cb9f8 Mon Sep 17 00:00:00 2001 From: basdxz Date: Wed, 4 Nov 2020 09:03:34 +0000 Subject: Fixes ConcurrentModificationException on Tesla Connected Cleaning Now just removes nulls if any --- .../technus/tectech/mechanics/tesla/ITeslaConnectable.java | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java b/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java index 07ecc4bc31..e397c1dc5f 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java +++ b/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java @@ -4,14 +4,14 @@ import com.github.technus.tectech.mechanics.spark.ThaumSpark; import java.util.HashMap; import java.util.HashSet; -import java.util.Map; +import java.util.Objects; import static com.github.technus.tectech.util.Util.entriesSortedByValues; import static java.lang.Math.sqrt; public interface ITeslaConnectable extends ITeslaConnectableSimple { //Map with all Teslas in the same dimension and the distance to them //TODO Range - Map teslaNodeMap = new HashMap<>(); + HashMap teslaNodeMap = new HashMap<>(); //ThaumCraft lighting coordinate pairs, so we can send them in bursts and save on lag HashSet sparkList = new HashSet<>(); @@ -64,12 +64,8 @@ public interface ITeslaConnectable extends ITeslaConnectableSimple { } public static void cleanTeslaNodeMap(ITeslaConnectable origin) { - //TODO Do we still need this? - for (ITeslaConnectableSimple target : origin.teslaNodeMap.keySet()) { - if (target == null) { - origin.teslaNodeMap.remove(null); - } - } + //Wipes all null objects, in practice this is unloaded or improperly removed tesla objects + origin.teslaNodeMap.keySet().removeIf(Objects::isNull); } public static long powerTeslaNodeMap(ITeslaConnectable origin) { @@ -80,7 +76,7 @@ public interface ITeslaConnectable extends ITeslaConnectableSimple { long remainingAmperes = origin.getTeslaOutputCurrent(); while (remainingAmperes > 0) { long startingAmperes = remainingAmperes; - for (Map.Entry Rx : entriesSortedByValues(teslaNodeMap)) { + for (HashMap.Entry Rx : entriesSortedByValues(teslaNodeMap)) { if (origin.getTeslaStoredEnergy() < (origin.isOverdriveEnabled() ? origin.getTeslaOutputVoltage() * 2 : origin.getTeslaOutputVoltage())) { //Return and end the tick if we're out of energy to send return origin.getTeslaOutputCurrent() - remainingAmperes; -- cgit From 5de583bf34003095ff286aa132aa0e005020cab7 Mon Sep 17 00:00:00 2001 From: basdxz Date: Wed, 4 Nov 2020 09:06:13 +0000 Subject: Revert "Merge branch 'master' into BassAddons" This reverts commit 95993fb3d937b8dcfc9c945c18a754ce4ac11f88. --- .../dreamcraft/DreamCraftRecipeLoader.java | 12 +- .../mechanics/structure/IStructureDefinition.java | 146 ++++- .../mechanics/structure/IStructureElement.java | 8 +- .../structure/IStructureElementChain.java | 22 +- .../structure/IStructureElementCheckOnly.java | 6 +- .../structure/IStructureElementDeferred.java | 2 +- .../structure/IStructureElementNoPlacement.java | 4 +- .../mechanics/structure/IStructureNavigate.java | 8 +- .../mechanics/structure/StructureDefinition.java | 50 +- .../structure/StructureIterationType.java | 8 - .../mechanics/structure/StructureUtility.java | 646 ++++++++------------- .../mechanics/structure/adders/IBlockAdder.java | 4 +- .../mechanics/structure/adders/IHatchAdder.java | 6 +- .../mechanics/structure/adders/ITileAdder.java | 4 +- .../java/com/github/technus/tectech/util/Util.java | 1 + 15 files changed, 453 insertions(+), 474 deletions(-) delete mode 100644 src/main/java/com/github/technus/tectech/mechanics/structure/StructureIterationType.java diff --git a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java index d58a6e7686..df5c11e67b 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java +++ b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java @@ -933,8 +933,6 @@ public class DreamCraftRecipeLoader implements Runnable { 48000, 64, 200000, 8, new Object[]{ GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.CosmicNeutronium, 1L), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.CosmicNeutronium, 6L), - ItemList.Gravistar.get(4L), - ItemList.Emitter_UHV.get(4L), new Object[]{OrePrefixes.circuit.get(Materials.Bio), 4L}, GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), @@ -954,9 +952,7 @@ public class DreamCraftRecipeLoader implements Runnable { 96000, 128, 400000, 16, new Object[]{ GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1L), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Infinity, 6L), - ItemList.Gravistar.get(8L), - ItemList.Emitter_UEV.get(4L), - new Object[]{OrePrefixes.circuit.get(Materials.Nano), 4}, + new Object[]{OrePrefixes.circuit.get(Materials.Bio), 8L}, GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Tritanium, 64L), GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Tritanium, 64L), GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Tritanium, 64L), @@ -1088,7 +1084,7 @@ public class DreamCraftRecipeLoader implements Runnable { GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Silicone, 64), GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Polybenzimidazole, 64) }, new FluidStack[]{ - Materials.SolderingAlloy.getMolten(3744L), + Materials.SolderingAlloy.getMolten(3760L), Materials.Naquadria.getMolten(4032L), new FluidStack(FluidRegistry.getFluid("ic2coolant"), 20000) }, getItemContainer("NanoCircuit").get(1L), 8000, 8000000); @@ -1109,7 +1105,7 @@ public class DreamCraftRecipeLoader implements Runnable { GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.Neutronium, 16), GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Lanthanum, 64) }, new FluidStack[]{ - Materials.SolderingAlloy.getMolten(4032L), + Materials.SolderingAlloy.getMolten(3760L), Materials.UUMatter.getFluid(8000L), Materials.Osmium.getMolten(1152L) }, getItemContainer("PikoCircuit").get(1L), 10000, 8000000); @@ -1128,7 +1124,7 @@ public class DreamCraftRecipeLoader implements Runnable { GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Bedrockium, 8), GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Lanthanum, 64) }, new FluidStack[]{ - Materials.SolderingAlloy.getMolten(4608L), + Materials.SolderingAlloy.getMolten(3760L), Materials.UUMatter.getFluid(24000L), Materials.Osmium.getMolten(2304L) }, getItemContainer("QuantumCircuit").get(1L), 20000, 32000000); diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java index ca9712df04..c8488d5cea 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureDefinition.java @@ -1,47 +1,167 @@ package com.github.technus.tectech.mechanics.structure; +import com.github.technus.tectech.TecTech; import com.github.technus.tectech.mechanics.alignment.enumerable.ExtendedFacing; import net.minecraft.item.ItemStack; import net.minecraft.world.World; -import static com.github.technus.tectech.mechanics.structure.StructureIterationType.*; -import static com.github.technus.tectech.mechanics.structure.StructureUtility.iterate; +import java.util.Arrays; -public interface IStructureDefinition { +import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; + +public interface IStructureDefinition { /** * Used internally * @param name same name as for other methods here * @return the array of elements to process */ - IStructureElement[] getStructureFor(String name); + IStructureElement[] getStructureFor(String name); - default boolean check(MultiBlock object, String piece, World world, ExtendedFacing extendedFacing, + default boolean check(T object,String piece, World world, ExtendedFacing extendedFacing, int basePositionX, int basePositionY, int basePositionZ, int basePositionA, int basePositionB, int basePositionC, boolean forceCheckAllBlocks){ return iterate(object, null, getStructureFor(piece), world, extendedFacing, basePositionX, basePositionY, basePositionZ, - basePositionA, basePositionB, basePositionC,forceCheckAllBlocks? CHECK_FULLY:CHECK); + basePositionA, basePositionB, basePositionC,false,forceCheckAllBlocks); } - default boolean hints(MultiBlock object, ItemStack trigger, String piece, World world, ExtendedFacing extendedFacing, + default boolean hints(T object, ItemStack trigger,String piece, World world, ExtendedFacing extendedFacing, int basePositionX, int basePositionY, int basePositionZ, int basePositionA, int basePositionB, int basePositionC) { return iterate(object, trigger, getStructureFor(piece), world, extendedFacing, basePositionX, basePositionY, basePositionZ, - basePositionA, basePositionB, basePositionC,SPAWN_HINTS); + basePositionA, basePositionB, basePositionC,true,null); } - default boolean build(MultiBlock object, ItemStack trigger, String piece, World world, ExtendedFacing extendedFacing, + default boolean build(T object, ItemStack trigger,String piece, World world, ExtendedFacing extendedFacing, int basePositionX, int basePositionY, int basePositionZ, int basePositionA, int basePositionB, int basePositionC) { return iterate(object, trigger, getStructureFor(piece), world, extendedFacing, basePositionX, basePositionY, basePositionZ, - basePositionA, basePositionB, basePositionC,BUILD_TEMPLATE); + basePositionA, basePositionB, basePositionC,false,null); } - default boolean buildOrHints(MultiBlock object, ItemStack trigger, String piece, World world, ExtendedFacing extendedFacing, + default boolean buildOrHints(T object, ItemStack trigger,String piece, World world, ExtendedFacing extendedFacing, int basePositionX, int basePositionY, int basePositionZ, int basePositionA, int basePositionB, int basePositionC, - boolean hints){ + boolean hintsOnly){ return iterate(object, trigger, getStructureFor(piece), world, extendedFacing, basePositionX, basePositionY, basePositionZ, - basePositionA, basePositionB, basePositionC,hints?SPAWN_HINTS:BUILD_TEMPLATE); + basePositionA, basePositionB, basePositionC,hintsOnly,null); + } + + static boolean iterate(T object, ItemStack trigger, IStructureElement[] elements, World world, ExtendedFacing extendedFacing, + int basePositionX, int basePositionY, int basePositionZ, + int basePositionA, int basePositionB, int basePositionC, + boolean hintsOnly, Boolean checkBlocksIfNotNullForceCheckAllIfTrue){ + if(world.isRemote ^ hintsOnly){ + return false; + } + + //change base position to base offset + basePositionA=-basePositionA; + basePositionB=-basePositionB; + basePositionC=-basePositionC; + + int[] abc = new int[]{basePositionA,basePositionB,basePositionC}; + int[] xyz = new int[3]; + + if(checkBlocksIfNotNullForceCheckAllIfTrue!=null){ + if(checkBlocksIfNotNullForceCheckAllIfTrue){ + for (IStructureElement element : elements) { + if(element.isNavigating()) { + abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA(); + abc[1] = (element.resetB() ? basePositionB : abc[1]) + element.getStepB(); + abc[2] = (element.resetC() ? basePositionC : abc[2]) + element.getStepC(); + }else { + extendedFacing.getWorldOffset(abc, xyz); + xyz[0] += basePositionX; + xyz[1] += basePositionY; + xyz[2] += basePositionZ; + + if (world.blockExists(xyz[0], xyz[1], xyz[2])) { + if(!element.check(object, world, xyz[0], xyz[1], xyz[2])){ + if(DEBUG_MODE){ + TecTech.LOGGER.info("Multi ["+basePositionX+", "+basePositionY+", "+basePositionZ+"] failed @ "+ + Arrays.toString(xyz)+" "+Arrays.toString(abc)); + } + return false; + } + } else { + if(DEBUG_MODE){ + TecTech.LOGGER.info("Multi ["+basePositionX+", "+basePositionY+", "+basePositionZ+"] !blockExists @ "+ + Arrays.toString(xyz)+" "+Arrays.toString(abc)); + } + return false; + } + abc[0]+=1; + } + } + } else { + for (IStructureElement element : elements) { + if(element.isNavigating()) { + abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA(); + abc[1] = (element.resetB() ? basePositionB : abc[1]) + element.getStepB(); + abc[2] = (element.resetC() ? basePositionC : abc[2]) + element.getStepC(); + }else { + extendedFacing.getWorldOffset(abc, xyz); + xyz[0] += basePositionX; + xyz[1] += basePositionY; + xyz[2] += basePositionZ; + + if (world.blockExists(xyz[0], xyz[1], xyz[2])) { + if(!element.check(object, world, xyz[0], xyz[1], xyz[2])){ + if(DEBUG_MODE){ + TecTech.LOGGER.info("Multi ["+basePositionX+", "+basePositionY+", "+basePositionZ+"] failed @ "+ + Arrays.toString(xyz)+" "+Arrays.toString(abc)); + } + return false; + } + } else { + if(DEBUG_MODE){ + TecTech.LOGGER.info("Multi ["+basePositionX+", "+basePositionY+", "+basePositionZ+"] !blockExists @ "+ + Arrays.toString(xyz)+" "+Arrays.toString(abc)); + } + } + abc[0]+=1; + } + } + } + }else { + if(hintsOnly) { + for (IStructureElement element : elements) { + if(element.isNavigating()) { + abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA(); + abc[1] = (element.resetB() ? basePositionB : abc[1]) + element.getStepB(); + abc[2] = (element.resetC() ? basePositionC : abc[2]) + element.getStepC(); + }else { + extendedFacing.getWorldOffset(abc, xyz); + xyz[0] += basePositionX; + xyz[1] += basePositionY; + xyz[2] += basePositionZ; + + element.spawnHint(object, world, xyz[0], xyz[1], xyz[2], trigger); + + abc[0]+=1; + } + } + } else { + for (IStructureElement element : elements) { + if(element.isNavigating()) { + abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA(); + abc[1] = (element.resetB() ? basePositionB : abc[1]) + element.getStepB(); + abc[2] = (element.resetC() ? basePositionC : abc[2]) + element.getStepC(); + }else { + extendedFacing.getWorldOffset(abc, xyz); + xyz[0] += basePositionX; + xyz[1] += basePositionY; + xyz[2] += basePositionZ; + + if (world.blockExists(xyz[0], xyz[1], xyz[2])) { + element.placeBlock(object, world, xyz[0], xyz[1], xyz[2], trigger); + } + abc[0]+=1; + } + } + } + } + return true; } } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java index 436c7ce203..f946e71f91 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElement.java @@ -6,12 +6,12 @@ import net.minecraft.world.World; /** * Use StructureUtility to instantiate */ -public interface IStructureElement { - boolean check(MultiBlock multiBlock, World world, int x, int y, int z); +public interface IStructureElement { + boolean check(T t,World world,int x,int y,int z); - boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger); + boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger); - boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger); + boolean placeBlock(T t,World world,int x,int y,int z, ItemStack trigger); default int getStepA(){ return 1; diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementChain.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementChain.java index 4c7059dd81..f9593ee1c5 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementChain.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementChain.java @@ -6,13 +6,13 @@ import net.minecraft.world.World; /** * Use StructureUtility to instantiate */ -public interface IStructureElementChain extends IStructureElement { - IStructureElement[] fallbacks(); +public interface IStructureElementChain extends IStructureElement { + IStructureElement[] fallbacks(); @Override - default boolean check(MultiBlock multiBlock, World world, int x, int y, int z){ - for (IStructureElement fallback : fallbacks()) { - if (fallback.check(multiBlock, world, x, y, z)) { + default boolean check(T t, World world, int x, int y, int z){ + for (IStructureElement fallback : fallbacks()) { + if (fallback.check(t, world, x, y, z)) { return true; } } @@ -20,9 +20,9 @@ public interface IStructureElementChain extends IStructureElement fallback : fallbacks()) { - if (fallback.spawnHint(multiBlock, world, x, y, z, trigger)) { + default boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + for (IStructureElement fallback : fallbacks()) { + if (fallback.spawnHint(t, world, x, y, z, trigger)) { return true; } } @@ -30,9 +30,9 @@ public interface IStructureElementChain extends IStructureElement fallback : fallbacks()) { - if (fallback.placeBlock(multiBlock, world, x, y, z, trigger)) { + default boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + for (IStructureElement fallback : fallbacks()) { + if (fallback.placeBlock(t, world, x, y, z, trigger)) { return true; } } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementCheckOnly.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementCheckOnly.java index c6492a5ed6..ec15aea53b 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementCheckOnly.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementCheckOnly.java @@ -3,14 +3,14 @@ package com.github.technus.tectech.mechanics.structure; import net.minecraft.item.ItemStack; import net.minecraft.world.World; -public interface IStructureElementCheckOnly extends IStructureElement { +public interface IStructureElementCheckOnly extends IStructureElement { @Override - default boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger){ + default boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger){ return false; } @Override - default boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger){ + default boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger){ return false; } } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementDeferred.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementDeferred.java index c0e39bb2ad..dbb74312a8 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementDeferred.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementDeferred.java @@ -3,5 +3,5 @@ package com.github.technus.tectech.mechanics.structure; /** * Use StructureUtility to instantiate */ -public interface IStructureElementDeferred extends IStructureElement { +public interface IStructureElementDeferred extends IStructureElement { } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementNoPlacement.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementNoPlacement.java index 12cf2141ae..47e6060878 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementNoPlacement.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureElementNoPlacement.java @@ -3,9 +3,9 @@ package com.github.technus.tectech.mechanics.structure; import net.minecraft.item.ItemStack; import net.minecraft.world.World; -public interface IStructureElementNoPlacement extends IStructureElement { +public interface IStructureElementNoPlacement extends IStructureElement { @Override - default boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger){ + default boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger){ return false; } } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureNavigate.java b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureNavigate.java index 8c7c837a94..d3f4134cea 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureNavigate.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/IStructureNavigate.java @@ -6,19 +6,19 @@ import net.minecraft.world.World; /** * Use StructureUtility to instantiate */ -interface IStructureNavigate extends IStructureElement { +interface IStructureNavigate extends IStructureElement { @Override - default boolean check(MultiBlock multiBlock, World world, int x, int y, int z){ + default boolean check(T t, World world, int x, int y, int z){ return true; } @Override - default boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + default boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { return true; } @Override - default boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + default boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { return true; } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java index f42cbd35d1..9a1e94d98a 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureDefinition.java @@ -7,31 +7,31 @@ import java.util.*; import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; import static com.github.technus.tectech.mechanics.structure.StructureUtility.*; -public class StructureDefinition implements IStructureDefinition { - private final Map> elements; +public class StructureDefinition implements IStructureDefinition { + private final Map> elements; private final Map shapes; - private final Map[]> structures; + private final Map[]> structures; - public static Builder builder() { + public static Builder builder() { return new Builder<>(); } private StructureDefinition( - Map> elements, + Map> elements, Map shapes, - Map[]> structures) { + Map[]> structures) { this.elements =elements; this.shapes=shapes; this.structures = structures; } - public static class Builder { + public static class Builder { private static final char A='\uA000'; private static final char B='\uB000'; private static final char C='\uC000'; private char d ='\uD000'; private final Map navigates; - private final Map> elements; + private final Map> elements; private final Map shapes; private Builder() { @@ -40,7 +40,7 @@ public class StructureDefinition implements IStructureDefinition(); } - public Map> getElements() { + public Map> getElements() { return elements; } @@ -57,7 +57,7 @@ public class StructureDefinition implements IStructureDefinition addShapeOldApi(String name, String[][] structurePiece) { + public Builder addShapeOldApi(String name, String[][] structurePiece) { StringBuilder builder = new StringBuilder(); if (structurePiece.length > 0) { for (String[] strings : structurePiece) { @@ -142,7 +142,7 @@ public class StructureDefinition implements IStructureDefinition addShape(String name, String[][] structurePiece) { + public Builder addShape(String name, String[][] structurePiece) { StringBuilder builder = new StringBuilder(); if (structurePiece.length > 0) { for (String[] strings : structurePiece) { @@ -199,13 +199,13 @@ public class StructureDefinition implements IStructureDefinition addElement(Character name, IStructureElement structurePiece) { + public Builder addElement(Character name, IStructureElement structurePiece) { elements.putIfAbsent(name, structurePiece); return this; } - public IStructureDefinition build() { - Map[]> structures = compileStructureMap(); + public IStructureDefinition build() { + Map[]> structures = compileStructureMap(); if(DEBUG_MODE){ return new StructureDefinition<>(new HashMap<>(elements), new HashMap<>(shapes), structures); }else { @@ -214,22 +214,22 @@ public class StructureDefinition implements IStructureDefinition[]> compileElementSetMap() { + private Map[]> compileElementSetMap() { Set missing = new HashSet<>(); shapes.values().stream().map(CharSequence::chars).forEach(intStream -> intStream.forEach(c -> { - IStructureElement iStructureElement = elements.get((char) c); + IStructureElement iStructureElement = elements.get((char) c); if (iStructureElement == null) { missing.add(c); } })); if (missing.isEmpty()) { - Map[]> map = new HashMap<>(); + Map[]> map = new HashMap<>(); shapes.forEach((key, value) -> { Set chars=new HashSet<>(); for (char c : value.toCharArray()) { chars.add(c); } - IStructureElement[] compiled = new IStructureElement[chars.size()]; + IStructureElement[] compiled = new IStructureElement[chars.size()]; int i=0; for (Character aChar : chars) { compiled[i++]=elements.get(aChar); @@ -244,18 +244,18 @@ public class StructureDefinition implements IStructureDefinition[]> compileStructureMap() { + private Map[]> compileStructureMap() { Set mising = new HashSet<>(); shapes.values().stream().map(CharSequence::chars).forEach(intStream -> intStream.forEach(c -> { - IStructureElement iStructureElement = elements.get((char) c); + IStructureElement iStructureElement = elements.get((char) c); if (iStructureElement == null) { mising.add(c); } })); if (mising.isEmpty()) { - Map[]> map = new HashMap<>(); + Map[]> map = new HashMap<>(); shapes.forEach((key, value) -> { - IStructureElement[] compiled = new IStructureElement[value.length()]; + IStructureElement[] compiled = new IStructureElement[value.length()]; for (int i = 0; i < value.length(); i++) { compiled[i] = elements.get(value.charAt(i)); } @@ -269,7 +269,7 @@ public class StructureDefinition implements IStructureDefinition> getElements(){ + public Map> getElements(){ return elements; } @@ -277,12 +277,12 @@ public class StructureDefinition implements IStructureDefinition[]> getStructures() { + public Map[]> getStructures() { return structures; } @Override - public IStructureElement[] getStructureFor(String name) { + public IStructureElement[] getStructureFor(String name) { return structures.get(name); } } \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureIterationType.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureIterationType.java deleted file mode 100644 index 618c07f970..0000000000 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureIterationType.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.github.technus.tectech.mechanics.structure; - -public enum StructureIterationType { - SPAWN_HINTS, //only spawn hint particles - BUILD_TEMPLATE, //only builds template - CHECK, //checks the structure skipping all unloaded chunks (for machines that were validated already) - CHECK_FULLY, //checks the structure failing on unloaded chunks (for machines that are not valid currently) -} diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java index 87ab275d39..521b0e7645 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/StructureUtility.java @@ -22,8 +22,6 @@ import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; -import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; -import static com.github.technus.tectech.mechanics.structure.StructureIterationType.SPAWN_HINTS; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sHintCasingsTT; import static java.lang.Integer.MIN_VALUE; @@ -39,18 +37,18 @@ public class StructureUtility { @SuppressWarnings("rawtypes") private static final IStructureElement AIR = new IStructureElement() { @Override - public boolean check(Object multiBlock, World world, int x, int y, int z) { + public boolean check(Object t, World world, int x, int y, int z) { return world.getBlock(x, y, z).getMaterial() == Material.air; } @Override - public boolean spawnHint(Object multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(Object o, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, sHintCasingsTT, 13); return true; } @Override - public boolean placeBlock(Object multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean placeBlock(Object o, World world, int x, int y, int z, ItemStack trigger) { world.setBlock(x, y, z, Blocks.air, 0, 2); return false; } @@ -58,18 +56,18 @@ public class StructureUtility { @SuppressWarnings("rawtypes") private static final IStructureElement NOT_AIR = new IStructureElement() { @Override - public boolean check(Object multiBlock, World world, int x, int y, int z) { + public boolean check(Object t, World world, int x, int y, int z) { return world.getBlock(x, y, z).getMaterial() != Material.air; } @Override - public boolean spawnHint(Object multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(Object o, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, sHintCasingsTT, 14); return true; } @Override - public boolean placeBlock(Object multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean placeBlock(Object o, World world, int x, int y, int z, ItemStack trigger) { world.setBlock(x, y, z, sHintCasingsTT, 14, 2); return true; } @@ -77,18 +75,18 @@ public class StructureUtility { @SuppressWarnings("rawtypes") private static final IStructureElement ERROR = new IStructureElement() { @Override - public boolean check(Object multiBlock, World world, int x, int y, int z) { + public boolean check(Object t, World world, int x, int y, int z) { return false; } @Override - public boolean spawnHint(Object multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(Object o, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, sHintCasingsTT, 15); return true; } @Override - public boolean placeBlock(Object multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean placeBlock(Object o, World world, int x, int y, int z, ItemStack trigger) { return true; } }; @@ -98,12 +96,12 @@ public class StructureUtility { } @SuppressWarnings("unchecked") - public static IStructureElement isAir() { + public static IStructureElement isAir() { return AIR; } @SuppressWarnings("unchecked") - public static IStructureElement notAir() { + public static IStructureElement notAir() { return NOT_AIR; } @@ -112,11 +110,11 @@ public class StructureUtility { * Placement is always handled by this and does nothing. * Makes little to no use it in fallback chain. * - * @param + * @param * @return */ @SuppressWarnings("unchecked") - public static IStructureElement error() { + public static IStructureElement error() { return ERROR; } @@ -126,19 +124,19 @@ public class StructureUtility { * Check always returns: true. * * @param dots - * @param + * @param * @return */ - public static IStructureElementNoPlacement ofHint(int dots) { + public static IStructureElementNoPlacement ofHint(int dots) { int meta = dots - 1; - return new IStructureElementNoPlacement() { + return new IStructureElementNoPlacement() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + public boolean check(T t, World world, int x, int y, int z) { return true; } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, sHintCasingsTT, meta); return false; } @@ -149,18 +147,18 @@ public class StructureUtility { * Check always returns: true. * * @param icons - * @param + * @param * @return */ - public static IStructureElementNoPlacement ofHintDeferred(Supplier icons) { - return new IStructureElementNoPlacement() { + public static IStructureElementNoPlacement ofHintDeferred(Supplier icons) { + return new IStructureElementNoPlacement() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + public boolean check(T t, World world, int x, int y, int z) { return true; } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, icons.get()); return false; } @@ -172,18 +170,18 @@ public class StructureUtility { * * @param icons * @param RGBa - * @param + * @param * @return */ - public static IStructureElementNoPlacement ofHintDeferred(Supplier icons, short[] RGBa) { - return new IStructureElementNoPlacement() { + public static IStructureElementNoPlacement ofHintDeferred(Supplier icons, short[] RGBa) { + return new IStructureElementNoPlacement() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + public boolean check(T t, World world, int x, int y, int z) { return true; } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle_tinted(world, x, y, z, icons.get(), RGBa); return false; } @@ -197,19 +195,19 @@ public class StructureUtility { /** * Does not allow Block duplicates (with different meta) */ - public static IStructureElementNoPlacement ofBlocksFlatHint(Map blocsMap, Block hintBlock, int hintMeta) { + public static IStructureElementNoPlacement ofBlocksFlatHint(Map blocsMap, Block hintBlock, int hintMeta) { if (blocsMap == null || blocsMap.isEmpty() || hintBlock == null) { throw new IllegalArgumentException(); } - return new IStructureElementNoPlacement() { + return new IStructureElementNoPlacement() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + public boolean check(T t, World world, int x, int y, int z) { Block worldBlock = world.getBlock(x, y, z); return blocsMap.getOrDefault(worldBlock, MIN_VALUE) == worldBlock.getDamageValue(world, x, y, z); } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, hintBlock, hintMeta); return true; } @@ -228,57 +226,57 @@ public class StructureUtility { throw new IllegalArgumentException(); } } - return new IStructureElementNoPlacement() { + return new IStructureElementNoPlacement() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + public boolean check(T t, World world, int x, int y, int z) { Block worldBlock = world.getBlock(x, y, z); return blocsMap.getOrDefault(worldBlock, Collections.emptySet()).contains(worldBlock.getDamageValue(world, x, y, z)); } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, hintBlock, hintMeta); return true; } }; } - public static IStructureElementNoPlacement ofBlockHint(Block block, int meta, Block hintBlock, int hintMeta) { + public static IStructureElementNoPlacement ofBlockHint(Block block, int meta, Block hintBlock, int hintMeta) { if (block == null || hintBlock == null) { throw new IllegalArgumentException(); } - return new IStructureElementNoPlacement() { + return new IStructureElementNoPlacement() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + public boolean check(T t, World world, int x, int y, int z) { Block worldBlock = world.getBlock(x, y, z); return block == worldBlock && meta == worldBlock.getDamageValue(world, x, y, z); } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, hintBlock, hintMeta); return true; } }; } - public static IStructureElementNoPlacement ofBlockHint(Block block, int meta) { + public static IStructureElementNoPlacement ofBlockHint(Block block, int meta) { return ofBlockHint(block, meta, block, meta); } - public static IStructureElementNoPlacement ofBlockAdderHint(IBlockAdder iBlockAdder, Block hintBlock, int hintMeta) { + public static IStructureElementNoPlacement ofBlockAdderHint(IBlockAdder iBlockAdder, Block hintBlock, int hintMeta) { if (iBlockAdder == null || hintBlock == null) { throw new IllegalArgumentException(); } - return new IStructureElementNoPlacement() { + return new IStructureElementNoPlacement() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + public boolean check(T t, World world, int x, int y, int z) { Block worldBlock = world.getBlock(x, y, z); - return iBlockAdder.apply(multiBlock, worldBlock, worldBlock.getDamageValue(world, x, y, z)); + return iBlockAdder.apply(t, worldBlock, worldBlock.getDamageValue(world, x, y, z)); } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, hintBlock, hintMeta); return true; } @@ -288,46 +286,46 @@ public class StructureUtility { /** * Does not allow Block duplicates (with different meta) */ - public static IStructureElement ofBlocksFlat(Map blocsMap, Block defaultBlock, int defaultMeta) { + public static IStructureElement ofBlocksFlat(Map blocsMap, Block defaultBlock, int defaultMeta) { if (blocsMap == null || blocsMap.isEmpty() || defaultBlock == null) { throw new IllegalArgumentException(); } if(defaultBlock instanceof ICustomBlockSetting){ - return new IStructureElement() { + return new IStructureElement() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + public boolean check(T t, World world, int x, int y, int z) { Block worldBlock = world.getBlock(x, y, z); return blocsMap.getOrDefault(worldBlock, MIN_VALUE) == worldBlock.getDamageValue(world, x, y, z); } @Override - public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { ((ICustomBlockSetting) defaultBlock).setBlock(world, x, y, z, defaultMeta); return true; } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); return true; } }; }else { - return new IStructureElement() { + return new IStructureElement() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + public boolean check(T t, World world, int x, int y, int z) { Block worldBlock = world.getBlock(x, y, z); return blocsMap.getOrDefault(worldBlock, MIN_VALUE) == worldBlock.getDamageValue(world, x, y, z); } @Override - public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { world.setBlock(x, y, z, defaultBlock, defaultMeta, 2); return true; } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); return true; } @@ -348,41 +346,41 @@ public class StructureUtility { } } if(defaultBlock instanceof ICustomBlockSetting){ - return new IStructureElement() { + return new IStructureElement() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + public boolean check(T t, World world, int x, int y, int z) { Block worldBlock = world.getBlock(x, y, z); return blocsMap.getOrDefault(worldBlock, Collections.emptySet()).contains(worldBlock.getDamageValue(world, x, y, z)); } @Override - public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { ((ICustomBlockSetting) defaultBlock).setBlock(world, x, y, z, defaultMeta); return true; } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); return true; } }; }else { - return new IStructureElement() { + return new IStructureElement() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + public boolean check(T t, World world, int x, int y, int z) { Block worldBlock = world.getBlock(x, y, z); return blocsMap.getOrDefault(worldBlock, Collections.emptySet()).contains(worldBlock.getDamageValue(world, x, y, z)); } @Override - public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { world.setBlock(x, y, z, defaultBlock, defaultMeta, 2); return true; } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); return true; } @@ -390,46 +388,46 @@ public class StructureUtility { } } - public static IStructureElement ofBlock(Block block, int meta, Block defaultBlock, int defaultMeta) { + public static IStructureElement ofBlock(Block block, int meta, Block defaultBlock, int defaultMeta) { if (block == null || defaultBlock == null) { throw new IllegalArgumentException(); } if(block instanceof ICustomBlockSetting){ - return new IStructureElement() { + return new IStructureElement() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + public boolean check(T t, World world, int x, int y, int z) { Block worldBlock = world.getBlock(x, y, z); return block == worldBlock && meta == worldBlock.getDamageValue(world, x, y, z); } @Override - public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { ((ICustomBlockSetting) defaultBlock).setBlock(world, x, y, z, defaultMeta); return true; } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); return true; } }; } else { - return new IStructureElement() { + return new IStructureElement() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + public boolean check(T t, World world, int x, int y, int z) { Block worldBlock = world.getBlock(x, y, z); return block == worldBlock && meta == worldBlock.getDamageValue(world, x, y, z); } @Override - public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { world.setBlock(x, y, z, defaultBlock, defaultMeta, 2); return true; } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); return true; } @@ -440,44 +438,44 @@ public class StructureUtility { /** * Same as above but ignores target meta id */ - public static IStructureElement ofBlockAnyMeta(Block block, Block defaultBlock, int defaultMeta) { + public static IStructureElement ofBlockAnyMeta(Block block, Block defaultBlock, int defaultMeta) { if (block == null || defaultBlock == null) { throw new IllegalArgumentException(); } if(block instanceof ICustomBlockSetting){ - return new IStructureElement() { + return new IStructureElement() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + public boolean check(T t, World world, int x, int y, int z) { return block == world.getBlock(x, y, z); } @Override - public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { ((ICustomBlockSetting) defaultBlock).setBlock(world, x, y, z, defaultMeta); return true; } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); return true; } }; } else { - return new IStructureElement() { + return new IStructureElement() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + public boolean check(T t, World world, int x, int y, int z) { return block == world.getBlock(x, y, z); } @Override - public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { world.setBlock(x, y, z, defaultBlock, defaultMeta, 2); return true; } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); return true; } @@ -485,21 +483,21 @@ public class StructureUtility { } } - public static IStructureElement ofBlock(Block block, int meta) { + public static IStructureElement ofBlock(Block block, int meta) { return ofBlock(block, meta, block, meta); } /** * Same as above but ignores target meta id */ - public static IStructureElement ofBlockAnyMeta(Block block) { + public static IStructureElement ofBlockAnyMeta(Block block) { return ofBlockAnyMeta(block, block, 0); } /** * Same as above but allows to set hint particle render */ - public static IStructureElement ofBlockAnyMeta(Block block,int defaultMeta) { + public static IStructureElement ofBlockAnyMeta(Block block,int defaultMeta) { return ofBlockAnyMeta(block, block, defaultMeta); } @@ -507,46 +505,46 @@ public class StructureUtility { //region adders - public static IStructureElement ofBlockAdder(IBlockAdder iBlockAdder, Block defaultBlock, int defaultMeta) { + public static IStructureElement ofBlockAdder(IBlockAdder iBlockAdder, Block defaultBlock, int defaultMeta) { if (iBlockAdder == null || defaultBlock == null) { throw new IllegalArgumentException(); } if(defaultBlock instanceof ICustomBlockSetting){ - return new IStructureElement() { + return new IStructureElement() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + public boolean check(T t, World world, int x, int y, int z) { Block worldBlock = world.getBlock(x, y, z); - return iBlockAdder.apply(multiBlock, worldBlock, worldBlock.getDamageValue(world, x, y, z)); + return iBlockAdder.apply(t, worldBlock, worldBlock.getDamageValue(world, x, y, z)); } @Override - public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { ((ICustomBlockSetting) defaultBlock).setBlock(world, x, y, z, defaultMeta); return true; } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); return true; } }; }else { - return new IStructureElement() { + return new IStructureElement() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + public boolean check(T t, World world, int x, int y, int z) { Block worldBlock = world.getBlock(x, y, z); - return iBlockAdder.apply(multiBlock, worldBlock, worldBlock.getDamageValue(world, x, y, z)); + return iBlockAdder.apply(t, worldBlock, worldBlock.getDamageValue(world, x, y, z)); } @Override - public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { world.setBlock(x, y, z, defaultBlock, defaultMeta, 2); return true; } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, defaultBlock, defaultMeta); return true; } @@ -554,102 +552,102 @@ public class StructureUtility { } } - public static IStructureElement ofBlockAdder(IBlockAdder iBlockAdder, int dots) { + public static IStructureElement ofBlockAdder(IBlockAdder iBlockAdder, int dots) { return ofBlockAdder(iBlockAdder, sHintCasingsTT, dots - 1); } - public static IStructureElementNoPlacement ofTileAdder(ITileAdder iTileAdder, Block hintBlock, int hintMeta) { + public static IStructureElementNoPlacement ofTileAdder(ITileAdder iTileAdder, Block hintBlock, int hintMeta) { if (iTileAdder == null || hintBlock == null) { throw new IllegalArgumentException(); } - return new IStructureElementNoPlacement() { + return new IStructureElementNoPlacement() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + public boolean check(T t, World world, int x, int y, int z) { TileEntity tileEntity = world.getTileEntity(x, y, z); - return tileEntity instanceof IGregTechTileEntity && iTileAdder.apply(multiBlock, tileEntity); + return tileEntity instanceof IGregTechTileEntity && iTileAdder.apply(t, tileEntity); } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, hintBlock, hintMeta); return true; } }; } - public static IStructureElementNoPlacement ofHatchAdder(IHatchAdder iHatchAdder, int textureIndex, int dots) { + public static IStructureElementNoPlacement ofHatchAdder(IHatchAdder iHatchAdder, int textureIndex, int dots) { return ofHatchAdder(iHatchAdder, textureIndex, sHintCasingsTT, dots - 1); } - public static IStructureElementNoPlacement ofHatchAdder(IHatchAdder iHatchAdder, int textureIndex, Block hintBlock, int hintMeta) { + public static IStructureElementNoPlacement ofHatchAdder(IHatchAdder iHatchAdder, int textureIndex, Block hintBlock, int hintMeta) { if (iHatchAdder == null || hintBlock == null) { throw new IllegalArgumentException(); } - return new IStructureElementNoPlacement() { + return new IStructureElementNoPlacement() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + public boolean check(T t, World world, int x, int y, int z) { TileEntity tileEntity = world.getTileEntity(x, y, z); - return tileEntity instanceof IGregTechTileEntity && iHatchAdder.apply(multiBlock, (IGregTechTileEntity) tileEntity, (short) textureIndex); + return tileEntity instanceof IGregTechTileEntity && iHatchAdder.apply(t, (IGregTechTileEntity) tileEntity, (short) textureIndex); } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, hintBlock, hintMeta); return true; } }; } - public static IStructureElement ofHatchAdderOptional(IHatchAdder iHatchAdder, int textureIndex, int dots, Block placeCasing, int placeCasingMeta) { + public static IStructureElement ofHatchAdderOptional(IHatchAdder iHatchAdder, int textureIndex, int dots, Block placeCasing, int placeCasingMeta) { return ofHatchAdderOptional(iHatchAdder, textureIndex, sHintCasingsTT, dots - 1, placeCasing, placeCasingMeta); } - public static IStructureElement ofHatchAdderOptional(IHatchAdder iHatchAdder, int textureIndex, Block hintBlock, int hintMeta, Block placeCasing, int placeCasingMeta) { + public static IStructureElement ofHatchAdderOptional(IHatchAdder iHatchAdder, int textureIndex, Block hintBlock, int hintMeta, Block placeCasing, int placeCasingMeta) { if (iHatchAdder == null || hintBlock == null) { throw new IllegalArgumentException(); } if(placeCasing instanceof ICustomBlockSetting){ - return new IStructureElement() { + return new IStructureElement() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + public boolean check(T t, World world, int x, int y, int z) { TileEntity tileEntity = world.getTileEntity(x, y, z); Block worldBlock = world.getBlock(x, y, z); return (tileEntity instanceof IGregTechTileEntity && - iHatchAdder.apply(multiBlock, (IGregTechTileEntity) tileEntity, (short) textureIndex)) || + iHatchAdder.apply(t, (IGregTechTileEntity) tileEntity, (short) textureIndex)) || (worldBlock == placeCasing && worldBlock.getDamageValue(world, x, y, z) == placeCasingMeta); } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, hintBlock, hintMeta); return true; } @Override - public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { ((ICustomBlockSetting) placeCasing).setBlock(world, x, y, z, placeCasingMeta); return true; } }; }else { - return new IStructureElement() { + return new IStructureElement() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { + public boolean check(T t, World world, int x, int y, int z) { TileEntity tileEntity = world.getTileEntity(x, y, z); Block worldBlock = world.getBlock(x, y, z); return (tileEntity instanceof IGregTechTileEntity && - iHatchAdder.apply(multiBlock, (IGregTechTileEntity) tileEntity, (short) textureIndex)) || + iHatchAdder.apply(t, (IGregTechTileEntity) tileEntity, (short) textureIndex)) || (worldBlock == placeCasing && worldBlock.getDamageValue(world, x, y, z) == placeCasingMeta); } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { TecTech.proxy.hint_particle(world, x, y, z, hintBlock, hintMeta); return true; } @Override - public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { world.setBlock(x, y, z, placeCasing, placeCasingMeta, 2); return true; } @@ -661,48 +659,48 @@ public class StructureUtility { //region side effects - public static IStructureElement onElementPass(Consumer onCheckPass, IStructureElement element) { - return new IStructureElement() { + public static , T> IStructureElement onElementPass(Consumer onCheckPass, B element) { + return new IStructureElement() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { - boolean check = element.check(multiBlock, world, x, y, z); + public boolean check(T t, World world, int x, int y, int z) { + boolean check = element.check(t, world, x, y, z); if (check) { - onCheckPass.accept(multiBlock); + onCheckPass.accept(t); } return check; } @Override - public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { - return element.placeBlock(multiBlock, world, x, y, z, trigger); + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return element.placeBlock(t, world, x, y, z, trigger); } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { - return element.spawnHint(multiBlock, world, x, y, z, trigger); + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + return element.spawnHint(t, world, x, y, z, trigger); } }; } - public static IStructureElement onElementFail(Consumer onFail, IStructureElement element) { - return new IStructureElement() { + public static , T> IStructureElement onElementFail(Consumer onFail, B element) { + return new IStructureElement() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { - boolean check = element.check(multiBlock, world, x, y, z); + public boolean check(T t, World world, int x, int y, int z) { + boolean check = element.check(t, world, x, y, z); if (!check) { - onFail.accept(multiBlock); + onFail.accept(t); } return check; } @Override - public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { - return element.placeBlock(multiBlock, world, x, y, z, trigger); + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return element.placeBlock(t, world, x, y, z, trigger); } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { - return element.spawnHint(multiBlock, world, x, y, z, trigger); + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + return element.spawnHint(t, world, x, y, z, trigger); } }; } @@ -714,15 +712,15 @@ public class StructureUtility { * If none does it will finally return false. * * @param elementChain - * @param + * @param * @return */ @SafeVarargs - public static IStructureElementChain ofChain(IStructureElement... elementChain) { + public static IStructureElementChain ofChain(IStructureElement... elementChain) { if (elementChain == null || elementChain.length == 0) { throw new IllegalArgumentException(); } - for (IStructureElement iStructureElement : elementChain) { + for (IStructureElement iStructureElement : elementChain) { if (iStructureElement == null) { throw new IllegalArgumentException(); } @@ -735,317 +733,317 @@ public class StructureUtility { * If none does it will finally return false. * * @param elementChain - * @param + * @param * @return */ @SuppressWarnings("unchecked") - public static IStructureElementChain ofChain(List> elementChain) { + public static IStructureElementChain ofChain(List> elementChain) { return ofChain(elementChain.toArray(new IStructureElement[0])); } //region defer - public static IStructureElementDeferred defer(Supplier> to) { + public static IStructureElementDeferred defer(Supplier> to) { if (to == null) { throw new IllegalArgumentException(); } - return new IStructureElementDeferred() { + return new IStructureElementDeferred() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { - return to.get().check(multiBlock, world, x, y, z); + public boolean check(T t, World world, int x, int y, int z) { + return to.get().check(t, world, x, y, z); } @Override - public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { - return to.get().placeBlock(multiBlock, world, x, y, z, trigger); + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return to.get().placeBlock(t, world, x, y, z, trigger); } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { - return to.get().spawnHint(multiBlock, world, x, y, z, trigger); + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + return to.get().spawnHint(t, world, x, y, z, trigger); } }; } - public static IStructureElementDeferred defer(Function> to) { + public static IStructureElementDeferred defer(Function> to) { if (to == null) { throw new IllegalArgumentException(); } - return new IStructureElementDeferred() { + return new IStructureElementDeferred() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { - return to.apply(multiBlock).check(multiBlock, world, x, y, z); + public boolean check(T t, World world, int x, int y, int z) { + return to.apply(t).check(t, world, x, y, z); } @Override - public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { - return to.apply(multiBlock).placeBlock(multiBlock, world, x, y, z, trigger); + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return to.apply(t).placeBlock(t, world, x, y, z, trigger); } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { - return to.apply(multiBlock).spawnHint(multiBlock, world, x, y, z, trigger); + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + return to.apply(t).spawnHint(t, world, x, y, z, trigger); } }; } - public static IStructureElementDeferred defer(Function keyExtractor, Map> map) { + public static IStructureElementDeferred defer(Function keyExtractor, Map> map) { if (keyExtractor == null || map == null) { throw new IllegalArgumentException(); } - return new IStructureElementDeferred() { + return new IStructureElementDeferred() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { - return map.get(keyExtractor.apply(multiBlock)).check(multiBlock, world, x, y, z); + public boolean check(T t, World world, int x, int y, int z) { + return map.get(keyExtractor.apply(t)).check(t, world, x, y, z); } @Override - public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { - return map.get(keyExtractor.apply(multiBlock)).placeBlock(multiBlock, world, x, y, z, trigger); + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return map.get(keyExtractor.apply(t)).placeBlock(t, world, x, y, z, trigger); } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { - return map.get(keyExtractor.apply(multiBlock)).spawnHint(multiBlock, world, x, y, z, trigger); + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + return map.get(keyExtractor.apply(t)).spawnHint(t, world, x, y, z, trigger); } }; } - public static IStructureElementDeferred defer(Function keyExtractor, Map> map, IStructureElement defaultElem) { + public static IStructureElementDeferred defer(Function keyExtractor, Map> map, IStructureElement defaultElem) { if (keyExtractor == null || map == null) { throw new IllegalArgumentException(); } - return new IStructureElementDeferred() { + return new IStructureElementDeferred() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { - return map.getOrDefault(keyExtractor.apply(multiBlock), defaultElem).check(multiBlock, world, x, y, z); + public boolean check(T t, World world, int x, int y, int z) { + return map.getOrDefault(keyExtractor.apply(t), defaultElem).check(t, world, x, y, z); } @Override - public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { - return map.getOrDefault(keyExtractor.apply(multiBlock), defaultElem).placeBlock(multiBlock, world, x, y, z, trigger); + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return map.getOrDefault(keyExtractor.apply(t), defaultElem).placeBlock(t, world, x, y, z, trigger); } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { - return map.getOrDefault(keyExtractor.apply(multiBlock), defaultElem).spawnHint(multiBlock, world, x, y, z, trigger); + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + return map.getOrDefault(keyExtractor.apply(t), defaultElem).spawnHint(t, world, x, y, z, trigger); } }; } @SafeVarargs - public static IStructureElementDeferred defer(Function keyExtractor, IStructureElement... array) { + public static IStructureElementDeferred defer(Function keyExtractor, IStructureElement... array) { if (keyExtractor == null || array == null) { throw new IllegalArgumentException(); } - return new IStructureElementDeferred() { + return new IStructureElementDeferred() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { - return array[keyExtractor.apply(multiBlock)].check(multiBlock, world, x, y, z); + public boolean check(T t, World world, int x, int y, int z) { + return array[keyExtractor.apply(t)].check(t, world, x, y, z); } @Override - public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { - return array[keyExtractor.apply(multiBlock)].placeBlock(multiBlock, world, x, y, z, trigger); + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return array[keyExtractor.apply(t)].placeBlock(t, world, x, y, z, trigger); } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { - return array[keyExtractor.apply(multiBlock)].spawnHint(multiBlock, world, x, y, z, trigger); + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + return array[keyExtractor.apply(t)].spawnHint(t, world, x, y, z, trigger); } }; } @SuppressWarnings("unchecked") - public static IStructureElementDeferred defer(Function keyExtractor, List> array) { + public static IStructureElementDeferred defer(Function keyExtractor, List> array) { return defer(keyExtractor, array.toArray(new IStructureElement[0])); } - public static IStructureElementDeferred defer(BiFunction> to) { + public static IStructureElementDeferred defer(BiFunction> to) { if (to == null) { throw new IllegalArgumentException(); } - return new IStructureElementDeferred() { + return new IStructureElementDeferred() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { - return to.apply(multiBlock, null).check(multiBlock, world, x, y, z); + public boolean check(T t, World world, int x, int y, int z) { + return to.apply(t, null).check(t, world, x, y, z); } @Override - public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { - return to.apply(multiBlock, trigger).placeBlock(multiBlock, world, x, y, z, trigger); + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return to.apply(t, trigger).placeBlock(t, world, x, y, z, trigger); } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { - return to.apply(multiBlock, trigger).spawnHint(multiBlock, world, x, y, z, trigger); + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + return to.apply(t, trigger).spawnHint(t, world, x, y, z, trigger); } }; } - public static IStructureElementDeferred defer(BiFunction keyExtractor, Map> map) { + public static IStructureElementDeferred defer(BiFunction keyExtractor, Map> map) { if (keyExtractor == null || map == null) { throw new IllegalArgumentException(); } - return new IStructureElementDeferred() { + return new IStructureElementDeferred() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { - return map.get(keyExtractor.apply(multiBlock, null)).check(multiBlock, world, x, y, z); + public boolean check(T t, World world, int x, int y, int z) { + return map.get(keyExtractor.apply(t, null)).check(t, world, x, y, z); } @Override - public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { - return map.get(keyExtractor.apply(multiBlock, trigger)).placeBlock(multiBlock, world, x, y, z, trigger); + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return map.get(keyExtractor.apply(t, trigger)).placeBlock(t, world, x, y, z, trigger); } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { - return map.get(keyExtractor.apply(multiBlock, trigger)).spawnHint(multiBlock, world, x, y, z, trigger); + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + return map.get(keyExtractor.apply(t, trigger)).spawnHint(t, world, x, y, z, trigger); } }; } - public static IStructureElementDeferred defer(BiFunction keyExtractor, Map> map, IStructureElement defaultElem) { + public static IStructureElementDeferred defer(BiFunction keyExtractor, Map> map, IStructureElement defaultElem) { if (keyExtractor == null || map == null) { throw new IllegalArgumentException(); } - return new IStructureElementDeferred() { + return new IStructureElementDeferred() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { - return map.getOrDefault(keyExtractor.apply(multiBlock, null), defaultElem).check(multiBlock, world, x, y, z); + public boolean check(T t, World world, int x, int y, int z) { + return map.getOrDefault(keyExtractor.apply(t, null), defaultElem).check(t, world, x, y, z); } @Override - public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { - return map.getOrDefault(keyExtractor.apply(multiBlock, trigger), defaultElem).placeBlock(multiBlock, world, x, y, z, trigger); + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return map.getOrDefault(keyExtractor.apply(t, trigger), defaultElem).placeBlock(t, world, x, y, z, trigger); } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { - return map.getOrDefault(keyExtractor.apply(multiBlock, trigger), defaultElem).spawnHint(multiBlock, world, x, y, z, trigger); + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + return map.getOrDefault(keyExtractor.apply(t, trigger), defaultElem).spawnHint(t, world, x, y, z, trigger); } }; } @SafeVarargs - public static IStructureElementDeferred defer(BiFunction keyExtractor, IStructureElement... array) { + public static IStructureElementDeferred defer(BiFunction keyExtractor, IStructureElement... array) { if (keyExtractor == null || array == null) { throw new IllegalArgumentException(); } - return new IStructureElementDeferred() { + return new IStructureElementDeferred() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { - return array[keyExtractor.apply(multiBlock, null)].check(multiBlock, world, x, y, z); + public boolean check(T t, World world, int x, int y, int z) { + return array[keyExtractor.apply(t, null)].check(t, world, x, y, z); } @Override - public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { - return array[keyExtractor.apply(multiBlock, trigger)].placeBlock(multiBlock, world, x, y, z, trigger); + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return array[keyExtractor.apply(t, trigger)].placeBlock(t, world, x, y, z, trigger); } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { - return array[keyExtractor.apply(multiBlock, trigger)].spawnHint(multiBlock, world, x, y, z, trigger); + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + return array[keyExtractor.apply(t, trigger)].spawnHint(t, world, x, y, z, trigger); } }; } @SuppressWarnings("unchecked") - public static IStructureElementDeferred defer(BiFunction keyExtractor, List> array) { + public static IStructureElementDeferred defer(BiFunction keyExtractor, List> array) { return defer(keyExtractor, array.toArray(new IStructureElement[0])); } - public static IStructureElementDeferred defer(Function> toCheck, BiFunction> to) { + public static IStructureElementDeferred defer(Function> toCheck, BiFunction> to) { if (to == null) { throw new IllegalArgumentException(); } - return new IStructureElementDeferred() { + return new IStructureElementDeferred() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { - return toCheck.apply(multiBlock).check(multiBlock, world, x, y, z); + public boolean check(T t, World world, int x, int y, int z) { + return toCheck.apply(t).check(t, world, x, y, z); } @Override - public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { - return to.apply(multiBlock, trigger).placeBlock(multiBlock, world, x, y, z, trigger); + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return to.apply(t, trigger).placeBlock(t, world, x, y, z, trigger); } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { - return to.apply(multiBlock, trigger).spawnHint(multiBlock, world, x, y, z, trigger); + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + return to.apply(t, trigger).spawnHint(t, world, x, y, z, trigger); } }; } - public static IStructureElementDeferred defer(Function keyExtractorCheck, BiFunction keyExtractor, Map> map) { + public static IStructureElementDeferred defer(Function keyExtractorCheck, BiFunction keyExtractor, Map> map) { if (keyExtractor == null || map == null) { throw new IllegalArgumentException(); } - return new IStructureElementDeferred() { + return new IStructureElementDeferred() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { - return map.get(keyExtractorCheck.apply(multiBlock)).check(multiBlock, world, x, y, z); + public boolean check(T t, World world, int x, int y, int z) { + return map.get(keyExtractorCheck.apply(t)).check(t, world, x, y, z); } @Override - public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { - return map.get(keyExtractor.apply(multiBlock, trigger)).placeBlock(multiBlock, world, x, y, z, trigger); + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return map.get(keyExtractor.apply(t, trigger)).placeBlock(t, world, x, y, z, trigger); } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { - return map.get(keyExtractor.apply(multiBlock, trigger)).spawnHint(multiBlock, world, x, y, z, trigger); + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + return map.get(keyExtractor.apply(t, trigger)).spawnHint(t, world, x, y, z, trigger); } }; } - public static IStructureElementDeferred defer(Function keyExtractorCheck, BiFunction keyExtractor, Map> map, IStructureElement defaultElem) { + public static IStructureElementDeferred defer(Function keyExtractorCheck, BiFunction keyExtractor, Map> map, IStructureElement defaultElem) { if (keyExtractor == null || map == null) { throw new IllegalArgumentException(); } - return new IStructureElementDeferred() { + return new IStructureElementDeferred() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { - return map.getOrDefault(keyExtractorCheck.apply(multiBlock), defaultElem).check(multiBlock, world, x, y, z); + public boolean check(T t, World world, int x, int y, int z) { + return map.getOrDefault(keyExtractorCheck.apply(t), defaultElem).check(t, world, x, y, z); } @Override - public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { - return map.getOrDefault(keyExtractor.apply(multiBlock, trigger), defaultElem).placeBlock(multiBlock, world, x, y, z, trigger); + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return map.getOrDefault(keyExtractor.apply(t, trigger), defaultElem).placeBlock(t, world, x, y, z, trigger); } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { - return map.getOrDefault(keyExtractor.apply(multiBlock, trigger), defaultElem).spawnHint(multiBlock, world, x, y, z, trigger); + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + return map.getOrDefault(keyExtractor.apply(t, trigger), defaultElem).spawnHint(t, world, x, y, z, trigger); } }; } @SafeVarargs - public static IStructureElementDeferred defer(Function keyExtractorCheck, BiFunction keyExtractor, IStructureElement... array) { + public static IStructureElementDeferred defer(Function keyExtractorCheck, BiFunction keyExtractor, IStructureElement... array) { if (keyExtractor == null || array == null) { throw new IllegalArgumentException(); } - return new IStructureElementDeferred() { + return new IStructureElementDeferred() { @Override - public boolean check(MultiBlock multiBlock, World world, int x, int y, int z) { - return array[keyExtractorCheck.apply(multiBlock)].check(multiBlock, world, x, y, z); + public boolean check(T t, World world, int x, int y, int z) { + return array[keyExtractorCheck.apply(t)].check(t, world, x, y, z); } @Override - public boolean placeBlock(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { - return array[keyExtractor.apply(multiBlock, trigger)].placeBlock(multiBlock, world, x, y, z, trigger); + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return array[keyExtractor.apply(t, trigger)].placeBlock(t, world, x, y, z, trigger); } @Override - public boolean spawnHint(MultiBlock multiBlock, World world, int x, int y, int z, ItemStack trigger) { - return array[keyExtractor.apply(multiBlock, trigger)].spawnHint(multiBlock, world, x, y, z, trigger); + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + return array[keyExtractor.apply(t, trigger)].spawnHint(t, world, x, y, z, trigger); } }; } @SuppressWarnings("unchecked") - public static IStructureElementDeferred defer(Function keyExtractorCheck, BiFunction keyExtractor, List> array) { + public static IStructureElementDeferred defer(Function keyExtractorCheck, BiFunction keyExtractor, List> array) { return defer(keyExtractorCheck, keyExtractor, array.toArray(new IStructureElement[0])); } @@ -1057,10 +1055,10 @@ public class StructureUtility { * @param a * @param b * @param c - * @param + * @param * @return */ - public static IStructureNavigate step(int a, int b, int c) { + public static IStructureNavigate step(int a, int b, int c) { return step(new Vec3Impl(a, b, c)); } @@ -1068,11 +1066,11 @@ public class StructureUtility { * Used internally, to generate skips for structure definitions * * @param step - * @param + * @param * @return */ @SuppressWarnings("unchecked") - public static IStructureNavigate step(Vec3Impl step) { + public static IStructureNavigate step(Vec3Impl step) { if (step == null || step.get0() < 0 || step.get1() < 0 || step.get2() < 0) { throw new IllegalArgumentException(); } @@ -1087,8 +1085,8 @@ public class StructureUtility { }); } - private static IStructureNavigate stepA(int a, int b, int c) { - return new IStructureNavigate() { + private static IStructureNavigate stepA(int a, int b, int c) { + return new IStructureNavigate() { @Override public int getStepA() { return a; @@ -1106,8 +1104,8 @@ public class StructureUtility { }; } - private static IStructureNavigate stepB(int a, int b, int c) { - return new IStructureNavigate() { + private static IStructureNavigate stepB(int a, int b, int c) { + return new IStructureNavigate() { @Override public int getStepA() { return a; @@ -1130,8 +1128,8 @@ public class StructureUtility { }; } - private static IStructureNavigate stepC(int a, int b, int c) { - return new IStructureNavigate() { + private static IStructureNavigate stepC(int a, int b, int c) { + return new IStructureNavigate() { @Override public int getStepA() { return a; @@ -1378,134 +1376,6 @@ public class StructureUtility { } } - public static boolean iterate(MultiBlock object, - ItemStack trigger, - IStructureElement[] elements, - World world, - ExtendedFacing extendedFacing, - int basePositionX, int basePositionY, int basePositionZ, - int basePositionA, int basePositionB, int basePositionC, - StructureIterationType iterationType) { - if (world.isRemote ^ (iterationType == SPAWN_HINTS)) { - return false; - } - - //change base position to base offset - basePositionA = -basePositionA; - basePositionB = -basePositionB; - basePositionC = -basePositionC; - - int[] abc = new int[]{basePositionA, basePositionB, basePositionC}; - int[] xyz = new int[3]; - - switch (iterationType) { - case SPAWN_HINTS: { - for (IStructureElement element : elements) { - if (element.isNavigating()) { - abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA(); - abc[1] = (element.resetB() ? basePositionB : abc[1]) + element.getStepB(); - abc[2] = (element.resetC() ? basePositionC : abc[2]) + element.getStepC(); - } else { - extendedFacing.getWorldOffset(abc, xyz); - xyz[0] += basePositionX; - xyz[1] += basePositionY; - xyz[2] += basePositionZ; - - element.spawnHint(object, world, xyz[0], xyz[1], xyz[2], trigger); - - abc[0] += 1; - } - } - break; - } - case BUILD_TEMPLATE: { - for (IStructureElement element : elements) { - if (element.isNavigating()) { - abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA(); - abc[1] = (element.resetB() ? basePositionB : abc[1]) + element.getStepB(); - abc[2] = (element.resetC() ? basePositionC : abc[2]) + element.getStepC(); - } else { - extendedFacing.getWorldOffset(abc, xyz); - xyz[0] += basePositionX; - xyz[1] += basePositionY; - xyz[2] += basePositionZ; - - if (world.blockExists(xyz[0], xyz[1], xyz[2])) { - element.placeBlock(object, world, xyz[0], xyz[1], xyz[2], trigger); - } - abc[0] += 1; - } - } - break; - } - case CHECK: { - for (IStructureElement element : elements) { - if (element.isNavigating()) { - abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA(); - abc[1] = (element.resetB() ? basePositionB : abc[1]) + element.getStepB(); - abc[2] = (element.resetC() ? basePositionC : abc[2]) + element.getStepC(); - } else { - extendedFacing.getWorldOffset(abc, xyz); - xyz[0] += basePositionX; - xyz[1] += basePositionY; - xyz[2] += basePositionZ; - - if (world.blockExists(xyz[0], xyz[1], xyz[2])) { - if (!element.check(object, world, xyz[0], xyz[1], xyz[2])) { - if (DEBUG_MODE) { - TecTech.LOGGER.info("Multi [" + basePositionX + ", " + basePositionY + ", " + basePositionZ + "] failed @ " + - Arrays.toString(xyz) + " " + Arrays.toString(abc)); - } - return false; - } - } else { - if (DEBUG_MODE) { - TecTech.LOGGER.info("Multi [" + basePositionX + ", " + basePositionY + ", " + basePositionZ + "] !blockExists @ " + - Arrays.toString(xyz) + " " + Arrays.toString(abc)); - } - } - abc[0] += 1; - } - break; - } - } - case CHECK_FULLY: { - for (IStructureElement element : elements) { - if (element.isNavigating()) { - abc[0] = (element.resetA() ? basePositionA : abc[0]) + element.getStepA(); - abc[1] = (element.resetB() ? basePositionB : abc[1]) + element.getStepB(); - abc[2] = (element.resetC() ? basePositionC : abc[2]) + element.getStepC(); - } else { - extendedFacing.getWorldOffset(abc, xyz); - xyz[0] += basePositionX; - xyz[1] += basePositionY; - xyz[2] += basePositionZ; - - if (world.blockExists(xyz[0], xyz[1], xyz[2])) { - if (!element.check(object, world, xyz[0], xyz[1], xyz[2])) { - if (DEBUG_MODE) { - TecTech.LOGGER.info("Multi [" + basePositionX + ", " + basePositionY + ", " + basePositionZ + "] failed @ " + - Arrays.toString(xyz) + " " + Arrays.toString(abc)); - } - return false; - } - } else { - if (DEBUG_MODE) { - TecTech.LOGGER.info("Multi [" + basePositionX + ", " + basePositionY + ", " + basePositionZ + "] !blockExists @ " + - Arrays.toString(xyz) + " " + Arrays.toString(abc)); - } - return false; - } - abc[0] += 1; - } - } - break; - } - default: return false; - } - return true; - } - /** * Transposes shape (swaps B and C axis, can be used to un-transpose transposed shape) * WARNING! Do not use on old api... diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IBlockAdder.java b/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IBlockAdder.java index 36ebfb3d21..908c4c4aca 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IBlockAdder.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IBlockAdder.java @@ -3,12 +3,12 @@ package com.github.technus.tectech.mechanics.structure.adders; import net.minecraft.block.Block; -public interface IBlockAdder { +public interface IBlockAdder { /** * Callback on block added, needs to check if block is valid (and add it) * @param block block attempted to add * @param meta meta of block attempted to add * @return is structure still valid */ - boolean apply(MultiBlock multiBlock, Block block, int meta); + boolean apply(T t,Block block, Integer meta); } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IHatchAdder.java b/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IHatchAdder.java index 0545a83d9e..a47befc2e8 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IHatchAdder.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/adders/IHatchAdder.java @@ -3,12 +3,12 @@ package com.github.technus.tectech.mechanics.structure.adders; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -public interface IHatchAdder { +public interface IHatchAdder { /** * Callback to add hatch, needs to check if hatch is valid (and add it) * @param iGregTechTileEntity hatch - * @param textureIndex requested texture index, or null if not... + * @param aShort requested texture index, or null if not... * @return managed to add hatch (structure still valid) */ - boolean apply(MultiBlock multiBlock, IGregTechTileEntity iGregTechTileEntity, int textureIndex); + boolean apply(T t,IGregTechTileEntity iGregTechTileEntity, Short aShort); } diff --git a/src/main/java/com/github/technus/tectech/mechanics/structure/adders/ITileAdder.java b/src/main/java/com/github/technus/tectech/mechanics/structure/adders/ITileAdder.java index 72d08751b5..cc3c7dbb7a 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/structure/adders/ITileAdder.java +++ b/src/main/java/com/github/technus/tectech/mechanics/structure/adders/ITileAdder.java @@ -2,11 +2,11 @@ package com.github.technus.tectech.mechanics.structure.adders; import net.minecraft.tileentity.TileEntity; -public interface ITileAdder { +public interface ITileAdder { /** * Callback to add hatch, needs to check if tile is valid (and add it) * @param tileEntity tile * @return managed to add hatch (structure still valid) */ - boolean apply(MultiBlock multiBlock, TileEntity tileEntity); + boolean apply(T t,TileEntity tileEntity); } diff --git a/src/main/java/com/github/technus/tectech/util/Util.java b/src/main/java/com/github/technus/tectech/util/Util.java index 8c693620b6..1843770e3a 100644 --- a/src/main/java/com/github/technus/tectech/util/Util.java +++ b/src/main/java/com/github/technus/tectech/util/Util.java @@ -40,6 +40,7 @@ public final class Util { private Util() { } + @SuppressWarnings("ComparatorMethodParameterNotUsed") public static > SortedSet> entriesSortedByValues(Map map) { SortedSet> sortedEntries = new TreeSet<>( (e1, e2) -> { -- cgit From dc236188d3de7217938518f3fa63ee4768db9966 Mon Sep 17 00:00:00 2001 From: basdxz Date: Wed, 4 Nov 2020 09:09:39 +0000 Subject: Bump version --- build.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.properties b/build.properties index d0ee72aeac..d4967409ac 100644 --- a/build.properties +++ b/build.properties @@ -1,6 +1,6 @@ minecraft.version=1.7.10 forge.version=10.13.4.1614 -tectech.version=4.8.3 +tectech.version=4.9.0 ic2.version=2.2.790-experimental codechickenlib.version=1.1.3.140 -- cgit From 0cc795de170612d8fd93c86050d512cb3979f97d Mon Sep 17 00:00:00 2001 From: botn365 <42187820+botn365@users.noreply.github.com> Date: Mon, 9 Nov 2020 20:01:23 +0100 Subject: fix 16 length computer not forming (#43) fix that a computer of 16 blocks length will not form --- .../thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java index 5d88fdfc50..6a6a707399 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java @@ -143,7 +143,7 @@ public class GT_MetaTileEntity_EM_computer extends GT_MetaTileEntity_MultiblockB totalLen++; offset--; } - if (totalLen > 16) { + if (totalLen > 17) { return false; } if (!structureCheck_EM(cap, blockType, blockMeta, addingMethods, casingTextures, blockTypeFallback, blockMetaFallback, 1, 2, ++offset)) { @@ -375,4 +375,4 @@ public class GT_MetaTileEntity_EM_computer extends GT_MetaTileEntity_MultiblockB public String[] getStructureDescription(ItemStack stackSize) { return description; } -} \ No newline at end of file +} -- cgit From 2ebe16d8075bd54a2a8f9a52e2b6b70c1eb17c49 Mon Sep 17 00:00:00 2001 From: DreamMasterXXL Date: Tue, 10 Nov 2020 18:55:22 +0100 Subject: bump gt dependencie --- build.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.properties b/build.properties index d4967409ac..9d4a2ce969 100644 --- a/build.properties +++ b/build.properties @@ -6,8 +6,8 @@ ic2.version=2.2.790-experimental codechickenlib.version=1.1.3.140 codechickencore.version=1.0.7.47 nei.version=1.0.5.120 -gregtech.jenkinsbuild=648 -gregtech.version=5.09.33.52 +gregtech.jenkinsbuild=736 +gregtech.version=5.09.33.55 #cofhcore.version=[1.7.10]3.1.4-329-dev cofh_core_version=2388751 yamcore.version=0.5.79 -- cgit From 6c9ec7b46509a7142edb94c15f9beac5a6153d82 Mon Sep 17 00:00:00 2001 From: Tec Date: Wed, 25 Nov 2020 17:25:05 +0100 Subject: Implement anti-laser target hatches! https://www.livescience.com/anti-laser-wireless-charging.html (cherry picked from commit 0304d1464f38ac75cf338ac470f1cc7228cd6d5c) --- .../multi/base/GT_MetaTileEntity_MultiblockBase_EM.java | 4 ++-- src/main/resources/assets/tectech/lang/en_US.lang | 2 +- src/main/resources/assets/tectech/lang/zh_CN.lang | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java index 9af6d40df7..8abb027d3f 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java @@ -1440,7 +1440,7 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt if (GT_MetaTileEntity_MultiBlockBase.isValidMetaTileEntity(tHatch)) { euVar = tHatch.maxEUOutput(); if (tHatch.getBaseMetaTileEntity().getStoredEU() <= tHatch.maxEUStore() - euVar && - aBaseMetaTileEntity.decreaseStoredEnergyUnits(euVar + Math.max(euVar >> 7, 1), false)) { + aBaseMetaTileEntity.decreaseStoredEnergyUnits(euVar + Math.max(euVar / 24576, 1), false)) { tHatch.setEUVar(tHatch.getBaseMetaTileEntity().getStoredEU() + euVar); } } @@ -1449,7 +1449,7 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt if (GT_MetaTileEntity_MultiBlockBase.isValidMetaTileEntity(tHatch)) { euVar = tHatch.maxEUOutput() * tHatch.Amperes; if (tHatch.getBaseMetaTileEntity().getStoredEU() <= tHatch.maxEUStore() - euVar && - aBaseMetaTileEntity.decreaseStoredEnergyUnits(euVar + Math.max(euVar >> 7, tHatch.Amperes), false)) { + aBaseMetaTileEntity.decreaseStoredEnergyUnits(euVar + Math.max(euVar / 24576, tHatch.Amperes), false)) { tHatch.setEUVar(tHatch.getBaseMetaTileEntity().getStoredEU() + euVar); } } diff --git a/src/main/resources/assets/tectech/lang/en_US.lang b/src/main/resources/assets/tectech/lang/en_US.lang index dc4af9970b..b81b865b22 100644 --- a/src/main/resources/assets/tectech/lang/en_US.lang +++ b/src/main/resources/assets/tectech/lang/en_US.lang @@ -538,7 +538,7 @@ gt.blockmachines.multimachine.em.transformer.name=Active Transformer gt.blockmachines.multimachine.em.transformer.hint=1 - Energy IO Hatches or High Power Casing gt.blockmachines.multimachine.em.transformer.desc.0=Power substation gt.blockmachines.multimachine.em.transformer.desc.1=All the transformation! -gt.blockmachines.multimachine.em.transformer.desc.2=Only 0.78125% power loss, HAYO! +gt.blockmachines.multimachine.em.transformer.desc.2=Only 0.004% power loss, HAYO! gt.blockmachines.multimachine.tm.microwave.name=Microwave Grinder gt.blockmachines.multimachine.tm.microwave.hint.0=1 - Classic Hatches or Clean Stainless Steel Casing diff --git a/src/main/resources/assets/tectech/lang/zh_CN.lang b/src/main/resources/assets/tectech/lang/zh_CN.lang index 6aae89bb1b..cfa23fb88d 100644 --- a/src/main/resources/assets/tectech/lang/zh_CN.lang +++ b/src/main/resources/assets/tectech/lang/zh_CN.lang @@ -535,7 +535,7 @@ gt.blockmachines.multimachine.em.transformer.name=有源变压器 gt.blockmachines.multimachine.em.transformer.hint=1 - 能源仓、动力仓或超能机械方块 gt.blockmachines.multimachine.em.transformer.desc.0=变电站 gt.blockmachines.multimachine.em.transformer.desc.1=任意电压间的相互转换! -gt.blockmachines.multimachine.em.transformer.desc.2=只有0.78125%的能量损失, HAYO! +gt.blockmachines.multimachine.em.transformer.desc.2=只有0.004%的能量损失, HAYO! gt.blockmachines.multimachine.tm.microwave.name=微波发生仪 gt.blockmachines.multimachine.tm.microwave.hint.0=1 - 基础仓室或洁净不锈钢机械方块 -- cgit From 67bfbdd8e4ab54d714f53958b1a01416114fbb0e Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Wed, 25 Nov 2020 21:14:03 +0100 Subject: update Gt dependencie --- build.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.properties b/build.properties index 9d4a2ce969..0a10614145 100644 --- a/build.properties +++ b/build.properties @@ -6,8 +6,8 @@ ic2.version=2.2.790-experimental codechickenlib.version=1.1.3.140 codechickencore.version=1.0.7.47 nei.version=1.0.5.120 -gregtech.jenkinsbuild=736 -gregtech.version=5.09.33.55 +gregtech.jenkinsbuild=756 +gregtech.version=5.09.33.57 #cofhcore.version=[1.7.10]3.1.4-329-dev cofh_core_version=2388751 yamcore.version=0.5.79 -- cgit From 7d3da8d8e75cff72a764de2e667734e4009b2bb3 Mon Sep 17 00:00:00 2001 From: basdxz Date: Fri, 4 Dec 2020 16:43:07 +0000 Subject: Fixes Git mishap Fixes for Pull #44 --- .../compatibility/dreamcraft/DreamCraftRecipeLoader.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java index df5c11e67b..0cfd8242ce 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java +++ b/src/main/java/com/github/technus/tectech/compatibility/dreamcraft/DreamCraftRecipeLoader.java @@ -933,6 +933,8 @@ public class DreamCraftRecipeLoader implements Runnable { 48000, 64, 200000, 8, new Object[]{ GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.CosmicNeutronium, 1L), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.CosmicNeutronium, 6L), + ItemList.Gravistar.get(4L), + ItemList.Emitter_UHV.get(4L), new Object[]{OrePrefixes.circuit.get(Materials.Bio), 4L}, GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), @@ -952,7 +954,9 @@ public class DreamCraftRecipeLoader implements Runnable { 96000, 128, 400000, 16, new Object[]{ GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1L), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Infinity, 6L), - new Object[]{OrePrefixes.circuit.get(Materials.Bio), 8L}, + ItemList.Gravistar.get(8L), + ItemList.Emitter_UEV.get(4L), + new Object[]{OrePrefixes.circuit.get(Materials.Nano), 4}, GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Tritanium, 64L), GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Tritanium, 64L), GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Tritanium, 64L), @@ -1084,7 +1088,7 @@ public class DreamCraftRecipeLoader implements Runnable { GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Silicone, 64), GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Polybenzimidazole, 64) }, new FluidStack[]{ - Materials.SolderingAlloy.getMolten(3760L), + Materials.SolderingAlloy.getMolten(3744L), Materials.Naquadria.getMolten(4032L), new FluidStack(FluidRegistry.getFluid("ic2coolant"), 20000) }, getItemContainer("NanoCircuit").get(1L), 8000, 8000000); @@ -1105,7 +1109,7 @@ public class DreamCraftRecipeLoader implements Runnable { GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.Neutronium, 16), GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Lanthanum, 64) }, new FluidStack[]{ - Materials.SolderingAlloy.getMolten(3760L), + Materials.SolderingAlloy.getMolten(3744L), Materials.UUMatter.getFluid(8000L), Materials.Osmium.getMolten(1152L) }, getItemContainer("PikoCircuit").get(1L), 10000, 8000000); @@ -1124,7 +1128,7 @@ public class DreamCraftRecipeLoader implements Runnable { GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Bedrockium, 8), GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Lanthanum, 64) }, new FluidStack[]{ - Materials.SolderingAlloy.getMolten(3760L), + Materials.SolderingAlloy.getMolten(3744L), Materials.UUMatter.getFluid(24000L), Materials.Osmium.getMolten(2304L) }, getItemContainer("QuantumCircuit").get(1L), 20000, 32000000); -- cgit From a7f86de1f808cd75617aa14b9d3d48a9c773b66e Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Fri, 4 Dec 2020 18:08:18 +0100 Subject: Update build.properties --- build.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.properties b/build.properties index 0a10614145..16de85d897 100644 --- a/build.properties +++ b/build.properties @@ -6,7 +6,7 @@ ic2.version=2.2.790-experimental codechickenlib.version=1.1.3.140 codechickencore.version=1.0.7.47 nei.version=1.0.5.120 -gregtech.jenkinsbuild=756 +gregtech.jenkinsbuild=778 gregtech.version=5.09.33.57 #cofhcore.version=[1.7.10]3.1.4-329-dev cofh_core_version=2388751 -- cgit From a48c1e34f81520cd775ebbbec24ebaa63ebb719a Mon Sep 17 00:00:00 2001 From: KiloJoel Date: Sat, 5 Dec 2020 15:14:17 +0000 Subject: reduced file saving frequency --- .../com/github/technus/tectech/mechanics/anomaly/AnomalyHandler.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/github/technus/tectech/mechanics/anomaly/AnomalyHandler.java b/src/main/java/com/github/technus/tectech/mechanics/anomaly/AnomalyHandler.java index a3fa341697..0beb5e0af8 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/anomaly/AnomalyHandler.java +++ b/src/main/java/com/github/technus/tectech/mechanics/anomaly/AnomalyHandler.java @@ -243,7 +243,9 @@ public class AnomalyHandler implements IChunkMetaDataHandler { player.attackEntityFrom(MainLoader.subspace,Math.max(1,badness/8f)); } } else if (playerTag.getDouble(SPACE_CANCER) > 0 && !player.isDead) { - playerTag.setDouble(SPACE_CANCER, Math.max(0, playerTag.getDouble(SPACE_CANCER) - 7.6293945E-6f)); + if (playerTag.getDouble(SPACE_CANCER) == 0 || player.ticksExisted % 10 != 0) + return; + playerTag.setDouble(SPACE_CANCER, Math.max(0, playerTag.getDouble(SPACE_CANCER) - 7.6293945E-5f)); } } TecTech.playerPersistence.saveData(player); -- cgit