From faa87edd40f106ab58e996e3ed9f2751bcd1bdc7 Mon Sep 17 00:00:00 2001 From: Wolf Date: Thu, 17 Jul 2025 11:20:15 -0400 Subject: [PATCH 1/9] Modified Radiolysis machine GUI to show rtg pellet location, tried to match with rtg style. I can also update to new gui style used in recent commits, but decided this was a start. --- .../hbm/textures/gui/gui_radiolysis.png | Bin 2722 -> 2925 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/hbm/textures/gui/gui_radiolysis.png b/src/main/resources/assets/hbm/textures/gui/gui_radiolysis.png index 16740bcd3b411f5662dbbab0d5a815a7fd0445e2..ebf7ab0e8fc27ac32c7b169737cd57c89f2acdca 100644 GIT binary patch literal 2925 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 F{sVt`5s3f* literal 2722 zcmcImX;c$d7JeZC0JcS0+l#>*lRGk&V#v!4HVjr}Rv8-ZOx`JFzbX>Sw*zJKQo{>98uoWIFCJD+%osU&!0Nfqats5@EluTf`QvsBW^=1pMpZbJ2NXWa z3IR{eNB1}bZqU(*Fl9K9eZRVT<*I_TwDfeOiH#kO$#z8JKK`8oEQfWJabz=7QwNjD z!9kZZMd(WdH=Sc;0L_;jPkqV|97yYYKcqYLB{o3Y+61Bq2N?$KlzUYnDwZ<5Vc-?7 zEd*w&=pz08a9tRL(wiqrlLkG8IFM?1<=5fFl#;Z;EsUOe@NMI=Z?df2>t~``j+#jO z5@(lTKKLKnGY@O-?eH4U(obR^xoU?iN;MITaRiT^Vx0DE+UaOmc|AadFEP+<3A-s3iNl8y1jA-u4&49IKRq@kW+ZPu zEO5Jx|BH!~*z;2mQqcB`86it-PN%*ymc2uw5%-tbI`Z+oS56Lb zs+}=n6N`~1C>668vd($~HyhOYlkvd1qf)QeZH;{~#sOhDj&jl7?VQAHJR|Fu_?$2B zmMJI5(opmU-FeXebT8kW678a&(AvZ7P-m$d8bU-&Wr}=2dCtcnRoxi2WhEJqQFQ0i zfjo_KNy2dnXGw6~L>SaEi}X{v*#X_A>i|_6^tLq3I?n>?jS!KzyeEI7B728yvNQHf zp2v-6GL75VbNt#`x(Eedip67e8_g-^@^nJML+Y0CgWFV^cA8MGsP5Nnw5bc(z$j97 z>ON5c;=6QHj`#^ubp`E0h2$zo47a7(#@9t$i5Onqw#3~kH=`lnm z3=J@~zl(01<}Vg&)RKiPF*p(5Dm25GKrf5W(iB3uhJp{F3ty0~6pZaPRnDOrDaZIe zc!)RV*tI{+7zW*Cxz@KcvEA+#lA7H6`R&n5Q4$A(1@@@E~J9WP7S z3u?002TD>YE8E-GZYISek6gA02YJ6DA(MtRW5?~R)|Rx+HLC6iT1tutXyIb*;ecRf^C9P0kB71!w~&C zd=?-(+>Hg=616RE-ZVw8VJ$ys_s%;eCm-sar|NP`iwAUONfs^jt7F02m zb%?XLVDi;s6ErDfG8XdUlST()cE@poN;oP9bche1a2CJUvmkXJ`Sx`8bSnrkeY7BV zdED>}cpCT#bB-3g-;9;YA7ntD*hk;FKFMr*P2UaNBNVtoa~T&Wk?t(9W9ga9$~G@Y z7xn6zweih;R33v6sQL`&3d-I08Rp+V%nz!PV5^szQ@o#S4d?KyLtc&6c_^wAiqAsk zx>EJ*H}tMnioNyV5WFRyhl_-fUUm)ZGv&UmMw&^Cx)$etW{UnzpO?sXN3*b~TbxlN zz5}_z30(z`)Sd?s_Eie)UhBY5scAk*<=Ab-AIAMEus9pqNTw7ZkR^%T71Fe7FU9S< zuFR*E{7|!XqINTIIytnkE;)P81!0+m7g^?y);M6F2^jG+6^vyJno`;VLU~7(z}VOX zadWb7LZYj6CZ+Dt8)#}p{+@ID4dX2c>!{spC`N5b2QPF_{ifWv*@c+84&p_dn{$PX zH=vfyIU@hW=i?cBm5}Z~wKE>VBD2SVo4YXH8ivK8F{l8w8*k6nd zY8jE4jwxJ>jIBv`nSq~;Dyjan3a4owQD!U1`S(lytKWZg;IGDifksxtVH)*nPNw<) zj%#ujLKoNiT(7u;sk?ACdTstg;e&Mb|1Hv&wSS~9m%E6OJEQV@H$T6RuAUN}qf)pP zoG}p=6My~s>Z_z5eDHw5=kwi|aEXUd-8A0Gm6o0+%5*@yU?BYe$mtLJQf1C Date: Thu, 17 Jul 2025 21:22:38 +0300 Subject: [PATCH 2/9] Fix RBMK console rotation --- .../machine/rbmk/TileEntityRBMKConsole.java | 103 +++++++++++------- 1 file changed, 61 insertions(+), 42 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java index bdb21f97c..0382b50c0 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java @@ -89,44 +89,28 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon double flux = 0; - for(int i = -7; i <= 7; i++) { - for(int j = -7; j <= 7; j++) { - int rx = i, rz = j; - switch (rotation) { - case 1: // 90° - rx = -j; - rz = i; - break; - case 2: // 180° - rx = -i; - rz = -j; - break; - case 3: // 270° - rx = j; - rz = -i; - break; + for(int index = 0; index < columns.length; index++) { + int rx = getXFromIndex(index); + int rz = getZFromIndex(index); + + TileEntity te = Compat.getTileStandard(worldObj, targetX + rx, targetY, targetZ + rz); + + if(te instanceof TileEntityRBMKBase) { + + TileEntityRBMKBase rbmk = (TileEntityRBMKBase)te; + + columns[index] = new RBMKColumn(rbmk.getConsoleType(), rbmk.getNBTForConsole()); + columns[index].data.setDouble("heat", rbmk.heat); + columns[index].data.setDouble("maxHeat", rbmk.maxHeat()); + if(rbmk.isModerated()) columns[index].data.setBoolean("moderated", true); //false is the default anyway and not setting it when we don't need to reduces cruft + + if(te instanceof TileEntityRBMKRod) { + TileEntityRBMKRod fuel = (TileEntityRBMKRod) te; + flux += fuel.lastFluxQuantity; } - TileEntity te = Compat.getTileStandard(worldObj, targetX + rx, targetY, targetZ + rz); - int index = (i + 7) + (j + 7) * 15; - - if(te instanceof TileEntityRBMKBase) { - - TileEntityRBMKBase rbmk = (TileEntityRBMKBase)te; - - columns[index] = new RBMKColumn(rbmk.getConsoleType(), rbmk.getNBTForConsole()); - columns[index].data.setDouble("heat", rbmk.heat); - columns[index].data.setDouble("maxHeat", rbmk.maxHeat()); - if(rbmk.isModerated()) columns[index].data.setBoolean("moderated", true); //false is the default anyway and not setting it when we don't need to reduces cruft - - if(te instanceof TileEntityRBMKRod) { - TileEntityRBMKRod fuel = (TileEntityRBMKRod) te; - flux += fuel.lastFluxQuantity; - } - - } else { - columns[index] = null; - } + } else { + columns[index] = null; } } @@ -281,8 +265,9 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon if(key.startsWith("sel_")) { - int x = data.getInteger(key) % 15 - 7; - int z = data.getInteger(key) / 15 - 7; + int index = data.getInteger(key); + int x = getXFromIndex(index); + int z = getZFromIndex(index); TileEntity te = Compat.getTileStandard(worldObj, targetX + x, targetY, targetZ + z); @@ -322,8 +307,8 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon int[] cols = data.getIntArray("cols"); for(int i : cols) { - int x = i % 15 - 7; - int z = i / 15 - 7; + int x = getXFromIndex(i); + int z = getZFromIndex(i); TileEntity te = Compat.getTileStandard(worldObj, targetX + x, targetY, targetZ + z); @@ -339,8 +324,8 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon int[] cols = data.getIntArray("cols"); for(int i : cols) { - int x = i % 15 - 7; - int z = i / 15 - 7; + int x = getXFromIndex(i); + int z = getZFromIndex(i); TileEntity te = Compat.getTileStandard(worldObj, targetX + x, targetY, targetZ + z); @@ -404,6 +389,40 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon rotation = (byte)((rotation + 1) % 4); } + public int getXFromIndex(int col) { + final int i = col % 15 - 7; + final int j = col / 15 - 7; + switch (rotation) { + case 0: // 0° + return i; + case 1: // 90° + return -j; + case 2: // 180° + return -i; + case 3: // 270° + return j; + } + + return i; + } + + public int getZFromIndex(int col) { + final int i = col % 15 - 7; + final int j = col / 15 - 7; + switch (rotation) { + case 0: // 0° + return j; + case 1: // 90° + return i; + case 2: // 180° + return -j; + case 3: // 270° + return -i; + } + + return j; + } + public static class RBMKColumn { public ColumnType type; From 0c5077b54aa19749864e489c76e1f35094cf6a3b Mon Sep 17 00:00:00 2001 From: abel1502 Date: Thu, 17 Jul 2025 21:40:32 +0300 Subject: [PATCH 3/9] Don't forget OpenComputers --- .../machine/rbmk/TileEntityRBMKConsole.java | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java index 0382b50c0..db38eed4b 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java @@ -575,13 +575,32 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon int x = args.checkInteger(0) - 7; int y = -args.checkInteger(1) + 7; - int i = (y + 7) * 15 + (x + 7); + int i = x; + int j = y; + switch (rotation) { + case 0: + break; + case 1: + i = y; + j = -x; + break; + case 2: + i = -x; + j = -y; + break; + case 3: + i = -y; + j = x; + break; + } + + int index = (j + 7) * 15 + (i + 7); TileEntity te = Compat.getTileStandard(worldObj, targetX + x, targetY, targetZ + y); if (te instanceof TileEntityRBMKBase) { TileEntityRBMKBase column = (TileEntityRBMKBase) te; - NBTTagCompound column_data = columns[i].data; + NBTTagCompound column_data = columns[index].data; LinkedHashMap data_table = new LinkedHashMap<>(); data_table.put("type", column.getConsoleType().name()); data_table.put("hullTemp", column_data.getDouble("heat")); From 06930f6ec810f10b04d8e2ab346226d7d6ba5446 Mon Sep 17 00:00:00 2001 From: arantirnecrolord Date: Fri, 18 Jul 2025 11:57:22 +0300 Subject: [PATCH 4/9] update uk_UA --- src/main/resources/assets/hbm/lang/uk_UA.lang | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/uk_UA.lang b/src/main/resources/assets/hbm/lang/uk_UA.lang index 8d019103e..623aa6faa 100644 --- a/src/main/resources/assets/hbm/lang/uk_UA.lang +++ b/src/main/resources/assets/hbm/lang/uk_UA.lang @@ -773,6 +773,7 @@ container.leadBox=Свинцевий ящик container.machineAmmoPress=Прес для боєприпасів container.machineArcWelder=Дуговий зварювальник container.machineArcFurnaceLarge=Дугова піч +container.machineAssemblyMachine=Збиральна машина container.machineBoiler=Нагрівач нафти container.machineChemicalFactory=Хімічна фабрика container.machineChemicalPlant=Хімічний завод @@ -925,7 +926,7 @@ damage.item=Опір до: damage.category.EN=Енергії damage.category.EXPL=Вибухів damage.category.FIRE=Вогню -damage.category.PROJ=Снарядів +damage.category.PHYS=Фізики damage.exact.drown=Утоплення damage.exact.fall=Падіння damage.exact.LASER=Лазерів @@ -1033,7 +1034,7 @@ desc.gui.rtg.pellets=Допустимі пелети: desc.gui.rtg.pelletHeat=%s (%s тепла) desc.gui.rtg.pelletPower=%s (%s HE/тік) desc.gui.template=§9Шаблони§r$Шаблони можна створювати за$допомогою Папки шаблонів машин. -desc.gui.turbinegas.automode=§2Режим автоматичного дроселювання турбіни§r$Натиснувши кнопку "AUTO", турбіна$втоматично відрегулює виробництво електроенергії$на основі необхідної енергії в мережі +desc.gui.turbinegas.automode=§2Режим автоматичного дроселювання турбіни§r$Натиснувши кнопку "AUTO", турбіна$втоматично відрегулює виробництво електроенергії$на основі необхідної енергії в мережі$та рівня палива у внутрішньому баку desc.gui.turbinegas.fuels=§6Допустимі види палива:§r desc.gui.turbinegas.warning=§cНизький рівень палива або мастила!§r desc.gui.zirnox.coolant=§3Охолодження§r$CO2 передає тепло від реактора до води.$Це скип'ятить її до надзвичайно гарячу пару$Ефективність охолодження та виробництва пари$залежить від тиску. @@ -1805,6 +1806,7 @@ item.ammo_secret.folly_sm.name=Срібна куля item.ammo_secret.g12_equestrian.name=Флешетний снаряд з залізничними цвяхами 12-го калібру item.ammo_secret.m44_equestrian.name=.44 Magnum Череполом item.ammo_secret.p35_800.name=.35-800 V9 +item.ammo_secret.p35_800_bl.name=.35-800 V9 (Чорна блискавка) item.ammo_standard.b75.name=Болт .75 item.ammo_standard.b75_exp.name=Болт .75 (Розривний) item.ammo_standard.b75_inc.name=Болт .75 (Запальний) @@ -2159,6 +2161,7 @@ item.blades_desh.name=Деш леза подрібнювача item.blades_steel.name=Стальні леза подрібнювача item.blades_titanium.name=Титанові леза подрібнювача item.blowtorch.name=Паяльна лампа +item.blueprints.name=Креслення item.board_copper.name=Мідна панель item.boat_rubber.name=Гумовий човен item.bobmazon.name=Бобмазон @@ -2389,6 +2392,7 @@ item.chopper_torso.name=Корпус Гвинтокрила Мисливця item.chopper_wing.name=Крило Гвинтокрила Мисливця item.chunk_ore.malachite.name=Шматок малахіту item.chunk_ore.rare.name=Шматок рідкоземельної руди +item.chunk_ore.moonstone.name=Місячний камінь item.chunk_ore.cryolite.name=Шматок кріоліту item.cigarette.name=Сигарети торгової марки FFI item.cinnebar.name=Кіновар @@ -3992,6 +3996,7 @@ item.radx.desc=Збільшує стійкість до радіації на 0. item.rag.name=Тканина item.rag_damp.name=Волога тканина item.rag_piss.name=Просочена сечею ганчірка +item.rangefinder.name=Прилад для вимірювання відстані item.rbmk_fuel_balefire.name=Паливний стрижень РБМК BF item.rbmk_fuel_balefire_gold.name=Паливний стрижень РБМК флешголду item.rbmk_fuel_drx.name=§cПаливний стрижень РБМК Дігамма§r @@ -5276,6 +5281,7 @@ tile.ducrete_smooth_stairs.name=Сходи з уранобетону tile.dummy_block.name=Dummy Block tile.dummy_port.name=Dummy Block (Electricity Port) tile.dungeon_chain.name=Металевий ланцюг +tile.logic_block.name=Dungeon Action Block tile.dynamite.name=Динаміт tile.emp_bomb.name=Пристрій електромагнітного іпульсу tile.factory_advanced_conductor.name=Advanced Factory Electricity Port @@ -5475,8 +5481,9 @@ tile.machine_arc_welder.name=Дуговий зварювальник tile.machine_armor_table.name=Стіл модифікації броні tile.machine_ashpit.name=Зольник tile.machine_ashpit.desc=Збирає попіл з топок та нагрівальних печей -tile.machine_assembler.name=Збиральна машина +tile.machine_assembler.name=Збиральна машина (Legacy) tile.machine_assemfac.name=Збиральна фабрика +tile.machine_assembly_machine.name=Збиральна машина tile.machine_autocrafter.name=Автоматичний верстак tile.machine_autosaw.name=Автоматична пила tile.machine_autosaw.desc=Вирубує рослини поруч, заново висажує дерева$Приймає:$-Деревну смолу$-Етанол$-Риб'ячий жир$-Важку нафту @@ -5799,6 +5806,7 @@ tile.plasma_heater.name=Нагрівач плазми tile.plushie.name=%s плюшка tile.pneumatic_tube.name=Пневматична труба tile.pneumatic_tube.desc=Надсилає предмети за допомогою стисненого повітря.$Клацніть правою кнопкою миші викруткою, щоб перемкнути вхід.$Клацніть правою кнопкою миші з шифтом та викруткою, щоб перемкнути вихід.$Входи можна налаштувати та підключити до стисненого повітря.$Надсилає один стак чотири рази на секунду. +tile.pneumatic_tube_paintable.name=Пневматична труба, яку можна пофарбувати tile.pole_satellite_receiver.name=Супутникова тарілка tile.pole_top.name=Верхівка антени tile.press_preheater.name=Burner Press Preheater @@ -6058,6 +6066,7 @@ tile.volcano_rad_core.name=Радіоактивне вулканічне ядр tile.wand_air.name=Structure Wand Block (Air) tile.wand_loot.name=Structure Wand Block (Lootable) tile.wand_jigsaw.name=Structure Wand Block (Jigsaw) +tile.wand_logic.name=Structure Wand Block (Logic) tile.waste_earth.name=Мертва трава tile.waste_leaves.name=Мертве листя tile.waste_log.name=Обвуглене дерево @@ -6221,4 +6230,6 @@ desc.gui.upgrade.afterburner= * §dФорсаж§r: Складається до desc.gui.upgrade.effectiveness= * §aЕфективність§r: Складається до 3 рівнів desc.gui.upgrade.overdrive= * §7Перевантаження§r: Складається до 3 рівнів desc.gui.upgrade.power= * §1Енергозбереження§r: Складається до 3 рівнів -desc.gui.upgrade.speed= * §4Швидкість§r: Складається до 3 рівнів \ No newline at end of file +desc.gui.upgrade.speed= * §4Швидкість§r: Складається до 3 рівнів + +tile.oc_cable_paintable.name=Мережевий кабель, який можна фарбувати \ No newline at end of file From b7641dcd54c57702c8e95c7d925a1f515ff567ab Mon Sep 17 00:00:00 2001 From: Bob Date: Fri, 18 Jul 2025 23:34:43 +0200 Subject: [PATCH 5/9] now's your chance to take a [BIG SHIT] --- changelog | 25 ++++++++++++- .../java/com/hbm/crafting/ToolRecipes.java | 2 +- .../java/com/hbm/handler/CompatHandler.java | 2 -- .../gui/GUIScreenTemplateFolder.java | 19 ---------- .../recipes/AssemblyMachineRecipes.java | 25 ++++++++++++- .../recipes/ChemicalPlantRecipes.java | 15 -------- .../com/hbm/itempool/ItemPoolsLegacy.java | 2 -- src/main/java/com/hbm/items/ModItems.java | 20 +++++++---- .../items/machine/ItemAssemblyTemplate.java | 5 ++- .../com/hbm/items/machine/ItemBlueprints.java | 14 ++++++-- .../hbm/items/machine/ItemChemistryIcon.java | 1 + .../items/machine/ItemChemistryTemplate.java | 5 ++- .../com/hbm/items/machine/ItemFluidTank.java | 33 ++++++------------ .../weapon/sedna/factory/Orchestras.java | 9 ++++- .../weapon/sedna/factory/XFactory12ga.java | 2 +- .../machine/ModuleMachineAssembler.java | 9 +++++ .../tileentity/RenderAssemblyMachine.java | 3 -- .../TileEntityMachineAssemblyMachine.java | 14 ++++++-- .../TileEntityMachineChemicalFactory.java | 14 +++++++- .../TileEntityMachineChemicalPlant.java | 10 +++++- src/main/java/com/hbm/util/ShadyUtil.java | 4 +-- .../gen/util/LogicBlockInteractions.java | 6 ---- src/main/resources/assets/hbm/lang/de_DE.lang | 8 +++-- src/main/resources/assets/hbm/lang/en_US.lang | 8 +++-- src/main/resources/assets/hbm/sounds.json | 1 + .../assets/hbm/sounds/weapon/hkShoot.ogg | Bin 0 -> 13919 bytes .../assets/hbm/textures/items/fluid_pack.png | Bin 0 -> 477 bytes .../hbm/textures/items/fluid_pack_overlay.png | Bin 0 -> 201 bytes .../hbm/textures/items/fluid_tank_lead.png | Bin 262 -> 289 bytes .../items/fluid_tank_lead_overlay.png | Bin 132 -> 180 bytes 30 files changed, 154 insertions(+), 102 deletions(-) create mode 100644 src/main/resources/assets/hbm/sounds/weapon/hkShoot.ogg create mode 100644 src/main/resources/assets/hbm/textures/items/fluid_pack.png create mode 100644 src/main/resources/assets/hbm/textures/items/fluid_pack_overlay.png diff --git a/changelog b/changelog index 00743753b..07f6038d5 100644 --- a/changelog +++ b/changelog @@ -9,8 +9,18 @@ * Replace the journals * Instead of opening them and making a template, they act as a multi template * Blueprints need to remain in the slot, removing them will disable the recipes again +* More paintables + * Paintable pneumatic tube + * Behaves the exact same as a regular pneumatic tube + * Can also be used as in and outputs + * Full block + * Paintable OpenComputers cable + * Only enabled if OpenComputers is installed + * Full block + * Also supports OC wire colors ## Changed +* Updated chinese and ukrainian localization * Removed levitation unit * Many of NTM's regular building blocks now have forge microblock support * RBMK crane models now conform to the dimensions of the room they're in @@ -19,9 +29,22 @@ * Electric attacks (i.e. tesla cannon) are now in the "energy damage" category * This means that armors that have energy resistance actually properly work against the tesla cannon * Heavy components are being deprecated +* Flow control pumps can now be interfaced with OpenComputers +* The electrolyzer now remembers the last visited GUI screen +* Retextured many fluid containers such as universal tanks, canisters and gas tanks +* Removed the legacy assembler and chemical plant recipes from the template folder +* Removed journals from various loot pools +* Drinking whiskey now gives strength III, resistance III and nausea +* Chemical artillery shell recipes have now been moved to the assembler +* The chemical plant and factory now scale their max power based on the recipe, similar to how the arc welder works +* The chemical plant's default max power is now 100kHE again instead of 1MHE ## Fixed * Fixed gas centrifuge sound persisting when broken or when unloaded * Fixed all centrifuge sounds trying to play even when the player is far away, using up audio slots * Fixed guns that don't have durability always displaying a condition of 0% -* Fixed GL state leak caused by skeletons \ No newline at end of file +* Fixed GL state leak caused by skeletons +* Fixed OpenComputers integration for the CCGT +* Fixed rotated RBMK consoles not behaving correctly when trying to change rod insertion levels +* Fixed crash caused by piston inserters on servers +* Fixed flare gun not having a firing sound diff --git a/src/main/java/com/hbm/crafting/ToolRecipes.java b/src/main/java/com/hbm/crafting/ToolRecipes.java index de9dc346f..b01ee10cf 100644 --- a/src/main/java/com/hbm/crafting/ToolRecipes.java +++ b/src/main/java/com/hbm/crafting/ToolRecipes.java @@ -113,7 +113,7 @@ public class ToolRecipes { //Utility CraftingManager.addRecipeAuto(new ItemStack(ModItems.rangefinder, 1), new Object[] { "GRC", " S", 'G', KEY_ANYPANE, 'R', REDSTONE.dust(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC), 'S' ,STEEL.plate() }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.designator, 1), new Object[] { " A", "#B#", "#B#", '#', IRON.plate(), 'A', STEEL.plate(), 'B', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC) }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.designator, 1), new Object[] { " A", "#B#", "#B#", '#', ANY_PLASTIC.ingot(), 'A', STEEL.plate(), 'B', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC) }); CraftingManager.addShapelessAuto(new ItemStack(ModItems.designator_range, 1), new Object[] { ModItems.rangefinder, ModItems.designator, ANY_PLASTIC.ingot() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.designator_manual, 1), new Object[] { " A", "#C#", "#B#", '#', ANY_PLASTIC.ingot(), 'A', PB.plate(), 'B', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'C', ModItems.designator }); CraftingManager.addShapelessAuto(new ItemStack(ModItems.designator_arty_range, 1), new Object[] { ModItems.rangefinder, DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), ANY_PLASTIC.ingot() }); diff --git a/src/main/java/com/hbm/handler/CompatHandler.java b/src/main/java/com/hbm/handler/CompatHandler.java index ac4bbe114..feb113b7a 100644 --- a/src/main/java/com/hbm/handler/CompatHandler.java +++ b/src/main/java/com/hbm/handler/CompatHandler.java @@ -1,7 +1,6 @@ package com.hbm.handler; import com.hbm.blocks.ModBlocks; -import com.hbm.blocks.network.BlockOpenComputersCablePaintable; import com.hbm.inventory.RecipesCommon; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; @@ -17,7 +16,6 @@ import li.cil.oc.api.machine.Context; import li.cil.oc.api.network.*; import net.minecraft.item.ItemStack; import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.oredict.OreDictionary; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java b/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java index 134b83c75..aebfa05ee 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java @@ -10,16 +10,11 @@ import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; -import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.recipes.AssemblerRecipes; -import com.hbm.inventory.recipes.AssemblerRecipes.AssemblerRecipe; -import com.hbm.inventory.recipes.ChemplantRecipes; -import com.hbm.inventory.recipes.ChemplantRecipes.ChemRecipe; import com.hbm.inventory.recipes.CrucibleRecipes; import com.hbm.items.ModItems; -import com.hbm.items.machine.ItemAssemblyTemplate; import com.hbm.items.machine.ItemCassette; import com.hbm.items.machine.ItemStamp; import com.hbm.items.machine.ItemStamp.StampType; @@ -83,22 +78,8 @@ public class GUIScreenTemplateFolder extends GuiScreen { } } } - - // Assembly Templates - for(int i = 0; i < AssemblerRecipes.recipeList.size(); i++) { - ComparableStack comp = AssemblerRecipes.recipeList.get(i); - AssemblerRecipe recipe = AssemblerRecipes.recipes.get(comp); - if(recipe != null && recipe.folders.contains(item)) { - allStacks.add(ItemAssemblyTemplate.writeType(new ItemStack(ModItems.assembly_template, 1, i), comp)); - } - } if(!this.isJournal) { - // Chemistry Templates - for(int i = 0; i < ChemplantRecipes.recipes.size(); i++) { - ChemRecipe chem = ChemplantRecipes.recipes.get(i); - allStacks.add(new ItemStack(ModItems.chemistry_template, 1, chem.getId())); - } // Crucible Templates for(int i = 0; i < CrucibleRecipes.recipes.size(); i++) { diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index c6e98b525..a8444a256 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -16,6 +16,7 @@ import com.hbm.inventory.OreDictManager.DictFrame; import com.hbm.inventory.RecipesCommon.AStack; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.RecipesCommon.OreDictStack; +import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.material.Mats; import com.hbm.inventory.recipes.loader.GenericRecipe; @@ -233,7 +234,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.epress").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_epress, 1)) .inputItems(new OreDictStack(STEEL.plate(), 8), new OreDictStack(ANY_RUBBER.ingot(), 4), new ComparableStack(ModItems.part_generic, 2, EnumPartType.PISTON_HYDRAULIC.ordinal()), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC))); this.register(new GenericRecipe("ass.fel").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_fel, 1)) - .inputItems(new ComparableStack(ModBlocks.machine_lithium_battery, 1), new OreDictStack(ALLOY.wireDense(), 64), new OreDictStack(STEEL.plateCast(), 12), new OreDictStack(ANY_PLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CAPACITOR), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC))); + .inputItems(new ComparableStack(ModBlocks.machine_lithium_battery, 1), new OreDictStack(ALLOY.wireDense(), 64), new OreDictStack(STEEL.plateCast(), 12), new OreDictStack(ANY_PLASTIC.ingot(), 16), new ComparableStack(ModItems.part_generic, 4, EnumPartType.GLASS_POLARIZED), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CAPACITOR), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC))); this.register(new GenericRecipe("ass.silex").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_silex, 1)) .inputItems(new ComparableStack(ModBlocks.glass_quartz, 16), new OreDictStack(STEEL.plateCast(), 8), new OreDictStack(DESH.ingot(), 4), new OreDictStack(RUBBER.ingot(), 8), new OreDictStack(STEEL.pipe(), 8))); this.register(new GenericRecipe("ass.excavator").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_excavator, 1)) @@ -669,6 +670,15 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.50bmgbypass").setup(100, 100).outputItems(new ItemStack(ModItems.ammo_secret, 12, EnumAmmoSecret.BMG50_BLACK.ordinal())) .inputItems(new ComparableStack(ModItems.casing, 2, EnumCasingType.LARGE_STEEL), new OreDictStack(ANY_SMOKELESS.dust(), 24), new ComparableStack(ModItems.item_secret, 1, EnumSecretType.SELENIUM_STEEL), new ComparableStack(ModItems.black_diamond)) .setPools(GenericRecipes.POOL_PREFIX_SECRET + "psalm")); + this.register(new GenericRecipe("chem.shellchlorine").setup(100, 1_000).outputItems(new ItemStack(ModItems.ammo_arty, 1, 9)) + .inputItems(new ComparableStack(ModItems.ammo_arty, 1, 0), new OreDictStack(ANY_PLASTIC.ingot(), 1)) + .inputFluids(new FluidStack(Fluids.CHLORINE, 4_000))); + this.register(new GenericRecipe("ass.shellphosgene").setup(100, 1_000).outputItems(new ItemStack(ModItems.ammo_arty, 1, 10)) + .inputItems(new ComparableStack(ModItems.ammo_arty, 1, 0), new OreDictStack(ANY_PLASTIC.ingot(), 1)) + .inputFluids(new FluidStack(Fluids.PHOSGENE, 4_000))); + this.register(new GenericRecipe("ass.shellmustard").setup(100, 1_000).outputItems(new ItemStack(ModItems.ammo_arty, 1, 11)) + .inputItems(new ComparableStack(ModItems.ammo_arty, 1, 0), new OreDictStack(ANY_PLASTIC.ingot(), 1)) + .inputFluids(new FluidStack(Fluids.MUSTARDGAS, 4_000))); // tools this.register(new GenericRecipe("ass.multitool").setup(100, 100).outputItems(new ItemStack(ModItems.multitool_hit, 1)) @@ -773,6 +783,19 @@ public class AssemblyMachineRecipes extends GenericRecipes { new ComparableStack(ModItems.part_generic, 64, EnumPartType.HDE), new ComparableStack(ModItems.circuit, 64, EnumCircuitType.CONTROLLER_QUANTUM), new ComparableStack(ModItems.coin_ufo, 1)).setPools(GenericRecipes.POOL_PREFIX_DISCOVER + "gerald")); + + this.register(new GenericRecipe("ass.emptypackage").setup(40, 100).outputItems(new ItemStack(ModItems.fluid_pack_empty, 1)) + .inputItems(new OreDictStack(TI.plate(), 4), new OreDictStack(ANY_PLASTIC.ingot(), 2))); + + FluidType[] order = Fluids.getInNiceOrder(); + for(int i = 1; i < order.length; ++i) { + FluidType type = order[i]; + if(type.hasNoContainer()) continue; + this.register(new GenericRecipe("ass.package" + type.getUnlocalizedName()).setup(100, 100).outputItems(new ItemStack(ModItems.fluid_pack_full, 1, type.getID())) + .inputItems(new ComparableStack(ModItems.fluid_pack_empty)).inputFluids(new FluidStack(type, 32_000))); + this.register(new GenericRecipe("ass.unpackage" + type.getUnlocalizedName()).setup(100, 100).setIcon(ItemFluidIcon.make(type, 32_000)).outputItems(new ItemStack(ModItems.fluid_pack_empty)) + .inputItems(new ComparableStack(ModItems.fluid_pack_full, 1, type.getID())).outputFluids(new FluidStack(type, 32_000))); + } if(GeneralConfig.enableMekanismChanges && Loader.isModLoaded("Mekanism")) { Block mb = (Block) Block.blockRegistry.getObject("Mekanism:MachineBlock"); diff --git a/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java index ca4bcc193..4bbf1074c 100644 --- a/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java @@ -268,21 +268,6 @@ public class ChemicalPlantRecipes extends GenericRecipes { .inputFluids(new FluidStack(Fluids.UNSATURATEDS, 500, GeneralConfig.enable528 ? 1 : 0)) .outputItems(new ItemStack(ModItems.ingot_c4, 4))); - this.register(new GenericRecipe("chem.shellchlorine").setup(100, 1_000) - .inputItems(new ComparableStack(ModItems.ammo_arty, 1, 0), new OreDictStack(ANY_PLASTIC.ingot(), 1)) - .inputFluids(new FluidStack(Fluids.CHLORINE, 4_000)) - .outputItems(new ItemStack(ModItems.ammo_arty, 1, 9))); - - this.register(new GenericRecipe("chem.shellphosgene").setup(100, 1_000) - .inputItems(new ComparableStack(ModItems.ammo_arty, 1, 0), new OreDictStack(ANY_PLASTIC.ingot(), 1)) - .inputFluids(new FluidStack(Fluids.PHOSGENE, 4_000)) - .outputItems(new ItemStack(ModItems.ammo_arty, 1, 10))); - - this.register(new GenericRecipe("chem.shellmustard").setup(100, 1_000) - .inputItems(new ComparableStack(ModItems.ammo_arty, 1, 0), new OreDictStack(ANY_PLASTIC.ingot(), 1)) - .inputFluids(new FluidStack(Fluids.MUSTARDGAS, 4_000)) - .outputItems(new ItemStack(ModItems.ammo_arty, 1, 11))); - /// GLASS /// this.register(new GenericRecipe("chem.laminate").setup(20, 100) .inputFluids(new FluidStack(Fluids.XYLENE, 50), new FluidStack(Fluids.PHOSGENE, 50)) diff --git a/src/main/java/com/hbm/itempool/ItemPoolsLegacy.java b/src/main/java/com/hbm/itempool/ItemPoolsLegacy.java index ef3bc5569..289a495e9 100644 --- a/src/main/java/com/hbm/itempool/ItemPoolsLegacy.java +++ b/src/main/java/com/hbm/itempool/ItemPoolsLegacy.java @@ -130,8 +130,6 @@ public class ItemPoolsLegacy { weighted(ModItems.bomb_caller, 1, 1, 1, 1), weighted(ModItems.bomb_caller, 2, 1, 1, 1), weighted(ModItems.gas_mask_filter, 0, 1, 1, 4), - weighted(ModItems.journal_pip, 0, 1, 1, 1), - weighted(ModItems.journal_bj, 0, 1, 1, 1), weighted(ModItems.launch_code_piece, 0, 1, 1, 1), weighted(ModItems.gun_double_barrel, 0, 1, 1, 1), }; diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 3ded60786..41b783fc6 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -844,6 +844,8 @@ public class ModItems { public static Item fluid_barrel_full; public static Item fluid_barrel_empty; public static Item fluid_barrel_infinite; + public static Item fluid_pack_full; + public static Item fluid_pack_empty; public static Item pipette; public static Item pipette_boron; public static Item pipette_laboratory; @@ -1181,12 +1183,12 @@ public class ModItems { public static Item blueprints; public static Item template_folder; - public static Item journal_pip; - public static Item journal_bj; - public static Item journal_silver; - public static Item assembly_template; - public static Item chemistry_template; - public static Item chemistry_icon; + @Deprecated public static Item journal_pip; + @Deprecated public static Item journal_bj; + @Deprecated public static Item journal_silver; + @Deprecated public static Item assembly_template; + @Deprecated public static Item chemistry_template; + @Deprecated public static Item chemistry_icon; public static Item crucible_template; public static Item fluid_identifier; public static Item fluid_identifier_multi; @@ -4115,6 +4117,8 @@ public class ModItems { fluid_barrel_empty = new Item().setUnlocalizedName("fluid_barrel_empty").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_barrel"); fluid_barrel_full = new ItemFluidTank().setUnlocalizedName("fluid_barrel_full").setContainerItem(ModItems.fluid_barrel_empty).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_barrel"); fluid_barrel_infinite = new ItemInfiniteFluid(null, 1_000_000_000).setUnlocalizedName("fluid_barrel_infinite").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_barrel_infinite"); + fluid_pack_empty = new Item().setUnlocalizedName("fluid_pack_empty").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_pack"); + fluid_pack_full = new ItemFluidTank().setUnlocalizedName("fluid_pack_full").setContainerItem(ModItems.fluid_pack_empty).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_pack"); pipette = new ItemPipette().setUnlocalizedName("pipette").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pipette"); pipette_boron = new ItemPipette().setUnlocalizedName("pipette_boron").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pipette_boron"); pipette_laboratory = new ItemPipette().setUnlocalizedName("pipette_laboratory").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pipette_laboratory"); @@ -5686,6 +5690,10 @@ public class ModItems { GameRegistry.registerItem(fluid_barrel_empty, fluid_barrel_empty.getUnlocalizedName()); GameRegistry.registerItem(fluid_barrel_full, fluid_barrel_full.getUnlocalizedName()); GameRegistry.registerItem(fluid_barrel_infinite, fluid_barrel_infinite.getUnlocalizedName()); + + //Packaged fluids + GameRegistry.registerItem(fluid_pack_empty, fluid_pack_empty.getUnlocalizedName()); + GameRegistry.registerItem(fluid_pack_full, fluid_pack_full.getUnlocalizedName()); //Pipette GameRegistry.registerItem(pipette, pipette.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/machine/ItemAssemblyTemplate.java b/src/main/java/com/hbm/items/machine/ItemAssemblyTemplate.java index 7a1c26a0b..76f38f7d6 100644 --- a/src/main/java/com/hbm/items/machine/ItemAssemblyTemplate.java +++ b/src/main/java/com/hbm/items/machine/ItemAssemblyTemplate.java @@ -24,6 +24,7 @@ import net.minecraft.util.IIcon; import net.minecraft.util.StatCollector; import net.minecraftforge.oredict.OreDictionary; +@Deprecated public class ItemAssemblyTemplate extends Item { @SideOnly(Side.CLIENT) @@ -157,6 +158,7 @@ public class ItemAssemblyTemplate extends Item { @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { + list.add(EnumChatFormatting.RED + "Deprecated"); if(!(stack.getItem() instanceof ItemAssemblyTemplate)) return; @@ -198,9 +200,6 @@ public class ItemAssemblyTemplate extends Item { a++; } - list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("info.templatefolder", String.join(" / ", names))); - list.add(""); - if(out == null) { list.add("I AM ERROR"); return; diff --git a/src/main/java/com/hbm/items/machine/ItemBlueprints.java b/src/main/java/com/hbm/items/machine/ItemBlueprints.java index 84976e8c5..874cfd6f6 100644 --- a/src/main/java/com/hbm/items/machine/ItemBlueprints.java +++ b/src/main/java/com/hbm/items/machine/ItemBlueprints.java @@ -56,13 +56,19 @@ public class ItemBlueprints extends Item { @SideOnly(Side.CLIENT) public void getSubItems(Item item, CreativeTabs tab, List list) { for(Entry> pool : GenericRecipes.blueprintPools.entrySet()) { - list.add(make(pool.getKey())); + String poolName = pool.getKey(); + if(!poolName.startsWith(GenericRecipes.POOL_PREFIX_SECRET)) list.add(make(poolName)); } } @Override public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { if(world.isRemote) return stack; + if(!stack.hasTagCompound()) return stack; + + String poolName = stack.stackTagCompound.getString("pool"); + + if(poolName.startsWith(GenericRecipes.POOL_PREFIX_SECRET)) return stack; if(!player.inventory.hasItem(Items.paper)) return stack; player.inventory.consumeInventoryItem(Items.paper); @@ -94,7 +100,6 @@ public class ItemBlueprints extends Item { @Override @SideOnly(Side.CLIENT) public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { - list.add(EnumChatFormatting.RED + "Right-click to copy (requires paper)"); if(!stack.hasTagCompound()) { return; @@ -106,6 +111,11 @@ public class ItemBlueprints extends Item { if(pool == null || pool.isEmpty()) { return; } + if(poolName.startsWith(GenericRecipes.POOL_PREFIX_SECRET)) { + list.add(EnumChatFormatting.RED + "Cannot be copied!"); + } else { + list.add(EnumChatFormatting.YELLOW + "Right-click to copy (requires paper)"); + } for(String name : pool) { GenericRecipe recipe = GenericRecipes.pooledBlueprints.get(name); diff --git a/src/main/java/com/hbm/items/machine/ItemChemistryIcon.java b/src/main/java/com/hbm/items/machine/ItemChemistryIcon.java index f3e190dc5..41cd901c9 100644 --- a/src/main/java/com/hbm/items/machine/ItemChemistryIcon.java +++ b/src/main/java/com/hbm/items/machine/ItemChemistryIcon.java @@ -15,6 +15,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import net.minecraft.util.StatCollector; +@Deprecated public class ItemChemistryIcon extends Item { @SideOnly(Side.CLIENT) diff --git a/src/main/java/com/hbm/items/machine/ItemChemistryTemplate.java b/src/main/java/com/hbm/items/machine/ItemChemistryTemplate.java index d644a4515..b310805b6 100644 --- a/src/main/java/com/hbm/items/machine/ItemChemistryTemplate.java +++ b/src/main/java/com/hbm/items/machine/ItemChemistryTemplate.java @@ -16,6 +16,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.StatCollector; +@Deprecated public class ItemChemistryTemplate extends Item { public ItemChemistryTemplate() { @@ -51,6 +52,7 @@ public class ItemChemistryTemplate extends Item { @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { + list.add(EnumChatFormatting.RED + "Deprecated"); if(!(stack.getItem() instanceof ItemChemistryTemplate)) return; @@ -61,9 +63,6 @@ public class ItemChemistryTemplate extends Item { return; } - list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("info.templatefolder", I18nUtil.resolveKey(ModItems.template_folder.getUnlocalizedName() + ".name"))); - list.add(""); - try { list.add(EnumChatFormatting.BOLD + I18nUtil.resolveKey("info.template_out_p")); for(int i = 0; i < 4; i++) { diff --git a/src/main/java/com/hbm/items/machine/ItemFluidTank.java b/src/main/java/com/hbm/items/machine/ItemFluidTank.java index ce7a2cd0d..a8642652a 100644 --- a/src/main/java/com/hbm/items/machine/ItemFluidTank.java +++ b/src/main/java/com/hbm/items/machine/ItemFluidTank.java @@ -30,9 +30,7 @@ public class ItemFluidTank extends Item { for(int i = 1; i < order.length; ++i) { FluidType type = order[i]; - if(type.hasNoContainer()) - continue; - + if(type.hasNoContainer()) continue; int id = type.getID(); if(type.needsLeadContainer()) { @@ -46,14 +44,10 @@ public class ItemFluidTank extends Item { } } + @Override public String getItemStackDisplayName(ItemStack stack) { - String s = ("" + StatCollector.translateToLocal(this.getUnlocalizedName() + ".name")).trim(); String s1 = ("" + StatCollector.translateToLocal(Fluids.fromID(stack.getItemDamage()).getConditionalName())).trim(); - - if(s1 != null) { - s = s + " " + s1; - } - + String s = ("" + StatCollector.translateToLocalFormatted(this.getUnlocalizedName() + ".name", s1)).trim(); return s; } @@ -68,12 +62,10 @@ public class ItemFluidTank extends Item { public void registerIcons(IIconRegister p_94581_1_) { super.registerIcons(p_94581_1_); - if(this == ModItems.fluid_tank_full) - this.overlayIcon = p_94581_1_.registerIcon("hbm:fluid_tank_overlay"); - if(this == ModItems.fluid_tank_lead_full) - this.overlayIcon = p_94581_1_.registerIcon("hbm:fluid_tank_lead_overlay"); - if(this == ModItems.fluid_barrel_full) - this.overlayIcon = p_94581_1_.registerIcon("hbm:fluid_barrel_overlay"); + if(this == ModItems.fluid_tank_full) this.overlayIcon = p_94581_1_.registerIcon("hbm:fluid_tank_overlay"); + if(this == ModItems.fluid_tank_lead_full) this.overlayIcon = p_94581_1_.registerIcon("hbm:fluid_tank_lead_overlay"); + if(this == ModItems.fluid_barrel_full) this.overlayIcon = p_94581_1_.registerIcon("hbm:fluid_barrel_overlay"); + if(this == ModItems.fluid_pack_full) this.overlayIcon = p_94581_1_.registerIcon("hbm:fluid_pack_overlay"); } @Override @@ -84,18 +76,13 @@ public class ItemFluidTank extends Item { @Override @SideOnly(Side.CLIENT) - public int getColorFromItemStack(ItemStack stack, int p_82790_2_) { - if(p_82790_2_ == 0) { + public int getColorFromItemStack(ItemStack stack, int pass) { + if(pass == 0) { return 16777215; } else { int j = Fluids.fromID(stack.getItemDamage()).getColor(); - - if(j < 0) { - j = 16777215; - } - + if(j < 0) j = 16777215; return j; } } - } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java b/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java index c13f16a26..33c583b54 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java @@ -27,6 +27,8 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; import net.minecraft.util.DamageSource; import net.minecraft.util.MovingObjectPosition; @@ -942,7 +944,7 @@ public class Orchestras { if(timer == 2) { SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory); - if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, 0.375, aiming ? -0.0625 : -0.125, aiming ? 0 : -0.25D, 0, 0.18, -0.12, 0.01, -10F + (float)entity.getRNG().nextGaussian() * 2.5F, (float)entity.getRNG().nextGaussian() * -20F + 15F, casing.getName(), false, 60, 0.5D, 20); + if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, 0.375, aiming ? -0.0625 : -0.125, aiming ? -0.125 : -0.25D, 0, 0.18, -0.12, 0.01, -10F + (float)entity.getRNG().nextGaussian() * 2.5F, (float)entity.getRNG().nextGaussian() * -20F + 15F, casing.getName(), false, 60, 0.5D, 20); } } @@ -969,6 +971,11 @@ public class Orchestras { if(timer == 30) entity.worldObj.playSoundAtEntity(entity, "hbm:player.gulp", 1F, 1F); if(timer == 35) entity.worldObj.playSoundAtEntity(entity, "hbm:player.gulp", 1F, 1F); if(timer == 50) entity.worldObj.playSoundAtEntity(entity, "hbm:player.groan", 1F, 1F); + if(timer == 60) { + entity.addPotionEffect(new PotionEffect(Potion.damageBoost.id, 30 * 20, 2)); + entity.addPotionEffect(new PotionEffect(Potion.resistance.id, 30 * 20, 2)); + entity.addPotionEffect(new PotionEffect(Potion.confusion.id, 10 * 20, 0)); + } } }; diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java index 490bd64b7..44f9d046f 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java @@ -375,7 +375,7 @@ public class XFactory12ga { ).setUnlocalizedName("gun_autoshotgun_shredder"); ModItems.gun_autoshotgun_sexy = new ItemGunBaseNT(WeaponQuality.LEGENDARY, new GunConfig() - .dura(5_000).draw(20).inspect(33).reloadSequential(true).crosshair(Crosshair.L_CIRCLE).hideCrosshair(false).smoke(Lego.LAMBDA_STANDARD_SMOKE) + .dura(5_000).draw(20).inspect(65).reloadSequential(true).inspectCancel(false).crosshair(Crosshair.L_CIRCLE).hideCrosshair(false).smoke(Lego.LAMBDA_STANDARD_SMOKE) .rec(new Receiver(0) .dmg(64F).delay(4).auto(true).dryfireAfterAuto(true).reload(110).jam(19).sound("hbm:weapon.fire.shotgunAuto", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 100).addConfigs(g12_equestrian_bj, g12_bp, g12_bp_magnum, g12_bp_slug, g12, g12_slug, g12_flechette, g12_magnum, g12_explosive, g12_phosphorus)) diff --git a/src/main/java/com/hbm/module/machine/ModuleMachineAssembler.java b/src/main/java/com/hbm/module/machine/ModuleMachineAssembler.java index 1823b540b..2316ad787 100644 --- a/src/main/java/com/hbm/module/machine/ModuleMachineAssembler.java +++ b/src/main/java/com/hbm/module/machine/ModuleMachineAssembler.java @@ -3,6 +3,7 @@ package com.hbm.module.machine; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.recipes.AssemblyMachineRecipes; import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.util.BobMathUtil; import api.hbm.energymk2.IEnergyHandlerMK2; import net.minecraft.item.ItemStack; @@ -21,6 +22,14 @@ public class ModuleMachineAssembler extends ModuleMachineBase { public GenericRecipe getRecipe() { return AssemblyMachineRecipes.INSTANCE.recipeNameMap.get(this.recipe); } + + @Override + public void setupTanks(GenericRecipe recipe) { + super.setupTanks(recipe); + if(recipe == null) return; + for(int i = 0; i < inputTanks.length; i++) if(recipe.inputFluid != null && recipe.inputFluid.length > i) inputTanks[i].changeTankSize(BobMathUtil.max(inputTanks[i].getFill(), recipe.inputFluid[i].fill * 2, 4_000)); + for(int i = 0; i < outputTanks.length; i++) if(recipe.outputFluid != null && recipe.outputFluid.length > i) outputTanks[i].changeTankSize(BobMathUtil.max(outputTanks[i].getFill(), recipe.outputFluid[i].fill * 2, 4_000)); + } public ModuleMachineAssembler itemInput(int from) { for(int i = 0; i < inputSlots.length; i++) inputSlots[i] = from + i; return this; } public ModuleMachineAssembler itemOutput(int a) { outputSlots[0] = a; return this; } diff --git a/src/main/java/com/hbm/render/tileentity/RenderAssemblyMachine.java b/src/main/java/com/hbm/render/tileentity/RenderAssemblyMachine.java index 1111a998a..5900c0f84 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderAssemblyMachine.java +++ b/src/main/java/com/hbm/render/tileentity/RenderAssemblyMachine.java @@ -13,13 +13,11 @@ import com.hbm.tileentity.machine.TileEntityMachineAssemblyMachine; import com.hbm.util.BobMathUtil; import net.minecraft.block.Block; -import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; @@ -109,7 +107,6 @@ public class RenderAssemblyMachine extends TileEntitySpecialRenderer implements GL11.glRotated(90, 0, 1, 0); GL11.glTranslated(0, 1.0625, 0); - EntityPlayer player = Minecraft.getMinecraft().thePlayer; ItemStack stack = recipe.getIcon(); stack.stackSize = 1; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java index 2ad98b8c0..ecc1c787c 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java @@ -11,6 +11,8 @@ import com.hbm.inventory.container.ContainerMachineAssemblyMachine; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIMachineAssemblyMachine; +import com.hbm.inventory.recipes.AssemblyMachineRecipes; +import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; @@ -44,7 +46,7 @@ public class TileEntityMachineAssemblyMachine extends TileEntityMachineBase impl public FluidTank outputTank; public long power; - public long maxPower = 1_000_000; + public long maxPower = 100_000; public boolean didProcess = false; public boolean frame = false; @@ -63,8 +65,8 @@ public class TileEntityMachineAssemblyMachine extends TileEntityMachineBase impl public TileEntityMachineAssemblyMachine() { super(17); - this.inputTank = new FluidTank(Fluids.NONE, 32_000); - this.outputTank = new FluidTank(Fluids.NONE, 32_000); + this.inputTank = new FluidTank(Fluids.NONE, 4_000); + this.outputTank = new FluidTank(Fluids.NONE, 4_000); for(int i = 0; i < this.arms.length; i++) this.arms[i] = new AssemblerArm(); @@ -85,6 +87,12 @@ public class TileEntityMachineAssemblyMachine extends TileEntityMachineBase impl if(!worldObj.isRemote) { + GenericRecipe recipe = AssemblyMachineRecipes.INSTANCE.recipeNameMap.get(assemblerModule.recipe); + if(recipe != null) { + this.maxPower = recipe.power * 100; + } + this.maxPower = BobMathUtil.max(this.power, this.maxPower, 100_000); + this.power = Library.chargeTEFromItems(slots, 0, power, maxPower); upgradeManager.checkSlots(slots, 2, 3); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java index dfcd1c50d..ca0c259c7 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java @@ -10,6 +10,8 @@ import com.hbm.inventory.container.ContainerMachineChemicalFactory; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIMachineChemicalFactory; +import com.hbm.inventory.recipes.ChemicalPlantRecipes; +import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; @@ -49,7 +51,7 @@ public class TileEntityMachineChemicalFactory extends TileEntityMachineBase impl public FluidTank lps; public long power; - public long maxPower = 10_000_000; + public long maxPower = 1_000_000; public boolean[] didProcess = new boolean[4]; public boolean frame = false; @@ -130,6 +132,16 @@ public class TileEntityMachineChemicalFactory extends TileEntityMachineBase impl if(!worldObj.isRemote) { + long nextMaxPower = 0; + for(int i = 0; i < 4; i++) { + GenericRecipe recipe = ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(chemplantModule[i].recipe); + if(recipe != null) { + nextMaxPower += recipe.power * 100; + } + } + this.maxPower = nextMaxPower; + this.maxPower = BobMathUtil.max(this.power, this.maxPower, 1_000_000); + this.power = Library.chargeTEFromItems(slots, 0, power, maxPower); upgradeManager.checkSlots(slots, 1, 3); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java index 6a21f07de..97ebd11bf 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java @@ -10,6 +10,8 @@ import com.hbm.inventory.container.ContainerMachineChemicalPlant; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIMachineChemicalPlant; +import com.hbm.inventory.recipes.ChemicalPlantRecipes; +import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; @@ -43,7 +45,7 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem public FluidTank[] outputTanks; public long power; - public long maxPower = 1_000_000; + public long maxPower = 100_000; public boolean didProcess = false; public boolean frame = false; @@ -83,6 +85,12 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem if(!worldObj.isRemote) { + GenericRecipe recipe = ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(chemplantModule.recipe); + if(recipe != null) { + this.maxPower = recipe.power * 100; + } + this.maxPower = BobMathUtil.max(this.power, this.maxPower, 100_000); + this.power = Library.chargeTEFromItems(slots, 0, power, maxPower); upgradeManager.checkSlots(slots, 2, 3); diff --git a/src/main/java/com/hbm/util/ShadyUtil.java b/src/main/java/com/hbm/util/ShadyUtil.java index 03a2390ab..7f6d3351f 100644 --- a/src/main/java/com/hbm/util/ShadyUtil.java +++ b/src/main/java/com/hbm/util/ShadyUtil.java @@ -144,8 +144,8 @@ public class ShadyUtil { Field field = ReflectionHelper.findField(test, decode(offset(checksum, -2))); if(field != null) { System.out.println("TEST SECTION START"); - Class toLoad = Class.forName(decode(offset(testCase, -2))); - Field toRead = ReflectionHelper.findField(toLoad, decode(offset(testValue, -2))); + //Class toLoad = Class.forName(decode(offset(testCase, -2))); + //Field toRead = ReflectionHelper.findField(toLoad, decode(offset(testValue, -2))); //ModEventHandler.reference = toRead; System.out.println("TEST SECTION END"); } diff --git a/src/main/java/com/hbm/world/gen/util/LogicBlockInteractions.java b/src/main/java/com/hbm/world/gen/util/LogicBlockInteractions.java index bf3bc47eb..b9ee4dde1 100644 --- a/src/main/java/com/hbm/world/gen/util/LogicBlockInteractions.java +++ b/src/main/java/com/hbm/world/gen/util/LogicBlockInteractions.java @@ -7,7 +7,6 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.potion.PotionEffect; import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; import java.util.ArrayList; import java.util.LinkedHashMap; @@ -22,13 +21,8 @@ public class LogicBlockInteractions { public static LinkedHashMap> interactions = new LinkedHashMap<>(); public static Consumer TEST = (array) -> { - World world = (World) array[0]; LogicBlock.TileEntityLogicBlock logic = (LogicBlock.TileEntityLogicBlock) array[1]; - int x = (int) array[2]; - int y = (int) array[3]; - int z = (int) array[4]; EntityPlayer player = (EntityPlayer) array[5]; - int side = (int) array[6]; if(logic.phase > 1) return; diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 1e54344ec..2cc9428b9 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -1966,7 +1966,7 @@ item.fleija_igniter.name=Impulszünder item.fleija_kit.name=F.L.E.I.J.A. Kit item.fleija_propellant.name=Schrabidiumtreibladung item.fluid_barrel_empty.name=Leeres Fass -item.fluid_barrel_full.name=Flüssigkeitsfass: +item.fluid_barrel_full.name=Flüssigkeitsfass: %s item.fluid_barrel_infinite.name=Unendliches Fass item.fluid_duct.name=Flüssigkeitsrohr: item.fluid_identifier.name=Flüssigkeits-Kennzeichnung @@ -1977,10 +1977,12 @@ item.fluid_identifier.usage2=einer maximalen Reichweite von 64 Rohren zuzuweisen item.fluid_identifier_multi.name=Multi-Flüssigkeits-Kennzeichnung item.fluid_identifier_multi.info=Universelle Flüssigkeits-Kennzeichnung für: item.fluid_identifier_multi.info2=Sekundärer Typ: +item.fluid_pack_empty.name=Großer Flüssigkeitsbehälter +item.fluid_pack_full.name=%s (Abgepackt) item.fluid_tank_empty.name=Leere universelle Flüssigkeitszelle -item.fluid_tank_full.name=Universelle Flüssigkeitszelle: +item.fluid_tank_full.name=Universelle Flüssigkeitszelle: %s item.fluid_tank_lead_empty.name=Leere Gefahrenstoffzelle -item.fluid_tank_lead_full.name=Gefahrenstoffzelle: +item.fluid_tank_lead_full.name=Gefahrenstoffzelle: %s item.fluorite.name=Fluorit item.flywheel_beryllium.name=Berylliumschwungscheibe item.fmn.name=Flunitrazepamtablette diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index fb3f37c9a..53f1112b2 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -2772,7 +2772,7 @@ item.fleija_igniter.name=Pulse Igniter item.fleija_kit.name=F.L.E.I.J.A. Kit item.fleija_propellant.name=Schrabidium Propellant item.fluid_barrel_empty.name=Empty Fluid Barrel -item.fluid_barrel_full.name=Fluid Barrel: +item.fluid_barrel_full.name=Fluid Barrel: %s item.fluid_barrel_infinite.name=Infinite Fluid Barrel item.fluid_duct.name=Fluid Duct: item.fluid_identifier.name=Fluid Identifier @@ -2783,10 +2783,12 @@ item.fluid_identifier.usage2=up to a maximum range of 64 ducts. item.fluid_identifier_multi.name=Multi Fluid Identifier item.fluid_identifier_multi.info=Universal fluid identifier for: item.fluid_identifier_multi.info2=Secondary type: +item.fluid_pack_empty.name=Large Fluid Container +item.fluid_pack_full.name=Packaged %s item.fluid_tank_empty.name=Empty Universal Fluid Tank -item.fluid_tank_full.name=Universal Fluid Tank: +item.fluid_tank_full.name=Universal Fluid Tank: %s item.fluid_tank_lead_empty.name=Empty Hazardous Material Tank -item.fluid_tank_lead_full.name=Hazardous Material Tank: +item.fluid_tank_lead_full.name=Hazardous Material Tank: %s item.fluorite.name=Fluorite item.flywheel_beryllium.name=Beryllium Flywheel item.fmn.name=Flunitrazepam Tablet diff --git a/src/main/resources/assets/hbm/sounds.json b/src/main/resources/assets/hbm/sounds.json index 2d472a53a..1b5db22f5 100644 --- a/src/main/resources/assets/hbm/sounds.json +++ b/src/main/resources/assets/hbm/sounds.json @@ -222,6 +222,7 @@ "weapon.explosionSmallNear": {"category": "player", "sounds": ["weapon/explosionSmallNear1", "weapon/explosionSmallNear2", "weapon/explosionSmallNear3"]}, "weapon.explosionSmallFar": {"category": "player", "sounds": ["weapon/explosionSmallFar1", "weapon/explosionSmallFar2"]}, "weapon.explosionTiny": {"category": "player", "sounds": ["weapon/explosionTiny1", "weapon/explosionTiny2"]}, + "weapon.hkShoot": {"category": "player", "sounds": [{"name": "weapon/hkShoot", "stream": false}]}, "weapon.dFlash": {"category": "player", "sounds": [{"name": "weapon/dFlash", "stream": false}]}, diff --git a/src/main/resources/assets/hbm/sounds/weapon/hkShoot.ogg b/src/main/resources/assets/hbm/sounds/weapon/hkShoot.ogg new file mode 100644 index 0000000000000000000000000000000000000000..883b0e46a39fb7fa8fc73e9ef150d80b9c2dc337 GIT binary patch literal 13919 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 C3&rsO literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/fluid_pack.png b/src/main/resources/assets/hbm/textures/items/fluid_pack.png new file mode 100644 index 0000000000000000000000000000000000000000..c3c5de9aadd096d963c82b0e28760433d44875ae GIT binary patch literal 477 zcmV<30V4j1P)GQdk5fXlDuw5h7ON0tCql6dMaWF&5S-odsB1 zi22A=1ks_JV2ve|4RAB{#5z&pV4c$^G}LxLc{G)+`h zMV4jq`8_YDyDHU!fLgmSS*ssWB|C` zZk*3&5m+b`05}{DD2f8WZnu+U0MGN7&1Q_pV`Nzd;Q4&=csxXc`~42U^?D@?L&4tx zN~O}I+wG$3I?LsfdcBUW>*%_Us;UeI1Ho&x8kI_gTrP*$!Rw5!>;Bkw5Co|l;4OX} zt6VOVq%w&~UzvoWkKTZ>%-EK#*MF6&KOaJjt(wzUp TSkw6%00000NkvXXu0mjf^sUr1 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/fluid_pack_overlay.png b/src/main/resources/assets/hbm/textures/items/fluid_pack_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..0de07193ea21f97b716c3b3195a9433c0484c4c1 GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfNS%G}%0G|+72L~TDHRF_&g0ixvWy>}(GxHxicG=fA5-1-u+2RY3;w%aB3;quU z48i^tLLk8ckH}&M2EM}}%y>M1MG8V>FE~M){gB*Er53MrABzB`T8K~y-6&62SR z!!QsdiD{a!EDOB%Sl1QK zxv0n`72_i*RWp%bV;Z)$Wg@{ug3D4LXQk>OUeLif-ZB6viUL~e!_V^^RaFJd*CPB` vfqg*pJYyJ!!}s39ITtXye!mB&SNXIaDsWj1790q700000NkvXXu0mjfG8kqY diff --git a/src/main/resources/assets/hbm/textures/items/fluid_tank_lead_overlay.png b/src/main/resources/assets/hbm/textures/items/fluid_tank_lead_overlay.png index 2fd03ec75d1b0bb9928ff8e8df98d451f10ec506..10b09d8fde13539a299a135348cedd59e1950ad4 100644 GIT binary patch delta 152 zcmZo++`>3PrJk`k$lZxy-8q?;3=9k`>5jgR3=A9lx&I`x0{NT;9+AZi419+{nDKc2 ziWH!rzNd?0h=qT$1nc64We0BD_+ih%FjK+Dsv&b<@pHa7<{1l2*mhKZ*PCL>^?{j< wjp2u_;O-CU=bM3A`BEc1(|mmyw18|5AZB0?WMH@yJQ>9DboFyt=akR{0Q=M}T>t<8 delta 103 zcmdnO*upqLC4r^b$uool2x>S|Iv5xjtUX;ELo9le6C_xhW$x@QfBzo@Cg&cg*Eq1e zt#g9n_xJaYYx`edaAH``2xO;M{QF~>8*9KNA;Iv?TD( Date: Mon, 21 Jul 2025 00:52:02 +0200 Subject: [PATCH 6/9] 1v1 me on twitter vro --- changelog | 2 + gradle.properties | 2 +- .../handler/nei/AssemblerRecipeHandler.java | 176 ---------- .../nei/AssemblyMachineRecipeHandler.java | 18 + .../nei/ChemicalPlantRecipeHandler.java | 9 +- .../handler/nei/ChemplantRecipeHandler.java | 236 ------------- .../handler/nei/NEIGenericRecipeHandler.java | 321 ++++++++++++++++++ .../hbm/handler/nei/NEIUniversalHandler.java | 10 +- .../recipes/AssemblyMachineRecipes.java | 19 +- .../recipes/loader/GenericRecipe.java | 5 +- src/main/java/com/hbm/items/ModItems.java | 7 + .../com/hbm/items/machine/ItemBlueprints.java | 2 +- .../items/machine/ItemChemistryTemplate.java | 1 - src/main/java/com/hbm/lib/RefStrings.java | 2 +- src/main/java/com/hbm/main/NEIRegistry.java | 3 +- .../assets/hbm/textures/gui/nei/gui_nei.png | Bin 1635 -> 1741 bytes 16 files changed, 372 insertions(+), 441 deletions(-) delete mode 100644 src/main/java/com/hbm/handler/nei/AssemblerRecipeHandler.java create mode 100644 src/main/java/com/hbm/handler/nei/AssemblyMachineRecipeHandler.java delete mode 100644 src/main/java/com/hbm/handler/nei/ChemplantRecipeHandler.java create mode 100644 src/main/java/com/hbm/handler/nei/NEIGenericRecipeHandler.java diff --git a/changelog b/changelog index 07f6038d5..1b5ea3998 100644 --- a/changelog +++ b/changelog @@ -9,6 +9,7 @@ * Replace the journals * Instead of opening them and making a template, they act as a multi template * Blueprints need to remain in the slot, removing them will disable the recipes again + * Not actually part of worldgen yet - yeah i ran out of time, cry about it * More paintables * Paintable pneumatic tube * Behaves the exact same as a regular pneumatic tube @@ -38,6 +39,7 @@ * Chemical artillery shell recipes have now been moved to the assembler * The chemical plant and factory now scale their max power based on the recipe, similar to how the arc welder works * The chemical plant's default max power is now 100kHE again instead of 1MHE +* The NEI handlers for the old chemplant and assembler have been deactivated, however they will continue to function for the time being ## Fixed * Fixed gas centrifuge sound persisting when broken or when unloaded diff --git a/gradle.properties b/gradle.properties index 681ea595b..70b2eaeea 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_version=1.0.27 # Empty build number makes a release type -mod_build_number=5383 +mod_build_number=5397 credits=HbMinecraft,\ \ rodolphito (explosion algorithms),\ diff --git a/src/main/java/com/hbm/handler/nei/AssemblerRecipeHandler.java b/src/main/java/com/hbm/handler/nei/AssemblerRecipeHandler.java deleted file mode 100644 index d3ddb9df0..000000000 --- a/src/main/java/com/hbm/handler/nei/AssemblerRecipeHandler.java +++ /dev/null @@ -1,176 +0,0 @@ -package com.hbm.handler.nei; - -import java.awt.Rectangle; -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; - -import com.hbm.blocks.ModBlocks; -import com.hbm.handler.imc.ICompatNHNEI; -import com.hbm.inventory.RecipesCommon.ComparableStack; -import com.hbm.inventory.gui.GUIMachineAssembler; -import com.hbm.inventory.recipes.AssemblerRecipes; -import com.hbm.items.ModItems; -import com.hbm.items.machine.ItemAssemblyTemplate; -import com.hbm.lib.RefStrings; - -import codechicken.nei.NEIServerUtils; -import codechicken.nei.PositionedStack; -import codechicken.nei.recipe.TemplateRecipeHandler; -import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.item.ItemStack; - -public class AssemblerRecipeHandler extends TemplateRecipeHandler implements ICompatNHNEI { - - public LinkedList transferRectsRec = new LinkedList(); - public LinkedList transferRectsGui = new LinkedList(); - public LinkedList> guiRec = new LinkedList>(); - public LinkedList> guiGui = new LinkedList>(); - - @Override - public ItemStack[] getMachinesForRecipe() { - return new ItemStack[]{ - new ItemStack(ModBlocks.machine_assembler), - new ItemStack(ModBlocks.machine_assemfac)}; - } - - @Override - public String getRecipeID() { - return "assembly"; - } - - public class SmeltingSet extends TemplateRecipeHandler.CachedRecipe { - - List input; - PositionedStack result; - - public SmeltingSet(List in, ItemStack result) { - - input = new ArrayList(); - - ComparableStack comp = new ComparableStack(result); - ItemStack template = ItemAssemblyTemplate.writeType(new ItemStack(ModItems.assembly_template), comp); - - for(int i = 0; i < Math.min(in.size(), 12); i++) { - input.add(new PositionedStack(in.get(i), 30 + (i % 4) * 18, 6 + (i / 4) * 18)); - } - - input.add(new PositionedStack(template, 66 + 45, 6)); - this.result = new PositionedStack(result, 138, 24); - } - - @Override - public List getIngredients() { - return getCycledIngredients(cycleticks / 48, input); - } - - @Override - public PositionedStack getResult() { - return result; - } - } - - @Override - public String getRecipeName() { - return "Assembly Machine"; - } - - @Override - public String getGuiTexture() { - return RefStrings.MODID + ":textures/gui/nei/gui_nei_assembler.png"; - } - - @Override - public void loadCraftingRecipes(String outputId, Object... results) { - - if ((outputId.equals("assembly")) && getClass() == AssemblerRecipeHandler.class) { - - Map> recipes = AssemblerRecipes.getRecipes(); - - for (Map.Entry> recipe : recipes.entrySet()) { - this.arecipes.add(new SmeltingSet(recipe.getValue(), recipe.getKey())); - } - } else { - super.loadCraftingRecipes(outputId, results); - } - } - - @Override - public void loadCraftingRecipes(ItemStack result) { - - Map> recipes = AssemblerRecipes.getRecipes(); - - for (Map.Entry> recipe : recipes.entrySet()) { - - if (NEIServerUtils.areStacksSameTypeCrafting(recipe.getKey(), result)) - this.arecipes.add(new SmeltingSet(recipe.getValue(), recipe.getKey())); - } - } - - @Override - public void loadUsageRecipes(String inputId, Object... ingredients) { - - if ((inputId.equals("assembly")) && getClass() == AssemblerRecipeHandler.class) { - loadCraftingRecipes("assembly", new Object[0]); - } else { - super.loadUsageRecipes(inputId, ingredients); - } - } - - @Override - public void loadUsageRecipes(ItemStack ingredient) { - - Map> recipes = AssemblerRecipes.getRecipes(); - - for (Map.Entry> recipe : recipes.entrySet()) { - - for(Object o : recipe.getValue()) { - - if(o instanceof ItemStack && NEIServerUtils.areStacksSameTypeCrafting((ItemStack)o, ingredient)) { - this.arecipes.add(new SmeltingSet(recipe.getValue(), recipe.getKey())); - - } else if(o instanceof List) { - - for(Object obj : (List)o) { - - if(obj instanceof ItemStack && NEIServerUtils.areStacksSameTypeCrafting((ItemStack)obj, ingredient)) { - this.arecipes.add(new SmeltingSet(recipe.getValue(), recipe.getKey())); - } - } - } - } - } - } - - @Override - public Class getGuiClass() { - return null; - } - - @Override - public void loadTransferRects() { - transferRectsGui = new LinkedList(); - guiGui = new LinkedList>(); - - transferRects.add(new RecipeTransferRect(new Rectangle(138 - 1 - 36, 23, 36, 18), "assembly")); - transferRectsGui.add(new RecipeTransferRect(new Rectangle(18 * 2 + 2, 89 - 7 - 11, 18 * 5 - 4, 18 + 16), "assembly")); - guiGui.add(GUIMachineAssembler.class); - RecipeTransferRectHandler.registerRectsToGuis(getRecipeTransferRectGuis(), transferRects); - RecipeTransferRectHandler.registerRectsToGuis(guiGui, transferRectsGui); - } - - @Override - public void drawExtras(int recipe) { - - drawProgressBar(83 - (18 * 4) - 9 + 1, 6, 0, 86, 16, 18 * 3 - 2, 480, 7); - - drawProgressBar(83 - 3 + 16 + 5, 5 + 18, 16, 86, 36, 18, 48, 0); - } - - @Override - public TemplateRecipeHandler newInstance() { - return super.newInstance(); - } - -} diff --git a/src/main/java/com/hbm/handler/nei/AssemblyMachineRecipeHandler.java b/src/main/java/com/hbm/handler/nei/AssemblyMachineRecipeHandler.java new file mode 100644 index 000000000..288b74db5 --- /dev/null +++ b/src/main/java/com/hbm/handler/nei/AssemblyMachineRecipeHandler.java @@ -0,0 +1,18 @@ +package com.hbm.handler.nei; + +import com.hbm.blocks.ModBlocks; +import com.hbm.inventory.recipes.AssemblyMachineRecipes; +import com.hbm.inventory.recipes.loader.GenericRecipe; + +public class AssemblyMachineRecipeHandler extends NEIGenericRecipeHandler { + + public AssemblyMachineRecipeHandler() { + super(ModBlocks.machine_assembly_machine.getLocalizedName(), AssemblyMachineRecipes.INSTANCE, ModBlocks.machine_assembly_machine); + } + + @Override public String getRecipeID() { return "ntmAssemblyMachine"; } + + @Override public int getInputXOffset(GenericRecipe recipe, int inputCount) { return recipe.inputItem != null && recipe.inputItem.length > 9 ? 18 : 0; } + @Override public int getOutputXOffset(GenericRecipe recipe, int outputCount) { return recipe.inputItem != null && recipe.inputItem.length > 9 ? 18 : 0; } + @Override public int getMachineXOffset(GenericRecipe recipe) { return recipe.inputItem != null && recipe.inputItem.length > 9 ? 18 : 0; } +} diff --git a/src/main/java/com/hbm/handler/nei/ChemicalPlantRecipeHandler.java b/src/main/java/com/hbm/handler/nei/ChemicalPlantRecipeHandler.java index 47d77945b..8bca29e98 100644 --- a/src/main/java/com/hbm/handler/nei/ChemicalPlantRecipeHandler.java +++ b/src/main/java/com/hbm/handler/nei/ChemicalPlantRecipeHandler.java @@ -3,14 +3,11 @@ package com.hbm.handler.nei; import com.hbm.blocks.ModBlocks; import com.hbm.inventory.recipes.ChemicalPlantRecipes; -public class ChemicalPlantRecipeHandler extends NEIUniversalHandler { //TODO: make a new universal handler +public class ChemicalPlantRecipeHandler extends NEIGenericRecipeHandler { public ChemicalPlantRecipeHandler() { - super(ModBlocks.machine_chemical_plant.getLocalizedName(), ModBlocks.machine_chemical_plant, ChemicalPlantRecipes.getRecipes()); + super(ModBlocks.machine_chemical_plant.getLocalizedName(), ChemicalPlantRecipes.INSTANCE, ModBlocks.machine_chemical_plant, ModBlocks.machine_chemical_factory); } - @Override - public String getKey() { - return "ntmChemicalPlant"; - } + @Override public String getRecipeID() { return "ntmChemicalPlant"; } } diff --git a/src/main/java/com/hbm/handler/nei/ChemplantRecipeHandler.java b/src/main/java/com/hbm/handler/nei/ChemplantRecipeHandler.java deleted file mode 100644 index b0b5e19a4..000000000 --- a/src/main/java/com/hbm/handler/nei/ChemplantRecipeHandler.java +++ /dev/null @@ -1,236 +0,0 @@ -package com.hbm.handler.nei; - -import java.awt.Rectangle; -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.List; - -import com.hbm.blocks.ModBlocks; -import com.hbm.handler.imc.ICompatNHNEI; -import com.hbm.inventory.FluidStack; -import com.hbm.inventory.RecipesCommon.AStack; -import com.hbm.inventory.gui.GUIMachineChemplant; -import com.hbm.inventory.recipes.ChemplantRecipes; -import com.hbm.inventory.recipes.ChemplantRecipes.ChemRecipe; -import com.hbm.items.ModItems; -import com.hbm.items.machine.ItemFluidIcon; -import com.hbm.lib.RefStrings; - -import codechicken.nei.NEIServerUtils; -import codechicken.nei.PositionedStack; -import codechicken.nei.recipe.TemplateRecipeHandler; -import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.item.ItemStack; - -public class ChemplantRecipeHandler extends TemplateRecipeHandler implements ICompatNHNEI { - - public LinkedList transferRectsRec = new LinkedList(); - public LinkedList transferRectsGui = new LinkedList(); - public LinkedList> guiRec = new LinkedList>(); - public LinkedList> guiGui = new LinkedList>(); - - @Override - public ItemStack[] getMachinesForRecipe() { - return new ItemStack[]{ - new ItemStack(ModBlocks.machine_chemplant), - new ItemStack(ModBlocks.machine_chemfac)}; - } - - @Override - public String getRecipeID() { - return "chemistry"; - } - public class RecipeSet extends TemplateRecipeHandler.CachedRecipe { - - PositionedStack[] itemIn = new PositionedStack[4]; - PositionedStack[] fluidIn = new PositionedStack[2]; - PositionedStack[] itemOut = new PositionedStack[4]; - PositionedStack[] fluidOut = new PositionedStack[2]; - PositionedStack template; - - public RecipeSet(ChemRecipe recipe) { - - for(int i = 0; i < recipe.inputs.length; i++) { - AStack in = recipe.inputs[i]; - if(in == null) continue; - this.itemIn[i] = new PositionedStack(in.extractForNEI(), 30 + (i % 2) * 18, 24 + (i / 2) * 18); - } - - for(int i = 0; i < recipe.inputFluids.length; i++) { - FluidStack in = recipe.inputFluids[i]; - if(in == null) continue; - ItemStack drop = ItemFluidIcon.make(in); - this.fluidIn[i] = new PositionedStack(drop, 30 + (i % 2) * 18, 6); - } - - for(int i = 0; i < recipe.outputs.length; i++) { - ItemStack out = recipe.outputs[i]; - if(out == null) continue; - this.itemOut[i] = new PositionedStack(out, 120 + (i % 2) * 18, 24 + (i / 2) * 18); - } - - for(int i = 0; i < recipe.outputFluids.length; i++) { - FluidStack out = recipe.outputFluids[i]; - if(out == null) continue; - ItemStack drop = ItemFluidIcon.make(out); - this.fluidOut[i] = new PositionedStack(drop, 120 + (i % 2) * 18, 6); - } - - this.template = new PositionedStack(new ItemStack(ModItems.chemistry_template, 1, recipe.getId()), 84, 6); - } - - @Override - public List getIngredients() { - List stacks = new ArrayList(); - - for(PositionedStack stack : itemIn) if(stack != null) stacks.add(stack); - for(PositionedStack stack : fluidIn) if(stack != null) stacks.add(stack); - stacks.add(template); - - return getCycledIngredients(cycleticks / 20, stacks); - } - - @Override - public List getOtherStacks() { - List stacks = new ArrayList(); - - for(PositionedStack stack : itemOut) if(stack != null) stacks.add(stack); - for(PositionedStack stack : fluidOut) if(stack != null) stacks.add(stack); - stacks.add(template); - - return stacks; - } - - @Override - public PositionedStack getResult() { - return null; - } - } - - @Override - public String getRecipeName() { - return "Chemical Plant"; - } - - @Override - public String getGuiTexture() { - return RefStrings.MODID + ":textures/gui/nei/gui_nei_chemplant.png"; - } - - @Override - public void loadCraftingRecipes(String outputId, Object... results) { - - if((outputId.equals("chemistry")) && getClass() == ChemplantRecipeHandler.class) { - - for(ChemRecipe recipe : ChemplantRecipes.recipes) { - this.arecipes.add(new RecipeSet(recipe)); - } - } else { - super.loadCraftingRecipes(outputId, results); - } - } - - @Override - public void loadCraftingRecipes(ItemStack result) { - - outer: - for(ChemRecipe recipe : ChemplantRecipes.recipes) { - - for(ItemStack out : recipe.outputs) { - - if(out != null && NEIServerUtils.areStacksSameTypeCrafting(result, out)) { - this.arecipes.add(new RecipeSet(recipe)); - continue outer; - } - } - - for(FluidStack out : recipe.outputFluids) { - - if(out != null) { - ItemStack drop = ItemFluidIcon.make(out.type, out.fill); - - if(compareFluidStacks(result, drop)) { - this.arecipes.add(new RecipeSet(recipe)); - continue outer; - } - } - } - } - } - - @Override - public void loadUsageRecipes(String inputId, Object... ingredients) { - if((inputId.equals("chemistry")) && getClass() == ChemplantRecipeHandler.class) { - loadCraftingRecipes("chemistry", new Object[0]); - } else { - super.loadUsageRecipes(inputId, ingredients); - } - } - - @Override - public void loadUsageRecipes(ItemStack ingredient) { - - outer: - for(ChemRecipe recipe : ChemplantRecipes.recipes) { - - for(AStack in : recipe.inputs) { - - if(in != null) { - List stacks = in.extractForNEI(); - - for(ItemStack stack : stacks) { - if(NEIServerUtils.areStacksSameTypeCrafting(ingredient, stack)) { - this.arecipes.add(new RecipeSet(recipe)); - continue outer; - } - } - } - } - - for(FluidStack in : recipe.inputFluids) { - - if(in != null) { - ItemStack drop = ItemFluidIcon.make(in.type, in.fill); - - if(compareFluidStacks(ingredient, drop)) { - this.arecipes.add(new RecipeSet(recipe)); - continue outer; - } - } - } - } - } - - private boolean compareFluidStacks(ItemStack sta1, ItemStack sta2) { - return sta1.getItem() == sta2.getItem() && sta1.getItemDamage() == sta2.getItemDamage(); - } - - @Override - public Class getGuiClass() { - return null; - } - - @Override - public void loadTransferRects() { - transferRectsGui = new LinkedList(); - guiGui = new LinkedList>(); - - transferRects.add(new RecipeTransferRect(new Rectangle(138 - 1 - 72, 23, 18 * 3, 18), "chemistry")); - transferRectsGui.add(new RecipeTransferRect(new Rectangle(18 * 2 + 2, 89 - 7 - 11, 18 * 5 - 4, 18 + 16), "chemistry")); - guiGui.add(GUIMachineChemplant.class); - RecipeTransferRectHandler.registerRectsToGuis(getRecipeTransferRectGuis(), transferRects); - RecipeTransferRectHandler.registerRectsToGuis(guiGui, transferRectsGui); - } - - @Override - public void drawExtras(int recipe) { - - drawProgressBar(83 - (18 * 4) - 9 + 1, 6, 0, 86, 16, 18 * 3 - 2, 480, 7); - drawProgressBar(83 - 3 + 16 + 5 - 36, 5 + 18, 16, 86, 18 * 3, 18, 48, 0); - } - - @Override - public TemplateRecipeHandler newInstance() { - return super.newInstance(); - } -} diff --git a/src/main/java/com/hbm/handler/nei/NEIGenericRecipeHandler.java b/src/main/java/com/hbm/handler/nei/NEIGenericRecipeHandler.java new file mode 100644 index 000000000..becbbad76 --- /dev/null +++ b/src/main/java/com/hbm/handler/nei/NEIGenericRecipeHandler.java @@ -0,0 +1,321 @@ +package com.hbm.handler.nei; + +import static codechicken.lib.gui.GuiDraw.drawTexturedModalRect; + +import java.awt.Rectangle; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; + +import com.hbm.config.ClientConfig; +import com.hbm.handler.imc.ICompatNHNEI; +import com.hbm.inventory.FluidStack; +import com.hbm.inventory.RecipesCommon.AStack; +import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.inventory.recipes.loader.GenericRecipes; +import com.hbm.inventory.recipes.loader.GenericRecipes.IOutput; +import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemBlueprints; +import com.hbm.items.machine.ItemFluidIcon; +import com.hbm.lib.RefStrings; + +import codechicken.nei.NEIServerUtils; +import codechicken.nei.PositionedStack; +import codechicken.nei.recipe.TemplateRecipeHandler; +import net.minecraft.block.Block; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.item.ItemStack; + +public abstract class NEIGenericRecipeHandler extends TemplateRecipeHandler implements ICompatNHNEI { + + public LinkedList transferRectsRec = new LinkedList(); + public LinkedList transferRectsGui = new LinkedList(); + public LinkedList> guiRec = new LinkedList>(); + public LinkedList> guiGui = new LinkedList>(); + + public final String displayName; + public final GenericRecipes recipeSet; + public final ItemStack[] machines; + + public NEIGenericRecipeHandler(String displayName, GenericRecipes recipeSet, Block... machines) { + ItemStack[] machineStacks = new ItemStack[machines.length]; + for(int i = 0; i < machines.length; i++) machineStacks[i] = new ItemStack(machines[i]); + this.displayName = displayName; + this.recipeSet = recipeSet; + this.machines = machineStacks; + } + + public NEIGenericRecipeHandler(String displayName, GenericRecipes recipeSet, ItemStack... machines) { + this.displayName = displayName; + this.recipeSet = recipeSet; + this.machines = machines; + } + + public class RecipeSet extends TemplateRecipeHandler.CachedRecipe { + + protected GenericRecipe recipe; + protected PositionedStack[] input; + protected PositionedStack[] output; + protected PositionedStack machine; + protected PositionedStack template; + + public RecipeSet(GenericRecipe recipe) { + this.recipe = recipe; + int inputSize = 0; + int outputSize = 0; + + if(recipe.inputItem != null) inputSize += recipe.inputItem.length; // sure a ternary is "less code" but is it more readable? no? thought so + if(recipe.inputFluid != null) inputSize += recipe.inputFluid.length; + if(recipe.outputItem != null) outputSize += recipe.outputItem.length; + if(recipe.outputFluid != null) outputSize += recipe.outputFluid.length; + + int inputOffset = getInputXOffset(recipe, inputSize); + int outputOffset = getOutputXOffset(recipe, outputSize); + int machineOffset = getMachineXOffset(recipe); + + this.input = new PositionedStack[inputSize]; + int[][] inPos = getInputSlotPositions(inputSize); + inputSize = 0; // just gonna reuse this because fuck it why not + + if(recipe.inputItem != null) for(int i = 0; i < recipe.inputItem.length; i++) { + this.input[i] = new PositionedStack(recipe.inputItem[i].extractForNEI(), inPos[i][0] + inputOffset, inPos[i][1]); + inputSize = i + 1; + } + if(recipe.inputFluid != null) for(int i = 0; i < recipe.inputFluid.length; i++) { + this.input[inputSize + i] = new PositionedStack(ItemFluidIcon.make(recipe.inputFluid[i]), inPos[inputSize + i][0] + inputOffset, inPos[inputSize + i][1]); + } + + int[][] outPos = getOutputSlotPositions(outputSize); + this.output = new PositionedStack[outputSize]; + outputSize = 0; + + if(recipe.outputItem != null) for(int i = 0; i < recipe.outputItem.length; i++) { + this.output[i] = new PositionedStack(recipe.outputItem[i].getAllPossibilities(), outPos[i][0] + outputOffset, outPos[i][1]); + outputSize = i + 1; + } + if(recipe.outputFluid != null) for(int i = 0; i < recipe.outputFluid.length; i++) { + this.output[outputSize + i] = new PositionedStack(ItemFluidIcon.make(recipe.outputFluid[i]), outPos[outputSize + i][0] + outputOffset, outPos[outputSize + i][1]); + } + + if(recipe.isPooled()) { + String[] pools = recipe.getPools(); + ItemStack[] blueprints = new ItemStack[pools.length]; + for(int i = 0; i < pools.length; i++) blueprints[i] = ItemBlueprints.make(pools[i]); + this.template = new PositionedStack(blueprints, 75 + machineOffset, 10); + } + + ItemStack[] machineStacks = getMachines(recipe); + this.machine = new PositionedStack(machineStacks, 75 + machineOffset, template == null ? 31 : 38); + } + + @Override public List getIngredients() { return getCycledIngredients(cycleticks / 20, Arrays.asList(this.input)); } + @Override public PositionedStack getResult() { return this.output[0]; } + + @Override + public List getOtherStacks() { + List other = new ArrayList(); + for(int i = 1; i < this.output.length; i++) other.add(this.output[i]); + other.add(this.machine); + if(this.template != null) other.add(this.template); + return getCycledIngredients(cycleticks / 20, other); + } + } + + @Override public String getRecipeName() { return this.displayName; } + @Override public ItemStack[] getMachinesForRecipe() { return machines; } + @Override public String getGuiTexture() { return RefStrings.MODID + ":textures/gui/nei/gui_nei.png"; } + + public int getInputXOffset(GenericRecipe recipe, int inputCount) { return 0; } + public int getOutputXOffset(GenericRecipe recipe, int outputCount) { return 0; } + public int getMachineXOffset(GenericRecipe recipe) { return 0; } + public ItemStack[] getMachines(GenericRecipe recipe) { return this.machines; } + + // ✨ magic number vomit land ✨ + public int[][] getInputSlotPositions(int count) { + + if(count == 1) return new int[][] { {48, 24} }; + if(count == 2) return new int[][] { {30, 24}, {48, 24} }; + if(count == 3) return new int[][] { {12, 24}, {30, 24}, {48, 24} }; + if(count == 4) return new int[][] { {30, 15}, {48, 15}, {30, 33}, {48, 33} }; + if(count == 5) return new int[][] { {12, 15}, {30, 15}, {48, 15}, {12, 33}, {30, 33} }; + if(count == 6) return new int[][] { {12, 15}, {30, 15}, {48, 15}, {12, 33}, {30, 33}, {48, 33} }; + + int[][] slots = new int[count][2]; + int cols = (count + 2) / 3; + + for(int i = 0; i < count; i++) { + slots[i][0] = 12 + (i % cols) * 18 - (cols == 4 ? 18 : 0); + slots[i][1] = 6 + (i / cols) * 18; + } + + return slots; + } + + public int[][] getOutputSlotPositions(int count) { + switch(count) { + case 1: return new int[][] { + {102, 24} + }; + case 2: return new int[][] { + {102, 24}, + {120, 24} + }; + case 3: return new int[][] { + {102, 24}, + {120, 24}, + {138, 24} + }; + case 4: return new int[][] { + {102, 24 - 9}, + {120, 24 - 9}, + {102, 24 + 9}, + {120, 24 + 9} + }; + case 5: return new int[][] { + {102, 24 - 9}, {120, 24 - 9}, + {102, 24 + 9}, {120, 24 + 9}, + {138, 24}, + }; + case 6: return new int[][] { + {102, 6}, {120, 6}, + {102, 24}, {120, 24}, + {102, 42}, {120, 42}, + }; + case 7: return new int[][] { + {102, 6}, {120, 6}, + {102, 24}, {120, 24}, + {102, 42}, {120, 42}, + {138, 24}, + }; + case 8: return new int[][] { + {102, 6}, {120, 6}, + {102, 24}, {120, 24}, + {102, 42}, {120, 42}, + {138, 24}, {138, 42}, + }; + } + return new int[count][2]; + } + + @Override + public void loadCraftingRecipes(ItemStack result) { + + outer: for(Object o : this.recipeSet.recipeOrderedList) { + GenericRecipe recipe = (GenericRecipe) o; + boolean hasMatch = false; + boolean hide = ClientConfig.NEI_HIDE_SECRETS.get(); + + if(hide && recipe.isPooled()) { + String[] pools = recipe.getPools(); + for(String pool : pools) if(pool.startsWith(GenericRecipes.POOL_PREFIX_SECRET)) continue outer; + } + + if(hide && recipe.inputItem != null) for(AStack astack : recipe.inputItem) for(ItemStack stack : astack.extractForNEI()) { + if(ModItems.excludeNEI.contains(stack.getItem())) continue outer; + } + if(recipe.outputItem != null) for(IOutput output : recipe.outputItem) for(ItemStack stack : output.getAllPossibilities()) { + if(hide && ModItems.excludeNEI.contains(stack.getItem())) continue outer; + if(NEIServerUtils.areStacksSameTypeCrafting(stack, result)) hasMatch = true; + } + if(recipe.outputFluid != null) for(FluidStack fluid : recipe.outputFluid) { + if(areItemsAndMetaEqual(ItemFluidIcon.make(fluid), result)) hasMatch = true; + } + + if(hasMatch) this.arecipes.add(new RecipeSet(recipe)); + } + } + + /** load all */ + @Override + public void loadCraftingRecipes(String outputId, Object... results) { + + if(outputId.equals(getRecipeID())) { + + outer: for(Object o : this.recipeSet.recipeOrderedList) { + GenericRecipe recipe = (GenericRecipe) o; + boolean hide = ClientConfig.NEI_HIDE_SECRETS.get(); + + if(hide && recipe.isPooled()) { + String[] pools = recipe.getPools(); + for(String pool : pools) if(pool.startsWith(GenericRecipes.POOL_PREFIX_SECRET)) continue outer; + } + + if(hide && recipe.inputItem != null) for(AStack astack : recipe.inputItem) for(ItemStack stack : astack.extractForNEI()) + if(ModItems.excludeNEI.contains(stack.getItem())) continue outer; + if(hide && recipe.outputItem != null) for(IOutput output : recipe.outputItem) for(ItemStack stack : output.getAllPossibilities()) + if(ModItems.excludeNEI.contains(stack.getItem())) continue outer; + + this.arecipes.add(new RecipeSet(recipe)); + } + + } else { + super.loadCraftingRecipes(outputId, results); + } + } + + @Override + public void loadUsageRecipes(String inputId, Object... ingredients) { + if(inputId.equals(getRecipeID())) { + loadCraftingRecipes(getRecipeID(), new Object[0]); + } else { + super.loadUsageRecipes(inputId, ingredients); + } + } + + @Override + public void loadUsageRecipes(ItemStack ingredient) { + + outer: for(Object o : this.recipeSet.recipeOrderedList) { + GenericRecipe recipe = (GenericRecipe) o; + boolean hasMatch = false; + boolean hide = ClientConfig.NEI_HIDE_SECRETS.get(); + + if(hide && recipe.isPooled()) { + String[] pools = recipe.getPools(); + for(String pool : pools) if(pool.startsWith(GenericRecipes.POOL_PREFIX_SECRET)) continue outer; + } + + if(recipe.inputItem != null) for(AStack astack : recipe.inputItem) for(ItemStack stack : astack.extractForNEI()) { + if(hide && ModItems.excludeNEI.contains(stack.getItem())) continue outer; + if(NEIServerUtils.areStacksSameTypeCrafting(stack, ingredient)) hasMatch = true; + } + if(recipe.inputFluid != null) for(FluidStack fluid : recipe.inputFluid) { + if(areItemsAndMetaEqual(ItemFluidIcon.make(fluid), ingredient)) hasMatch = true; + } + if(hide && recipe.outputItem != null) for(IOutput output : recipe.outputItem) for(ItemStack stack : output.getAllPossibilities()) { + if(ModItems.excludeNEI.contains(stack.getItem())) continue outer; + } + + if(hasMatch) this.arecipes.add(new RecipeSet(recipe)); + } + } + + public static boolean areItemsAndMetaEqual(ItemStack sta1, ItemStack sta2) { + return sta1.getItem() == sta2.getItem() && sta1.getItemDamage() == sta2.getItemDamage(); + } + + @Override + public void loadTransferRects() { + transferRectsGui = new LinkedList(); + guiGui = new LinkedList>(); + transferRects.add(new RecipeTransferRect(new Rectangle(147, 1, 18, 18), getRecipeID())); + RecipeTransferRectHandler.registerRectsToGuis(getRecipeTransferRectGuis(), transferRects); + } + + @Override + public void drawBackground(int recipe) { + super.drawBackground(recipe); + + RecipeSet rec = (RecipeSet) this.arecipes.get(recipe); + + for(PositionedStack pos : rec.input) drawTexturedModalRect(pos.relx - 1, pos.rely - 1, 5, 87, 18, 18); + for(PositionedStack pos : rec.output) drawTexturedModalRect(pos.relx - 1, pos.rely - 1, 5, 87, 18, 18); + + if(rec.template == null) { + drawTexturedModalRect(74 + this.getMachineXOffset(rec.recipe), 14, 59, 87, 18, 36); + } else { + drawTexturedModalRect(74 + this.getMachineXOffset(rec.recipe), 7, 77, 87, 18, 50); + } + } +} diff --git a/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java b/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java index d82303b6c..31274e626 100644 --- a/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java +++ b/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java @@ -25,11 +25,6 @@ import net.minecraft.item.ItemStack; public abstract class NEIUniversalHandler extends TemplateRecipeHandler implements ICompatNHNEI { - @Override - public ItemStack[] getMachinesForRecipe() { - return machine; - } - public LinkedList transferRectsRec = new LinkedList(); public LinkedList transferRectsGui = new LinkedList(); public LinkedList> guiRec = new LinkedList>(); @@ -119,6 +114,11 @@ public abstract class NEIUniversalHandler extends TemplateRecipeHandler implemen return this.display; } + @Override + public ItemStack[] getMachinesForRecipe() { + return machine; + } + @Override public String getGuiTexture() { return RefStrings.MODID + ":textures/gui/nei/gui_nei.png"; diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index a8444a256..472a33cc1 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -166,17 +166,17 @@ public class AssemblyMachineRecipes extends GenericRecipes { // decoration this.register(new GenericRecipe("ass.capnuka").setup(10, 100).outputItems(DictFrame.fromOne(ModBlocks.block_cap, EnumCapBlock.NUKA)) - .inputItems(new ComparableStack(ModItems.cap_nuka, 128))); + .inputItems(new ComparableStack(ModItems.cap_nuka, 64), new ComparableStack(ModItems.cap_nuka, 64))); this.register(new GenericRecipe("ass.capquantum").setup(10, 100).outputItems(DictFrame.fromOne(ModBlocks.block_cap, EnumCapBlock.QUANTUM)) - .inputItems(new ComparableStack(ModItems.cap_quantum, 128))); + .inputItems(new ComparableStack(ModItems.cap_quantum, 64), new ComparableStack(ModItems.cap_quantum, 64))); this.register(new GenericRecipe("ass.capsparkle").setup(10, 100).outputItems(DictFrame.fromOne(ModBlocks.block_cap, EnumCapBlock.SPARKLE)) - .inputItems(new ComparableStack(ModItems.cap_sparkle, 128))); + .inputItems(new ComparableStack(ModItems.cap_sparkle, 64), new ComparableStack(ModItems.cap_sparkle, 64))); this.register(new GenericRecipe("ass.caprad").setup(10, 100).outputItems(DictFrame.fromOne(ModBlocks.block_cap, EnumCapBlock.RAD)) - .inputItems(new ComparableStack(ModItems.cap_rad, 128))); + .inputItems(new ComparableStack(ModItems.cap_rad, 64), new ComparableStack(ModItems.cap_rad, 64))); this.register(new GenericRecipe("ass.capfritz").setup(10, 100).outputItems(DictFrame.fromOne(ModBlocks.block_cap, EnumCapBlock.FRITZ)) - .inputItems(new ComparableStack(ModItems.cap_fritz, 128))); + .inputItems(new ComparableStack(ModItems.cap_fritz, 64), new ComparableStack(ModItems.cap_fritz, 64))); this.register(new GenericRecipe("ass.capkorl").setup(10, 100).outputItems(DictFrame.fromOne(ModBlocks.block_cap, EnumCapBlock.KORL)) - .inputItems(new ComparableStack(ModItems.cap_korl, 128))); + .inputItems(new ComparableStack(ModItems.cap_korl, 64), new ComparableStack(ModItems.cap_korl, 64))); /* this.register(new GenericRecipe("ass.").setup(, 100).outputItems(new ItemStack(ModBlocks., 1)) .inputItems()); @@ -330,7 +330,8 @@ public class AssemblyMachineRecipes extends GenericRecipes { new ComparableStack(ModItems.powder_magic, 64), new ComparableStack(ModItems.plate_dineutronium, 24), new ComparableStack(ModItems.ingot_u238m2), - new ComparableStack(ModItems.ingot_cft, 128))); + new ComparableStack(ModItems.ingot_cft, 64), + new ComparableStack(ModItems.ingot_cft, 64))); // fluid tanks this.register(new GenericRecipe("ass.tank").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_fluidtank, 1)) @@ -791,9 +792,9 @@ public class AssemblyMachineRecipes extends GenericRecipes { for(int i = 1; i < order.length; ++i) { FluidType type = order[i]; if(type.hasNoContainer()) continue; - this.register(new GenericRecipe("ass.package" + type.getUnlocalizedName()).setup(100, 100).outputItems(new ItemStack(ModItems.fluid_pack_full, 1, type.getID())) + this.register(new GenericRecipe("ass.package" + type.getUnlocalizedName()).setup(40, 100).outputItems(new ItemStack(ModItems.fluid_pack_full, 1, type.getID())) .inputItems(new ComparableStack(ModItems.fluid_pack_empty)).inputFluids(new FluidStack(type, 32_000))); - this.register(new GenericRecipe("ass.unpackage" + type.getUnlocalizedName()).setup(100, 100).setIcon(ItemFluidIcon.make(type, 32_000)).outputItems(new ItemStack(ModItems.fluid_pack_empty)) + this.register(new GenericRecipe("ass.unpackage" + type.getUnlocalizedName()).setup(40, 100).setIcon(ItemFluidIcon.make(type, 32_000)).outputItems(new ItemStack(ModItems.fluid_pack_empty)) .inputItems(new ComparableStack(ModItems.fluid_pack_full, 1, type.getID())).outputFluids(new FluidStack(type, 32_000))); } diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java index eff9d27a8..264e67cda 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java @@ -37,9 +37,8 @@ public class GenericRecipe { this.name = name; } - public boolean isPooled() { - return blueprintPools != null; - } + public boolean isPooled() { return blueprintPools != null; } + public String[] getPools() { return this.blueprintPools; } public boolean isPartOfPool(String lookingFor) { if(!isPooled()) return false; diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 41b783fc6..5724185f5 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1,5 +1,7 @@ package com.hbm.items; +import java.util.HashSet; + import com.hbm.blocks.ModBlocks; import com.hbm.config.VersatileConfig; import com.hbm.handler.BucketHandler; @@ -62,6 +64,8 @@ import net.minecraftforge.fluids.FluidContainerRegistry; import net.minecraftforge.fluids.FluidStack; public class ModItems { + + public static HashSet excludeNEI = new HashSet(); public static void mainRegistry() { initializeItem(); @@ -4984,6 +4988,9 @@ public class ModItems { } private static void registerItem() { + + excludeNEI.add(item_secret); + //Weapons GameRegistry.registerItem(redstone_sword, redstone_sword.getUnlocalizedName()); GameRegistry.registerItem(big_sword, big_sword.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/machine/ItemBlueprints.java b/src/main/java/com/hbm/items/machine/ItemBlueprints.java index 874cfd6f6..13254d6de 100644 --- a/src/main/java/com/hbm/items/machine/ItemBlueprints.java +++ b/src/main/java/com/hbm/items/machine/ItemBlueprints.java @@ -133,7 +133,7 @@ public class ItemBlueprints extends Item { return stack.stackTagCompound.getString("pool"); } - public ItemStack make(String pool) { + public static ItemStack make(String pool) { ItemStack stack = new ItemStack(ModItems.blueprints); stack.stackTagCompound = new NBTTagCompound(); stack.stackTagCompound.setString("pool", pool); diff --git a/src/main/java/com/hbm/items/machine/ItemChemistryTemplate.java b/src/main/java/com/hbm/items/machine/ItemChemistryTemplate.java index b310805b6..49db2a232 100644 --- a/src/main/java/com/hbm/items/machine/ItemChemistryTemplate.java +++ b/src/main/java/com/hbm/items/machine/ItemChemistryTemplate.java @@ -4,7 +4,6 @@ import java.util.List; import com.hbm.inventory.recipes.ChemplantRecipes; import com.hbm.inventory.recipes.ChemplantRecipes.ChemRecipe; -import com.hbm.items.ModItems; import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.relauncher.Side; diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index f3db74449..57e7c9744 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (5383)"; + public static final String VERSION = "1.0.27 BETA (5397)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/main/NEIRegistry.java b/src/main/java/com/hbm/main/NEIRegistry.java index 0ba8b15b4..4f0b96595 100644 --- a/src/main/java/com/hbm/main/NEIRegistry.java +++ b/src/main/java/com/hbm/main/NEIRegistry.java @@ -24,14 +24,13 @@ public class NEIRegistry { handlers.add(new GasCentrifugeRecipeHandler()); handlers.add(new BreederRecipeHandler()); handlers.add(new CyclotronRecipeHandler()); - handlers.add(new AssemblerRecipeHandler()); + handlers.add(new AssemblyMachineRecipeHandler()); handlers.add(new RefineryRecipeHandler()); handlers.add(new VacuumRecipeHandler()); handlers.add(new CrackingHandler()); handlers.add(new RadiolysisRecipeHandler()); handlers.add(new ReformingHandler()); handlers.add(new HydrotreatingHandler()); - handlers.add(new ChemplantRecipeHandler()); handlers.add(new ChemicalPlantRecipeHandler()); handlers.add(new OreSlopperHandler()); //before acidizing handlers.add(new CrystallizerRecipeHandler()); diff --git a/src/main/resources/assets/hbm/textures/gui/nei/gui_nei.png b/src/main/resources/assets/hbm/textures/gui/nei/gui_nei.png index ecdd6955099a67f0b843ee7faf0434d12169e612..0cc1a42c414d8b07ec3f97c977d93a31b887cf95 100644 GIT binary patch delta 1441 zcmb7?e>~H99LGO43lA*DkTJgsCyz!pc6NRw>f+M*nIv{3j4MPWd@0T}n%ZNeA-{i4 zLT-Ljr&d=ZiMcXetvD8uvKVvg{_5X*KOXOY-mll|`FKCxkGD{Tr&@rAvJScK^Gz;U z5R63Y&F)ZGir{JGIQvBIkAgYii)JQh^~KC94rtNu*R`g6TyU-1G1Ux<-U>n=b+N`w zLa~Tt`be|?6on}}+^Nngp};D96}r?3G21VvC-)t1>1em9N^>+&+wEb4+m8Dn5k&Zt zL=)zrnqh(J&C56U3E0s1#|{ZW8??{!PYmwWb<6YYUrgN$NIGnl+tCe#8Wis+i|CHj zW|D^KvI*Z0U(gZQU#RWhY03UJi0Veg*|u&ri45sX9sK%{3-{!&U>#C?J*=0upgZ=ZikN=ig>GeX7uwBQtV1G^TD!XgT?ly^ zz;Y^N+`;c(1=)?0T0!r4pHOVf?rD~|h4AKtD3o}UT}6D9~-WCK@MHe@c} zxD(U|d1=N;Ru_o&_LrGVCY72jI?fF_f^;$a*+|Yge3-L7GQDYdE4U9z*`N(<*p}(( zosnwTXHpb_)*_EHom*)hy7@=D|CZ!cno0j!mG}s~Yn}7TEz7f<0?Wvje0&tKJU1IM z#JDtT_oe9InW6S1Cn}X%RaK>JpD9@A`0{B5M`5R~Damk{7KnsIO7(kQMvru?sdGyQ zSx$~Udc@REO_KsBm?pCa3?$($yizmCUF^(_Y}mP`tQX-={$*KMW8iVuACo<8l6 zXVAZLP8B`-x-`Qwh}3^MVmWYXDkWJLc5_1t6)mrXY|Y&nrxPzQws_4s>gsWjC}m@< zWvjknUQZq{Be_RqlXYdI*k|(xT{qrDKvb$QABsoPc7ggQ)oR43&nCn605f0@%W%)n z8I&<*%a$SUvx#epz#_>}e(}r+abAcCgeccCGa|3>Jro9A7T&)fnw}08gsWNIucjaU zc$JLz<{rGr9NxvKfLk;25lBV`0`pBPK+Rr5|706Xcq#P`DJv6<0}Dk#FE$@J*)`xj zq4;f9bea5CG|Zm-*x4!3OL_K5`U&M4oK98a(+|HXx zTh&+DHY)o3W?9Is$%7|)@Z~^+E*b(7i6mbK-WKT#TovW&y@fEt${j|At`EzvY0Kf- zidV&Avwr&Deh+Tg9`KvpKSpSSN1{r>WA-&9c_LzTh4t%;?{S#uLhA=~R?QxnP=8h5 zc?XO4TXs?O6ehFr#YT7{Dz=!=2#d8P$0-Xnc2%RM%KhsoS_>F(~F4B5u+Xi(}|N8onVy`mp5 zxoJ7%{bQ06C{bs`A`H--APL=ODL;tlYAOgXm_JqC*43oO7)6}Z)_o1JmtY#?_qZ4! Ot3z&{uD4vs7ykvcqOw!~ delta 1302 zcmV+x1?l?D4dV=uG=CaNL_t(|obBAtYaHhp2k>Xj7KcDnXhTT~Jv5i*){CeaNynao zbz4je?kS;{*oO^!Q-wFQrWet@^kiR61+H?+zYuxxt$`d`QbJBOfl#W0+=v>s2Sq=; z+O5~x*_qKkpARgHq?wn8m-qedGrOy4jUq-drWMf|{~grLT7NBHyI*qwFspvu1uUac z#OU~O=iBGHYl2Cv)dd)zP?JhiS*zu1-I*|nAG)rhfvnZ?wY;&yWnrzBuidY?0GL(3 z?gEz3m59@c?N2=nnxQ}T%zRt|aA{bpWAuGC!s6h#q5QN+r-AC=NEFgpQ2ZF;@l$;MxK_oIl2*!VyQR7n6(xuPiI_U+qo zcz75qD=QHZ@#goA9#8f|Cr}{)KxNLh`p@2eKdxTAdVlnXPyY~4_K!CIF`Ym)1ON;7 z`kQY>Q53Q9!D*}i;~%~j-~HKpC&yg<+aDuBCr~v3z`}j~%-UL z+1u|&M8x6Y;kiy=XKOt^|MIIED_?#BfQ9?ctKX0P{eQ>K*7|d8e#B8H@cPeBF9!}D z{Wf;C)_-GXYdtn@-HSJV@M;Ye=OF-Cxc@%=S42c?+`4xX0^^;)!B5_cgM)*U<2G*H ziwAda#NWU8XPu=lJpsVNJ&RZ3KTn^=gS$7L3xQ)hTkG+c-@kM6^MkuL;=$b;adY!w z{Pe9K)lhLBz6r>}wd0$37O%w3&4(u;@bRC16Mw(@-6tole#GgQ{BLePjEIQ)o7dy7 zpZ%kzs&fzkRH7Z<#Qn|d=R)AP)sKky^)LS%5l0*U_#75X08p7pA#mL4N1S#5Hhy&k z0F@dKft#BT&%EOQqUP%I5dc)~YzW-nyzUjhMm`0g7RMoA^VdrUz(Q?rZ^!QLZrx=t z#SWy~E4d{YjkM~PV5M^jld%INlb-`Nlb-`Nlb-_ye^_f2F*^6lIx2w|IJZzEqGh?x zrQM(Wdy`7z^e1Nk^B6^pjvsfveXhGEn8aFLfbj`6sWg?fTE5nu36uDtO8^?kS}otS zHvvs5jbp8ruidY?0GL(3?gEz3m59@c?N2=nnxQ}T%zRt|aA{bp1<{c&?B8sAzdyL_5IM}yuTcT8x3|}bF(8XZ1we!le}F1AE&w8$5duPl45oezSf-0?roFwr ziQgl5nX#sgQPug-bdBr)nnWkSGOMHmnDtfk>}H#G&WpyHWsLFTW~oajz%puN2T;al zvti-ID(L`TMpc`?tWE+hvqp6QO?>6I`B`R-3V^1u`B`=XU<#X`3eBSpaU)~r3!%Ia2Q2VT=@KMw;O}O zpu~!xUa0~g;^H?KvH4j>jk_&)6$XRBONW5X50gO#b(2sA4;L5oKU??68jX_G%m4rY M07*qoM6N<$f_*=cAOHXW From 2f74d178232052d10161e26eeb48eec94898f601 Mon Sep 17 00:00:00 2001 From: Bob Date: Tue, 22 Jul 2025 23:17:59 +0200 Subject: [PATCH 7/9] pouring out the conk --- changelog | 58 +-- src/main/java/com/hbm/blocks/ModBlocks.java | 6 + .../com/hbm/blocks/generic/BlockRebar.java | 404 ++++++++++++++++++ .../com/hbm/blocks/rail/IRenderBlock.java | 1 + .../java/com/hbm/config/ClientConfig.java | 2 + .../java/com/hbm/crafting/ToolRecipes.java | 4 + .../java/com/hbm/inventory/fluid/Fluids.java | 5 +- .../inventory/recipes/AssemblerRecipes.java | 56 +-- .../recipes/AssemblyMachineRecipes.java | 14 +- .../recipes/ChemicalPlantRecipes.java | 9 +- .../recipes/loader/GenericRecipe.java | 2 +- .../com/hbm/itempool/ItemPoolsComponent.java | 6 +- .../com/hbm/itempool/ItemPoolsLegacy.java | 4 +- .../com/hbm/itempool/ItemPoolsRedRoom.java | 1 + .../com/hbm/itempool/ItemPoolsSingle.java | 1 + src/main/java/com/hbm/items/ModItems.java | 12 +- .../items/machine/ItemBlueprintFolder.java | 72 ++++ .../com/hbm/items/machine/ItemCatalyst.java | 6 - .../java/com/hbm/main/CraftingManager.java | 1 + src/main/java/com/hbm/main/MainRegistry.java | 3 + .../com/hbm/main/ModEventHandlerClient.java | 9 +- .../com/hbm/render/util/HorsePronter.java | 2 +- .../java/com/hbm/tileentity/TileMappings.java | 3 + src/main/java/com/hbm/uninos/NodeNet.java | 4 +- .../PneumaticNetworkProvider.java | 2 +- .../uninos/networkproviders/RebarNetwork.java | 9 + .../RebarNetworkProvider.java | 13 + src/main/resources/assets/hbm/lang/de_DE.lang | 4 + src/main/resources/assets/hbm/lang/en_US.lang | 4 + .../hbm/textures/blocks/concrete_rebar.png | Bin 0 -> 599 bytes .../textures/blocks/concrete_rebar_alt.png | Bin 0 -> 652 bytes .../assets/hbm/textures/blocks/rebar.png | Bin 0 -> 824 bytes .../assets/hbm/textures/blocks/rebar_base.png | Bin 0 -> 806 bytes .../hbm/textures/gui/fluids/concrete.png | Bin 0 -> 646 bytes .../hbm/textures/items/assembly_nuke.png | Bin 359 -> 415 bytes .../hbm/textures/items/blueprint_folder.png | Bin 0 -> 306 bytes .../items/blueprint_folder_discover.png | Bin 0 -> 301 bytes .../items/blueprint_folder_secret.png | Bin 0 -> 270 bytes .../textures/models/tank/tank_CONCRETE.png | Bin 0 -> 5002 bytes 39 files changed, 588 insertions(+), 129 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/generic/BlockRebar.java create mode 100644 src/main/java/com/hbm/items/machine/ItemBlueprintFolder.java create mode 100644 src/main/java/com/hbm/uninos/networkproviders/RebarNetwork.java create mode 100644 src/main/java/com/hbm/uninos/networkproviders/RebarNetworkProvider.java create mode 100644 src/main/resources/assets/hbm/textures/blocks/concrete_rebar.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/concrete_rebar_alt.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/rebar.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/rebar_base.png create mode 100644 src/main/resources/assets/hbm/textures/gui/fluids/concrete.png create mode 100644 src/main/resources/assets/hbm/textures/items/blueprint_folder.png create mode 100644 src/main/resources/assets/hbm/textures/items/blueprint_folder_discover.png create mode 100644 src/main/resources/assets/hbm/textures/items/blueprint_folder_secret.png create mode 100644 src/main/resources/assets/hbm/textures/models/tank/tank_CONCRETE.png diff --git a/changelog b/changelog index 1b5ea3998..958bb0f23 100644 --- a/changelog +++ b/changelog @@ -1,52 +1,16 @@ ## Added -* New assembler - * Features a brand new animated model, GUI and the new recipe selection system - * Many recipes have been reworked, with the microcrafting complexity reduced - * The redcoil didn't get a recipe. It's gonna die soon. - * Neither did the schrabidium transmutator - * Balls-o-tron's spawner can now be made without a worm coin, using a silver key instead. This means that, while expensive, it's possible to summon him without finding a jungle dungeon -* Blueprins - * Replace the journals - * Instead of opening them and making a template, they act as a multi template - * Blueprints need to remain in the slot, removing them will disable the recipes again - * Not actually part of worldgen yet - yeah i ran out of time, cry about it -* More paintables - * Paintable pneumatic tube - * Behaves the exact same as a regular pneumatic tube - * Can also be used as in and outputs - * Full block - * Paintable OpenComputers cable - * Only enabled if OpenComputers is installed - * Full block - * Also supports OC wire colors +* Blueprint booklets + * Can be found in worldgen + * Using it will create one random blueprint of the same type as the booklet +* Liquid concrete + * It's conk but liquid +* Rebar + * When hooked up to liquid concrete using pipes, will fill to create reinforced concrete + * Fills bottom to top, so connect the pipes to the top ## Changed -* Updated chinese and ukrainian localization -* Removed levitation unit -* Many of NTM's regular building blocks now have forge microblock support -* RBMK crane models now conform to the dimensions of the room they're in -* Projectile resistance for armor has been renamed to "physical" and now also extends to all direct forms of attack by other entities that don't fall into any other categories (mostly melee attacks) - * This should fix the issue where most armors are quite weak against swords -* Electric attacks (i.e. tesla cannon) are now in the "energy damage" category - * This means that armors that have energy resistance actually properly work against the tesla cannon -* Heavy components are being deprecated -* Flow control pumps can now be interfaced with OpenComputers -* The electrolyzer now remembers the last visited GUI screen -* Retextured many fluid containers such as universal tanks, canisters and gas tanks -* Removed the legacy assembler and chemical plant recipes from the template folder -* Removed journals from various loot pools -* Drinking whiskey now gives strength III, resistance III and nausea -* Chemical artillery shell recipes have now been moved to the assembler -* The chemical plant and factory now scale their max power based on the recipe, similar to how the arc welder works -* The chemical plant's default max power is now 100kHE again instead of 1MHE -* The NEI handlers for the old chemplant and assembler have been deactivated, however they will continue to function for the time being +* The alternate recipes for nitric acid and xenon gas in the chemical plant now require blueprints ## Fixed -* Fixed gas centrifuge sound persisting when broken or when unloaded -* Fixed all centrifuge sounds trying to play even when the player is far away, using up audio slots -* Fixed guns that don't have durability always displaying a condition of 0% -* Fixed GL state leak caused by skeletons -* Fixed OpenComputers integration for the CCGT -* Fixed rotated RBMK consoles not behaving correctly when trying to change rod insertion levels -* Fixed crash caused by piston inserters on servers -* Fixed flare gun not having a firing sound +* Fixed a few assembler recipes using the old crafting numbers which sometimes exceed the stack limit + * As an extra safeguard, the recipe loader now throws an exception if that happens \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 0a6cf6f64..1b7dd0f7d 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -315,12 +315,14 @@ public class ModBlocks { public static Block floodlight; public static Block floodlight_beam; + public static Block rebar; public static Block reinforced_stone; public static Block concrete_smooth; public static Block concrete_colored; public static Block concrete_colored_ext; public static Block concrete; public static Block concrete_asbestos; + public static Block concrete_rebar; public static Block concrete_super; public static Block concrete_super_broken; public static Block ducrete_smooth; @@ -1524,12 +1526,14 @@ public class ModBlocks { floodlight = new Floodlight(Material.iron).setBlockName("floodlight").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); floodlight_beam = new FloodlightBeam().setBlockName("floodlight_beam"); + rebar = new BlockRebar().setBlockName("rebar").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(100.0F).setBlockTextureName(RefStrings.MODID + ":rebar"); reinforced_stone = new BlockGeneric(Material.rock).setBlockName("reinforced_stone").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(100.0F).setBlockTextureName(RefStrings.MODID + ":reinforced_stone"); concrete_smooth = new BlockRadResistant(Material.rock).setBlockName("concrete_smooth").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(140.0F).setBlockTextureName(RefStrings.MODID + ":concrete"); concrete_colored = new BlockConcreteColored(Material.rock).setBlockName("concrete_colored").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(140.0F).setBlockTextureName(RefStrings.MODID + ":concrete"); concrete_colored_ext = new BlockConcreteColoredExt(Material.rock).setBlockName("concrete_colored_ext").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(140.0F).setBlockTextureName(RefStrings.MODID + ":concrete_colored_ext"); concrete = new BlockGeneric(Material.rock).setBlockName("concrete").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(140.0F).setBlockTextureName(RefStrings.MODID + ":concrete_tile"); concrete_asbestos = new BlockGeneric(Material.rock).setBlockName("concrete_asbestos").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(150.0F).setBlockTextureName(RefStrings.MODID + ":concrete_asbestos"); + concrete_rebar = new BlockGeneric(Material.rock).setBlockName("concrete_rebar").setCreativeTab(MainRegistry.blockTab).setHardness(50.0F).setResistance(240.0F).setBlockTextureName(RefStrings.MODID + ":concrete_rebar"); concrete_super = new BlockUberConcrete().setBlockName("concrete_super").setCreativeTab(MainRegistry.blockTab).setHardness(150.0F).setResistance(1000.0F); concrete_super_broken = new BlockFalling(Material.rock).setBlockName("concrete_super_broken").setCreativeTab(MainRegistry.blockTab).setHardness(10.0F).setResistance(20.0F).setBlockTextureName(RefStrings.MODID + ":concrete_super_broken"); concrete_pillar = new BlockRotatablePillar(Material.rock, RefStrings.MODID + ":concrete_pillar_top").setBlockName("concrete_pillar").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(180.0F).setBlockTextureName(RefStrings.MODID + ":concrete_pillar_side"); @@ -2701,6 +2705,7 @@ public class ModBlocks { GameRegistry.registerBlock(reinforced_laminate_pane,ItemBlockBlastInfo.class, reinforced_laminate_pane.getUnlocalizedName()); //Bricks + register(rebar); GameRegistry.registerBlock(reinforced_stone, ItemBlockBlastInfo.class, reinforced_stone.getUnlocalizedName()); GameRegistry.registerBlock(reinforced_ducrete, ItemBlockBlastInfo.class, reinforced_ducrete.getUnlocalizedName()); GameRegistry.registerBlock(concrete_smooth, ItemBlockBlastInfo.class, concrete_smooth.getUnlocalizedName()); @@ -2708,6 +2713,7 @@ public class ModBlocks { GameRegistry.registerBlock(concrete_colored_ext, ItemBlockBlastInfo.class, concrete_colored_ext.getUnlocalizedName()); GameRegistry.registerBlock(concrete, ItemBlockBlastInfo.class, concrete.getUnlocalizedName()); GameRegistry.registerBlock(concrete_asbestos, ItemBlockBlastInfo.class, concrete_asbestos.getUnlocalizedName()); + GameRegistry.registerBlock(concrete_rebar, ItemBlockBlastInfo.class, concrete_rebar.getUnlocalizedName()); GameRegistry.registerBlock(concrete_super, ItemBlockBlastInfo.class, concrete_super.getUnlocalizedName()); GameRegistry.registerBlock(concrete_super_broken, ItemBlockBlastInfo.class, concrete_super_broken.getUnlocalizedName()); GameRegistry.registerBlock(ducrete_smooth, ItemBlockBlastInfo.class, ducrete_smooth.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/generic/BlockRebar.java b/src/main/java/com/hbm/blocks/generic/BlockRebar.java new file mode 100644 index 000000000..67b9f13c7 --- /dev/null +++ b/src/main/java/com/hbm/blocks/generic/BlockRebar.java @@ -0,0 +1,404 @@ +package com.hbm.blocks.generic; + +import java.util.ArrayList; +import java.util.List; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.ModBlocks; +import com.hbm.config.ClientConfig; +import com.hbm.inventory.fluid.FluidType; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.lib.Library; +import com.hbm.lib.RefStrings; +import com.hbm.render.block.ISBRHUniversal; +import com.hbm.render.util.RenderBlocksNT; +import com.hbm.tileentity.IBufPacketReceiver; +import com.hbm.tileentity.TileEntityLoadedBase; +import com.hbm.tileentity.network.TileEntityPipeBaseNT; +import com.hbm.uninos.GenNode; +import com.hbm.uninos.INetworkProvider; +import com.hbm.uninos.UniNodespace; +import com.hbm.uninos.networkproviders.RebarNetwork; +import com.hbm.uninos.networkproviders.RebarNetworkProvider; +import com.hbm.util.BobMathUtil; +import com.hbm.util.Compat; +import com.hbm.util.fauxpointtwelve.BlockPos; +import com.hbm.util.fauxpointtwelve.DirPos; + +import api.hbm.fluidmk2.IFluidReceiverMK2; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.EntityRenderer; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class BlockRebar extends BlockContainer implements ISBRHUniversal { + + @SideOnly(Side.CLIENT) protected IIcon concrete; + + public BlockRebar() { + super(Material.iron); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) { + super.registerBlockIcons(reg); + this.concrete = reg.registerIcon(RefStrings.MODID + ":concrete_liquid"); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new TileEntityRebar(); + } + + @Override public int getRenderType() { return renderID; } + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean renderAsNormalBlock() { return false; } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockAccess world, int x, int y, int z, int side) { + return true; + } + + @Override + public void onNeighborBlockChange(World world, int x, int y, int z, Block block) { + TileEntity tile = world.getTileEntity(x, y, z); + if(!(tile instanceof TileEntityRebar)) return; + + TileEntityRebar rebar = (TileEntityRebar) tile; + rebar.hasConnection = false; + + for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { + TileEntity neighbor = Compat.getTileStandard(world, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ); + if(neighbor instanceof TileEntityPipeBaseNT) { + rebar.hasConnection = true; + return; + } + } + } + + public static class TileEntityRebar extends TileEntityLoadedBase implements IFluidReceiverMK2, IBufPacketReceiver { + + public int progress; + public int prevProgress; + protected RebarNode node; + public boolean hasConnection = false; + + @Override + public void updateEntity() { + + long time = worldObj.getTotalWorldTime(); + + if(!worldObj.isRemote) { + + if(prevProgress != progress) { + worldObj.markTileEntityChunkModified(xCoord, yCoord, zCoord, this); + prevProgress = progress; + } + + if(this.progress >= 1_000) { + worldObj.setBlock(xCoord, yCoord, zCoord, ModBlocks.concrete_rebar); + return; + } + + if(time % 60 == 0) { + for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { + this.trySubscribe(Fluids.CONCRETE, worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, dir); + } + } + + if(this.node == null || this.node.expired) { + + this.node = (RebarNode) UniNodespace.getNode(worldObj, xCoord, yCoord, zCoord, RebarNetworkProvider.THE_PROVIDER); + + if(this.node == null || this.node.expired) { + this.node = this.createNode(); + UniNodespace.createNode(worldObj, this.node); + } + } + + this.networkPackNT(100); + } + } + + @Override + public void invalidate() { + super.invalidate(); + + if(!worldObj.isRemote) { + if(this.node != null) { + UniNodespace.destroyNode(worldObj, xCoord, yCoord, zCoord, RebarNetworkProvider.THE_PROVIDER); + } + } + } + + @Override public void serialize(ByteBuf buf) { buf.writeInt(progress); } + @Override public void deserialize(ByteBuf buf) { this.progress = buf.readInt(); } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.progress = nbt.getInteger("progress"); + this.hasConnection = nbt.getBoolean("hasConnection"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setInteger("progress", this.progress); + nbt.setBoolean("hasConnection", this.hasConnection); + } + + public RebarNode createNode() { + TileEntity tile = (TileEntity) this; + return new RebarNode(RebarNetworkProvider.THE_PROVIDER, new BlockPos(tile.xCoord, tile.yCoord, tile.zCoord)).setConnections( + new DirPos(tile.xCoord + 1, tile.yCoord, tile.zCoord, Library.POS_X), + new DirPos(tile.xCoord - 1, tile.yCoord, tile.zCoord, Library.NEG_X), + new DirPos(tile.xCoord, tile.yCoord + 1, tile.zCoord, Library.POS_Y), + new DirPos(tile.xCoord, tile.yCoord - 1, tile.zCoord, Library.NEG_Y), + new DirPos(tile.xCoord, tile.yCoord, tile.zCoord + 1, Library.POS_Z), + new DirPos(tile.xCoord, tile.yCoord, tile.zCoord - 1, Library.NEG_Z) + ); + } + + @Override + public FluidTank[] getAllTanks() { + FluidTank tank = new FluidTank(Fluids.CONCRETE, 1_000); + tank.setFill(progress); + return new FluidTank[] {tank}; + } + + @Override + public long transferFluid(FluidType type, int pressure, long amount) { + if(type != Fluids.CONCRETE) return amount; + if(this.node == null || this.node.expired || !this.node.hasValidNet()) return amount; + + List lowestLinks = new ArrayList(); + int lowestY = 256; + int progress = 0; + int capacity = 0; + + for(Object o : this.node.net.links) { + RebarNode node = (RebarNode) o; + int y = node.positions[0].getY(); //rebar can only have one pos, there's no multiblock rebar + + if(y < lowestY) { + lowestY = y; + progress = 0; + capacity = 0; + lowestLinks.clear(); + } + + if(y == lowestY) { + TileEntity tile = worldObj.getTileEntity(node.positions[0].getX(), y, node.positions[0].getZ()); + if(!(tile instanceof TileEntityRebar)) continue; + + TileEntityRebar rebar = (TileEntityRebar) tile; + + progress += rebar.progress; + capacity += 1_000; + lowestLinks.add(rebar); + } + } + + if(capacity > 0 && !lowestLinks.isEmpty()) { + int maxSpeed = 50; + int maxAccept = (int) BobMathUtil.min(capacity - progress, amount, maxSpeed * lowestLinks.size()); + int target = Math.min((progress + maxAccept) / lowestLinks.size(), 1_000); + + for(TileEntityRebar rebar : lowestLinks) { + if(rebar.progress >= target) continue; + int delta = target - rebar.progress; + if(delta > amount) continue; + + rebar.progress += delta; + amount -= delta; + } + } + + return amount; + } + + @Override + public long getDemand(FluidType type, int pressure) { + return 10_000; + } + } + + public static class RebarNode extends GenNode { + + public RebarNode(INetworkProvider provider, BlockPos... positions) { + super(provider, positions); + } + + @Override + public RebarNode setConnections(DirPos... connections) { + super.setConnections(connections); + return this; + } + } + + @Override + public void renderInventoryBlock(Block block, int meta, int modelId, Object renderBlocks) { + + GL11.glPushMatrix(); + RenderBlocks renderer = (RenderBlocks) renderBlocks; + GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + + double o = 0.25D; + renderer.setRenderBounds(0.4375D - o, 0D, 0.4375D - o, 0.5625D - o, 1D, 0.5625D - o); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + renderer.setRenderBounds(0.4375D - o, 0D, 0.4375D + o, 0.5625D - o, 1D, 0.5625D + o); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + renderer.setRenderBounds(0.4375D + o, 0D, 0.4375D - o, 0.5625D + o, 1D, 0.5625D - o); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + renderer.setRenderBounds(0.4375D + o, 0D, 0.4375D + o, 0.5625D + o, 1D, 0.5625D + o); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + + renderer.setRenderBounds(0D, 0.4375D - o, 0.4375D - o, 1D, 0.5625D - o, 0.5625D - o); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + renderer.setRenderBounds(0D, 0.4375D - o, 0.4375D + o, 1D, 0.5625D - o, 0.5625D + o); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + renderer.setRenderBounds(0D, 0.4375D + o, 0.4375D - o, 1D, 0.5625D + o, 0.5625D - o); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + renderer.setRenderBounds(0D, 0.4375D + o, 0.4375D + o, 1D, 0.5625D + o, 0.5625D + o); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + + renderer.setRenderBounds(0.4375D - o, 0.4375D - o, 0D, 0.5625D - o, 0.5625D - o, 1D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + renderer.setRenderBounds(0.4375D - o, 0.4375D + o, 0D, 0.5625D - o, 0.5625D + o, 1D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + renderer.setRenderBounds(0.4375D + o, 0.4375D - o, 0D, 0.5625D + o, 0.5625D - o, 1D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + renderer.setRenderBounds(0.4375D + o, 0.4375D + o, 0D, 0.5625D + o, 0.5625D + o, 1D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + + GL11.glPopMatrix(); + } + + @Override + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, Object renderBlocks) { + + RenderBlocksNT renderer = RenderBlocksNT.INSTANCE.setWorld(world); + + Tessellator tessellator = Tessellator.instance; + tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z)); + tessellator.setColorOpaque_F(1, 1, 1); + + double o = 0.25D; + double min = -0.001; + double max = 1.001; + + if(ClientConfig.RENDER_REBAR_SIMPLE.get()) { + renderer.setRenderBounds(0.4375D, min, 0.4375D, 0.5625D, max, 0.5625D); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(min, 0.4375D, 0.4375D, max, 0.5625D, 0.5625D); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0.4375D, 0.4375D, min, 0.5625D, 0.5625D, max); renderer.renderStandardBlock(block, x, y, z); + } else { + renderer.setRenderBounds(0.4375D - o, min, 0.4375D - o, 0.5625D - o, max, 0.5625D - o); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0.4375D - o, min, 0.4375D + o, 0.5625D - o, max, 0.5625D + o); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0.4375D + o, min, 0.4375D - o, 0.5625D + o, max, 0.5625D - o); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0.4375D + o, min, 0.4375D + o, 0.5625D + o, max, 0.5625D + o); renderer.renderStandardBlock(block, x, y, z); + + renderer.setRenderBounds(min, 0.4375D - o, 0.4375D - o, max, 0.5625D - o, 0.5625D - o); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(min, 0.4375D - o, 0.4375D + o, max, 0.5625D - o, 0.5625D + o); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(min, 0.4375D + o, 0.4375D - o, max, 0.5625D + o, 0.5625D - o); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(min, 0.4375D + o, 0.4375D + o, max, 0.5625D + o, 0.5625D + o); renderer.renderStandardBlock(block, x, y, z); + + renderer.setRenderBounds(0.4375D - o, 0.4375D - o, min, 0.5625D - o, 0.5625D - o, max); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0.4375D - o, 0.4375D + o, min, 0.5625D - o, 0.5625D + o, max); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0.4375D + o, 0.4375D - o, min, 0.5625D + o, 0.5625D - o, max); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0.4375D + o, 0.4375D + o, min, 0.5625D + o, 0.5625D + o, max); renderer.renderStandardBlock(block, x, y, z); + } + + /*TileEntity tile = world.getTileEntity(x, y, z); + if(tile instanceof TileEntityRebar) { + TileEntityRebar rebar = (TileEntityRebar) tile; + if(rebar.progress > 0) { + double height = rebar.progress / 1000D; + renderer.setOverrideBlockTexture(concrete); + renderer.setRenderBounds(0, 0, 0, 1, height, 1); renderer.renderStandardBlock(block, x, y, z); + renderer.clearOverrideBlockTexture(); + } + }*/ + + return true; + } + + // from ModEventHandlerClient.onRenderWorldLastEvent + @SideOnly(Side.CLIENT) + public static void renderRebar(List tiles, float interp) { + + List rebars = new ArrayList(); + for(Object o : tiles) { + if(!(o instanceof TileEntityRebar)) continue; + TileEntityRebar rebar = (TileEntityRebar) o; + if(rebar.progress > 0) rebars.add(rebar); + } + + if(!rebars.isEmpty()) { + + GL11.glPushMatrix(); + GL11.glShadeModel(GL11.GL_SMOOTH); + //RenderHelper.enableStandardItemLighting(); + + EntityRenderer entityRenderer = Minecraft.getMinecraft().entityRenderer; + entityRenderer.enableLightmap(interp); + + EntityPlayer player = Minecraft.getMinecraft().thePlayer; + World world = Minecraft.getMinecraft().theWorld; + + double dx = player.prevPosX + (player.posX - player.prevPosX) * interp; + double dy = player.prevPosY + (player.posY - player.prevPosY) * interp; + double dz = player.prevPosZ + (player.posZ - player.prevPosZ) * interp; + + RenderBlocksNT renderer = RenderBlocksNT.INSTANCE.setWorld(world); + renderer.setOverrideBlockTexture(((BlockRebar) ModBlocks.rebar).concrete); + Minecraft.getMinecraft().getTextureManager().bindTexture(TextureMap.locationBlocksTexture); + + Tessellator tess = Tessellator.instance; + tess.startDrawingQuads(); + + for(TileEntityRebar rebar : rebars) { + tess.setTranslation(-dx, -dy, -dz); + tess.setColorRGBA_F(1F, 1F, 1F, 1F); + renderer.setRenderBounds(0, 0, 0, 1, rebar.progress / 1000D, 1); + renderer.renderStandardBlock(ModBlocks.rebar, rebar.xCoord, rebar.yCoord, rebar.zCoord); + + /*IIcon icon = ((BlockRebar) ModBlocks.rebar).concrete; + double minU = icon.getInterpolatedU(renderer.renderMinX * 16.0D); + double maxU = icon.getInterpolatedU(renderer.renderMaxX * 16.0D); + double minV = icon.getInterpolatedV(renderer.renderMinZ * 16.0D); + double maxV = icon.getInterpolatedV(renderer.renderMaxZ * 16.0D); + + double minX = rebar.xCoord + renderer.renderMinX; + double maxX = rebar.xCoord + renderer.renderMaxX; + double minY = rebar.yCoord + renderer.renderMinY; + double maxY = rebar.yCoord + renderer.renderMaxY; + double minZ = rebar.zCoord + renderer.renderMinZ; + double maxZ = rebar.zCoord + renderer.renderMaxZ; + + //tess.setColorOpaque_F(0.5F, 1F, 1F); + tess.setNormal(0, 1, 0); + tess.addVertexWithUV(maxX, maxY, maxZ, maxU, maxV); + tess.addVertexWithUV(maxX, maxY, minZ, maxU, minV); + tess.addVertexWithUV(minX, maxY, minZ, minU, minV); + tess.addVertexWithUV(minX, maxY, maxZ, minU, maxV);*/ + } + + tess.draw(); + tess.setTranslation(0, 0, 0); + renderer.clearOverrideBlockTexture(); + entityRenderer.disableLightmap(interp); + + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glPopMatrix(); + } + } +} diff --git a/src/main/java/com/hbm/blocks/rail/IRenderBlock.java b/src/main/java/com/hbm/blocks/rail/IRenderBlock.java index 7cf90e9fd..f8b75055e 100644 --- a/src/main/java/com/hbm/blocks/rail/IRenderBlock.java +++ b/src/main/java/com/hbm/blocks/rail/IRenderBlock.java @@ -7,6 +7,7 @@ import net.minecraft.block.Block; import net.minecraft.client.renderer.Tessellator; import net.minecraft.world.IBlockAccess; +@Deprecated public interface IRenderBlock { public static int renderID = RenderingRegistry.getNextAvailableRenderId(); diff --git a/src/main/java/com/hbm/config/ClientConfig.java b/src/main/java/com/hbm/config/ClientConfig.java index 1ddd4cf21..0dc370790 100644 --- a/src/main/java/com/hbm/config/ClientConfig.java +++ b/src/main/java/com/hbm/config/ClientConfig.java @@ -32,6 +32,7 @@ public class ClientConfig extends RunningConfig { public static ConfigWrapper RENDER_REEDS = new ConfigWrapper(!Compat.isModLoaded(Compat.MOD_ANG)); public static ConfigWrapper NEI_HIDE_SECRETS = new ConfigWrapper(true); public static ConfigWrapper COOLING_TOWER_PARTICLES = new ConfigWrapper(true); + public static ConfigWrapper RENDER_REBAR_SIMPLE = new ConfigWrapper(false); private static void initDefaults() { configMap.put("GEIGER_OFFSET_HORIZONTAL", GEIGER_OFFSET_HORIZONTAL); @@ -53,6 +54,7 @@ public class ClientConfig extends RunningConfig { configMap.put("RENDER_REEDS", RENDER_REEDS); configMap.put("NEI_HIDE_SECRETS", NEI_HIDE_SECRETS); configMap.put("COOLING_TOWER_PARTICLES", COOLING_TOWER_PARTICLES); + configMap.put("RENDER_REBAR_SIMPLE", RENDER_REBAR_SIMPLE); } /** Initializes defaults, then reads the config file if it exists, then writes the config file. */ diff --git a/src/main/java/com/hbm/crafting/ToolRecipes.java b/src/main/java/com/hbm/crafting/ToolRecipes.java index b01ee10cf..d8d52b0ce 100644 --- a/src/main/java/com/hbm/crafting/ToolRecipes.java +++ b/src/main/java/com/hbm/crafting/ToolRecipes.java @@ -160,6 +160,10 @@ public class ToolRecipes { //Bobmazon CraftingManager.addShapelessAuto(new ItemStack(ModItems.bobmazon), new Object[] { Items.book, Items.gold_nugget, Items.string, KEY_BLUE }); + //Blueprints + //CraftingManager.addShapelessAuto(new ItemStack(ModItems.blueprint_folder, 1, 0), new Object[] { ModItems.blueprints, ModItems.blueprints, ModItems.blueprints }); + //CraftingManager.addShapelessAuto(new ItemStack(ModItems.blueprint_folder, 1, 1), new Object[] { ModItems.blueprints, ModItems.blueprints, ModItems.blueprints, ModItems.blueprints, ModItems.blueprints, ModItems.fragment_meteorite }); + //Carts CraftingManager.addRecipeAuto(ItemModMinecart.createCartItem(EnumCartBase.WOOD, EnumMinecart.EMPTY), new Object[] { "P P", "WPW", 'P',KEY_SLAB, 'W', KEY_PLANKS }); CraftingManager.addRecipeAuto(ItemModMinecart.createCartItem(EnumCartBase.STEEL, EnumMinecart.EMPTY), new Object[] { "P P", "IPI", 'P', STEEL.plate(), 'I', STEEL.ingot() }); diff --git a/src/main/java/com/hbm/inventory/fluid/Fluids.java b/src/main/java/com/hbm/inventory/fluid/Fluids.java index cadd39969..b020867c4 100644 --- a/src/main/java/com/hbm/inventory/fluid/Fluids.java +++ b/src/main/java/com/hbm/inventory/fluid/Fluids.java @@ -190,6 +190,7 @@ public class Fluids { public static FluidType SODIUM_ALUMINATE; public static FluidType BAUXITE_SOLUTION; public static FluidType ALUMINA; + public static FluidType CONCRETE; /* Lagacy names for compatibility purposes */ @Deprecated public static FluidType ACID; //JAOPCA uses this, apparently @@ -405,7 +406,8 @@ public class Fluids { SODIUM_ALUMINATE = new FluidType("SODIUM_ALUMINATE", 0xFFD191, 3, 0, 1, EnumSymbol.ACID).addTraits(new FT_Corrosive(30), LIQUID); BAUXITE_SOLUTION = new FluidType("BAUXITE_SOLUTION", 0xE2560F, 3, 0, 3, EnumSymbol.ACID).addTraits(new FT_Corrosive(40), LIQUID, VISCOUS); ALUMINA = new FluidType("ALUMINA", 0xDDFFFF, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID); - AIR = new FluidType(151, "AIR", 0xE7EAEB, 0, 0, 0, EnumSymbol.NONE).addTraits(GASEOUS); + AIR = new FluidType("AIR", 0xE7EAEB, 0, 0, 0, EnumSymbol.NONE).addTraits(GASEOUS); + CONCRETE = new FluidType(152, "CONCRETE", 0xA2A2A2, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID); // ^ ^ ^ ^ ^ ^ ^ ^ //ADD NEW FLUIDS HERE @@ -553,6 +555,7 @@ public class Fluids { metaOrder.add(SODIUM_ALUMINATE); metaOrder.add(BAUXITE_SOLUTION); metaOrder.add(ALUMINA); + metaOrder.add(CONCRETE); //solutions and working fluids metaOrder.add(FRACKSOL); metaOrder.add(LYE); diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index 1960d4dfb..476cb5e31 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -26,8 +26,6 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.material.Mats; import com.hbm.inventory.recipes.loader.SerializableRecipe; import com.hbm.items.ModItems; -import com.hbm.items.ItemEnums.EnumCasingType; -import com.hbm.items.ItemEnums.EnumSecretType; import com.hbm.items.ItemGenericPart.EnumPartType; import com.hbm.items.machine.ItemAssemblyTemplate; import com.hbm.items.machine.ItemCircuit.EnumCircuitType; @@ -36,7 +34,6 @@ import com.hbm.items.machine.ItemPACoil.EnumCoilType; import com.hbm.items.machine.ItemPistons.EnumPistonType; import com.hbm.items.weapon.ItemAmmoHIMARS; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; -import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmoSecret; import com.hbm.main.MainRegistry; import cpw.mods.fml.common.Loader; @@ -98,7 +95,6 @@ public class AssemblerRecipes extends SerializableRecipe { makeRecipe(new ComparableStack(ModItems.warhead_volcano, 1), new AStack[] {new OreDictStack(TI.plate(), 24), new OreDictStack(STEEL.plate(), 16), new ComparableStack(ModBlocks.det_nuke, 3), new OreDictStack(U238.block(), 24), new ComparableStack(ModItems.circuit, 5, EnumCircuitType.CAPACITOR_BOARD.ordinal()) }, 600); makeRecipe(new ComparableStack(ModItems.missile_stealth, 1), new AStack[] { new OreDictStack(TI.plate(), 20), new OreDictStack(AL.plate(), 20), new OreDictStack(CU.plate(), 10), new OreDictStack(KEY_BLACK, 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 4), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED.ordinal()), new OreDictStack(STEEL.bolt(), 32) },1200); makeRecipe(new ComparableStack(ModItems.thruster_nuclear, 1), new AStack[] {new OreDictStack(DURA.ingot(), 32), new OreDictStack(B.ingot(), 8), new OreDictStack(PB.plate(), 16), new ComparableStack(ModItems.pipes_steel) },600); - makeRecipe(new ComparableStack(ModItems.tritium_deuterium_cake, 1), new AStack[] {new ComparableStack(ModItems.cell_deuterium, 6), new ComparableStack(ModItems.cell_tritium, 2), new OreDictStack(LI.ingot(), 4), },150); makeRecipe(new ComparableStack(ModItems.pellet_cluster, 1), new AStack[] {new OreDictStack(STEEL.plate(), 4), new ComparableStack(Blocks.tnt, 1), }, 50); makeRecipe(new ComparableStack(ModItems.pellet_buckshot, 1), new AStack[] {new OreDictStack(PB.nugget(), 6), }, 50); makeRecipe(new ComparableStack(ModItems.magnetron, 1), new AStack[] {new OreDictStack(CU.plate(), 3), new OreDictStack(W.wireFine(), 4), }, 40); @@ -157,7 +153,6 @@ public class AssemblerRecipes extends SerializableRecipe { makeRecipe(new ComparableStack(ModBlocks.nuke_fleija, 1), new AStack[] {new OreDictStack(AL.shell(), 1), new ComparableStack(ModItems.fins_quad_titanium, 1), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.CONTROLLER), new OreDictStack("dyeWhite", 4), },400); makeRecipe(new ComparableStack(ModBlocks.nuke_solinium, 1), new AStack[] {new OreDictStack(STEEL.shell(), 2), new ComparableStack(ModItems.fins_quad_titanium, 1), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.CONTROLLER), new OreDictStack("dyeGray", 8), },400); makeRecipe(new ComparableStack(ModBlocks.nuke_n2, 1), new AStack[] {new OreDictStack(STEEL.shell(), 6), new OreDictStack(MAGTUNG.wireFine(), 12), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.CONTROLLER), new OreDictStack("dyeBlack", 8), },300); - makeRecipe(new ComparableStack(ModBlocks.nuke_fstbmb, 1), new AStack[] {new ComparableStack(ModItems.sphere_steel, 1), new OreDictStack(TI.shell(), 6), new ComparableStack(ModItems.fins_big_steel, 1), new ComparableStack(ModItems.powder_magic, 8), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.CONTROLLER_ADVANCED), new OreDictStack("dyeGray", 8), },600, ModItems.journal_pip, ModItems.journal_bj); makeRecipe(new ComparableStack(ModBlocks.nuke_custom, 1), new AStack[] {new OreDictStack(STEEL.shell(), 2), new ComparableStack(ModItems.fins_small_steel, 1), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.CONTROLLER_ADVANCED), new OreDictStack("dyeGray", 4), },300); makeRecipe(new ComparableStack(ModBlocks.float_bomb, 1), new AStack[] {new OreDictStack(TI.plate(), 12), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED), new OreDictStack(GOLD.wireDense(), 8), },250); makeRecipe(new ComparableStack(ModBlocks.therm_endo, 1), new AStack[] {new OreDictStack(TI.plate(), 12), new ComparableStack(ModItems.powder_ice, 32), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.coil_gold, 4), },250); @@ -237,13 +232,13 @@ public class AssemblerRecipes extends SerializableRecipe { makeRecipe(new ComparableStack(ModItems.mp_warhead_10_buster, 1), new AStack[] {new ComparableStack(ModItems.seg_10, 1), new OreDictStack(TI.plate(), 4), new ComparableStack(ModBlocks.det_charge, 1), new ComparableStack(ModBlocks.det_cord, 4), new OreDictStack(CU.plateCast(), 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC), },100); makeRecipe(new ComparableStack(ModItems.mp_warhead_10_nuclear, 1), new AStack[] {new ComparableStack(ModItems.seg_10, 1), new OreDictStack(STEEL.plate(), 6), new OreDictStack(PU239.ingot(), 1), new OreDictStack(OreDictManager.getReflector(), 2), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), },200); makeRecipe(new ComparableStack(ModItems.mp_warhead_10_nuclear_large, 1), new AStack[] {new ComparableStack(ModItems.seg_10, 1), new OreDictStack(STEEL.plate(), 8), new OreDictStack(AL.plate(), 4), new OreDictStack(PU239.ingot(), 2), new ComparableStack(ModBlocks.det_charge, 4), new ComparableStack(ModItems.circuit,3, EnumCircuitType.ADVANCED), },300); - makeRecipe(new ComparableStack(ModItems.mp_warhead_10_taint, 1), new AStack[] {new ComparableStack(ModItems.seg_10, 1), new OreDictStack(STEEL.plate(), 12), new ComparableStack(ModBlocks.det_cord, 2), new ComparableStack(ModItems.powder_magic, 12), new ComparableStack(ModItems.bucket_mud, 1), },100, ModItems.journal_pip); - makeRecipe(new ComparableStack(ModItems.mp_warhead_10_cloud, 1), new AStack[] {new ComparableStack(ModItems.seg_10, 1), new OreDictStack(STEEL.plate(), 12), new ComparableStack(ModBlocks.det_cord, 2), new ComparableStack(ModItems.grenade_pink_cloud, 2), },100, ModItems.journal_pip); + makeRecipe(new ComparableStack(ModItems.mp_warhead_10_taint, 1), new AStack[] {new ComparableStack(ModItems.seg_10, 1), new OreDictStack(STEEL.plate(), 12), new ComparableStack(ModBlocks.det_cord, 2), new ComparableStack(ModItems.powder_magic, 12), new ComparableStack(ModItems.bucket_mud, 1), },100); + makeRecipe(new ComparableStack(ModItems.mp_warhead_10_cloud, 1), new AStack[] {new ComparableStack(ModItems.seg_10, 1), new OreDictStack(STEEL.plate(), 12), new ComparableStack(ModBlocks.det_cord, 2), new ComparableStack(ModItems.grenade_pink_cloud, 2), },100); makeRecipe(new ComparableStack(ModItems.mp_warhead_15_he, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new OreDictStack(STEEL.plate(), 16), new ComparableStack(ModBlocks.det_charge, 4), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC), },200); makeRecipe(new ComparableStack(ModItems.mp_warhead_15_incendiary, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new OreDictStack(STEEL.plate(), 16), new ComparableStack(ModBlocks.det_charge, 2), new OreDictStack(P_RED.dust(), 8), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC), },200); makeRecipe(new ComparableStack(ModItems.mp_warhead_15_nuclear, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new OreDictStack(STEEL.plate(), 24), new OreDictStack(TI.plate(), 12), new OreDictStack(PU239.ingot(), 3), new ComparableStack(ModBlocks.det_charge, 6), new ComparableStack(ModItems.circuit, 5, EnumCircuitType.ADVANCED), },500); makeRecipe(new ComparableStack(ModItems.mp_warhead_15_n2, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new OreDictStack(STEEL.plate(), 8), new OreDictStack(TI.plate(), 20), new ComparableStack(ModBlocks.det_charge, 24), new ComparableStack(Blocks.redstone_block, 12), new OreDictStack(MAGTUNG.dust(), 6), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED), },400); - makeRecipe(new ComparableStack(ModItems.mp_warhead_15_balefire, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new OreDictStack(OreDictManager.getReflector(), 16), new ComparableStack(ModItems.powder_magic, 6), new ComparableStack(ModItems.egg_balefire_shard, 4), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 8), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.ADVANCED), }, 60, ModItems.journal_bj); + makeRecipe(new ComparableStack(ModItems.mp_warhead_15_balefire, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new OreDictStack(OreDictManager.getReflector(), 16), new ComparableStack(ModItems.powder_magic, 6), new ComparableStack(ModItems.egg_balefire_shard, 4), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 8), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.ADVANCED), }, 60); makeRecipe(new ComparableStack(ModItems.fusion_shield_tungsten, 1), new AStack[] {new OreDictStack(W.block(), 32), new OreDictStack(OreDictManager.getReflector(), 96)}, 600); makeRecipe(new ComparableStack(ModItems.fusion_shield_desh, 1), new AStack[] {new OreDictStack(DESH.block(), 16), new OreDictStack(CO.block(), 16), new OreDictStack(BIGMT.plate(), 96)}, 600); makeRecipe(new ComparableStack(ModItems.fusion_shield_chlorophyte, 1), new AStack[] {new OreDictStack(W.block(), 16), new OreDictStack(DURA.block(), 16), new OreDictStack(OreDictManager.getReflector(), 48), new ComparableStack(ModItems.powder_chlorophyte, 48)}, 600); @@ -258,15 +253,6 @@ public class AssemblerRecipes extends SerializableRecipe { new ComparableStack(ModItems.part_generic, 32, EnumPartType.LDE) },600); - makeRecipe(new ComparableStack(ModItems.missile_soyuz_lander, 1), new AStack[] { - new OreDictStack(AL.shell(), 4), - new OreDictStack(RUBBER.ingot(), 16), - new ComparableStack(ModItems.rocket_fuel, 16), - new ComparableStack(ModItems.thruster_small, 3), - new ComparableStack(ModItems.circuit, 3, EnumCircuitType.CONTROLLER_ADVANCED), - new ComparableStack(ModItems.part_generic, 12, EnumPartType.LDE) - },600, ModItems.journal_bj); - makeRecipe(new ComparableStack(ModItems.sat_base, 1), new AStack[] { new OreDictStack(RUBBER.ingot(), 12), new OreDictStack(TI.shell(), 3), @@ -397,7 +383,7 @@ public class AssemblerRecipes extends SerializableRecipe { new OreDictStack(STEEL.plate528(), 16), new OreDictStack(CU.ingot(), 12), new OreDictStack(GOLD.wireDense(), 8), - new ComparableStack(ModItems.tank_steel, 4), + new OreDictStack(STEEL.shell(), 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC) }, 300); @@ -405,7 +391,7 @@ public class AssemblerRecipes extends SerializableRecipe { new ComparableStack(ModItems.ingot_firebrick, 12), new OreDictStack(STEEL.plateCast(), 6), new OreDictStack(CU.plateWelded(), 2), - new ComparableStack(ModItems.tank_steel, 2), + new OreDictStack(STEEL.shell(), 2), new OreDictStack(ANY_CONCRETE.any(), 8) }, 100); @@ -573,15 +559,6 @@ public class AssemblerRecipes extends SerializableRecipe { new ComparableStack(ModItems.coin_worm, 1) }, 1200); - makeRecipe(new ComparableStack(ModItems.sat_gerald, 1), new AStack[] { - new OreDictStack(SBD.plateCast(), 128), - new OreDictStack(BSCCO.wireDense(), 128), - new ComparableStack(ModBlocks.det_nuke, 64), - new ComparableStack(ModItems.part_generic, 256, EnumPartType.HDE), - new ComparableStack(ModItems.circuit, 64, EnumCircuitType.CONTROLLER_QUANTUM), - new ComparableStack(ModItems.coin_ufo, 1), - }, 1200, ModItems.journal_bj); - makeRecipe(new ComparableStack(ModBlocks.vault_door, 1), new AStack[] { new OreDictStack(STEEL.ingot(), 32), new OreDictStack(W.ingot(), 32), @@ -785,18 +762,6 @@ public class AssemblerRecipes extends SerializableRecipe { new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), }, 100); - makeRecipe(new ComparableStack(ModItems.ammo_standard, 6, EnumAmmo.BMG50_SM), new AStack[] { - new ComparableStack(ModItems.casing, 1, EnumCasingType.LARGE_STEEL), - new OreDictStack(ANY_SMOKELESS.dust(), 6), - new OreDictStack(STAR.ingot(), 3), - }, 100, ModItems.journal_silver); - makeRecipe(new ComparableStack(ModItems.ammo_secret, 12, EnumAmmoSecret.BMG50_BLACK), new AStack[] { - new ComparableStack(ModItems.casing, 2, EnumCasingType.LARGE_STEEL), - new OreDictStack(ANY_SMOKELESS.dust(), 24), - new ComparableStack(ModItems.item_secret, 1, EnumSecretType.SELENIUM_STEEL), - new ComparableStack(ModItems.black_diamond), - }, 1200, ModItems.journal_silver); - makeRecipe(new ComparableStack(ModBlocks.machine_silex, 1), new AStack[] { new ComparableStack(ModBlocks.glass_quartz, 16), !exp ? new OreDictStack(STEEL.plateCast(), 8) : new OreDictStack(STEEL.heavyComp(), 1), @@ -929,8 +894,8 @@ public class AssemblerRecipes extends SerializableRecipe { !exp ? new OreDictStack(STEEL.plateCast(), 8) : new OreDictStack(STEEL.heavyComp(), 2), !exp ? new OreDictStack(CU.plate528(), 16) : new OreDictStack(CU.heavyComp(), 1), new OreDictStack(RUBBER.ingot(), 8), + new OreDictStack(STEEL.shell(), 3), new ComparableStack(ModItems.ingot_firebrick, 16), - new ComparableStack(ModItems.tank_steel, 3), new ComparableStack(ModItems.coil_copper, 16), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.BASIC) }, 200); @@ -1112,7 +1077,6 @@ public class AssemblerRecipes extends SerializableRecipe { if(!GeneralConfig.enable528) { makeRecipe(new ComparableStack(ModBlocks.machine_hephaestus, 1), new AStack[] { new OreDictStack(STEEL.pipe(), 12), !exp ? new OreDictStack(STEEL.ingot(), 24) : new OreDictStack(STEEL.heavyComp(), 2), !exp ? new OreDictStack(CU.plate(), 24) : new OreDictStack(CU.heavyComp(), 2), new OreDictStack(NB.ingot(), 4), new OreDictStack(RUBBER.ingot(), 12), new ComparableStack(ModBlocks.glass_quartz, 16) }, 150); - makeRecipe(new ComparableStack(ModBlocks.machine_radgen, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 8), new OreDictStack(STEEL.plate(), 32), new ComparableStack(ModItems.coil_magnetized_tungsten, 6), new OreDictStack(MAGTUNG.wireFine(), 24), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC), new ComparableStack(ModItems.reactor_core, 3), new OreDictStack(STAR.ingot(), 1), new OreDictStack("dyeRed", 1), }, 400, ModItems.journal_pip); makeRecipe(new ComparableStack(ModBlocks.machine_reactor_breeding, 1), new AStack[] {new ComparableStack(ModItems.reactor_core, 1), new OreDictStack(STEEL.ingot(), 12), new OreDictStack(PB.plate(), 16), new ComparableStack(ModBlocks.reinforced_glass, 4), new OreDictStack(ASBESTOS.ingot(), 4), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new ComparableStack(ModItems.crt_display, 1)},150); makeRecipe(new ComparableStack(ModBlocks.reactor_research, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 8), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new ComparableStack(ModItems.motor_desh, 2), new OreDictStack(B.ingot(), 5), new OreDictStack(PB.plate(), 8), new ComparableStack(ModItems.crt_display, 3), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC), },300); @@ -1206,8 +1170,8 @@ public class AssemblerRecipes extends SerializableRecipe { new ComparableStack(ModItems.motor_desh, 2), !exp ? new ComparableStack(ModItems.plate_desh, 6) : new OreDictStack(DESH.heavyComp()), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CAPACITOR), - new ComparableStack(ModItems.tank_steel, 24), - new ComparableStack(ModItems.pipes_steel, 2) + new OreDictStack(STEEL.shell(), 16), + new OreDictStack(STEEL.pipe(), 12) }, 600); makeRecipe(new ComparableStack(ModBlocks.machine_catalytic_cracker), new AStack[] { @@ -1243,8 +1207,8 @@ public class AssemblerRecipes extends SerializableRecipe { new OreDictStack(RUBBER.ingot(), 8), new OreDictStack(PB.plate528(), 12), new OreDictStack(CU.plateCast(), 4), - new ComparableStack(ModItems.thermo_element, 8), - new ComparableStack(ModItems.tank_steel, 3) + new OreDictStack(STEEL.shell(), 2), + new ComparableStack(ModItems.thermo_element, 8) }, 200); makeRecipe(new ComparableStack(ModBlocks.transition_seal, 1), new AStack[]{ diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index 472a33cc1..1406819af 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -284,7 +284,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.dieselgen").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_diesel, 1)) .inputItems(new OreDictStack(STEEL.shell(), 1), new OreDictStack(CU.plateCast(), 2), new ComparableStack(ModItems.coil_copper, 4))); this.register(new GenericRecipe("ass.combustiongen").setup(300, 100).outputItems(new ItemStack(ModBlocks.machine_combustion_engine, 1)) - .inputItems(new OreDictStack(STEEL.plate528(), 16), new OreDictStack(CU.ingot(), 12), new OreDictStack(GOLD.wireDense(), 8), new ComparableStack(ModItems.tank_steel, 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC))); + .inputItems(new OreDictStack(STEEL.plate528(), 16), new OreDictStack(CU.ingot(), 12), new OreDictStack(GOLD.wireDense(), 8), new ComparableStack(ModItems.canister_empty, 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC))); this.register(new GenericRecipe("ass.pistonsetsteel").setup(200, 100).outputItems(new ItemStack(ModItems.piston_set, 1, EnumPistonType.STEEL.ordinal())) .inputItems(new OreDictStack(STEEL.plate(), 16), new OreDictStack(CU.plate(), 4), new OreDictStack(W.ingot(), 8), new OreDictStack(W.bolt(), 16))); this.register(new GenericRecipe("ass.pistonsetdura").setup(200, 100).outputItems(new ItemStack(ModItems.piston_set, 1, EnumPistonType.DURA.ordinal())) @@ -356,10 +356,10 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new ComparableStack(ModBlocks.pa_beamline, 3), new OreDictStack(STEEL.plateCast(), 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.magnetron, 16), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.QUANTUM))); this.register(new GenericRecipe("ass.detector").setup(400, 100).outputItems(new ItemStack(ModBlocks.pa_detector, 1)) .inputItems(new ComparableStack(ModBlocks.pa_beamline, 3), new OreDictStack(STEEL.plateCast(), 24), new OreDictStack(GOLD.wireDense(), 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.QUANTUM))); - this.register(new GenericRecipe("ass.pagold").setup(400, 100).outputItems(new ItemStack(ModItems.pa_coil, 1, EnumCoilType.GOLD.ordinal())).inputItems(new OreDictStack(GOLD.wireDense(), 128))); + this.register(new GenericRecipe("ass.pagold").setup(400, 100).outputItems(new ItemStack(ModItems.pa_coil, 1, EnumCoilType.GOLD.ordinal())).inputItems(new OreDictStack(GOLD.wireDense(), 64), new OreDictStack(GOLD.wireDense(), 64))); this.register(new GenericRecipe("ass.panbti").setup(400, 100).outputItems(new ItemStack(ModItems.pa_coil, 1, EnumCoilType.NIOBIUM.ordinal())).inputItems(new OreDictStack(NB.wireDense(), 64), new OreDictStack(TI.wireDense(), 64))); this.register(new GenericRecipe("ass.pabscco").setup(400, 100).outputItems(new ItemStack(ModItems.pa_coil, 1, EnumCoilType.BSCCO.ordinal())).inputItems(new OreDictStack(BSCCO.wireDense(), 64), new OreDictStack(ANY_PLASTIC.ingot(), 64))); - this.register(new GenericRecipe("ass.pachlorophyte").setup(400, 100).outputItems(new ItemStack(ModItems.pa_coil, 1, EnumCoilType.CHLOROPHYTE.ordinal())).inputItems(new OreDictStack(CU.wireDense(), 128), new ComparableStack(ModItems.powder_chlorophyte, 16))); + this.register(new GenericRecipe("ass.pachlorophyte").setup(400, 100).outputItems(new ItemStack(ModItems.pa_coil, 1, EnumCoilType.CHLOROPHYTE.ordinal())).inputItems(new OreDictStack(CU.wireDense(), 64), new OreDictStack(CU.wireDense(), 64), new ComparableStack(ModItems.powder_chlorophyte, 16))); this.register(new GenericRecipe("ass.exposurechamber").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_exposure_chamber, 1)) .inputItems(new OreDictStack(AL.plateCast(), 12), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 12), new OreDictStack(ALLOY.wireDense(), 32), new ComparableStack(ModItems.motor_desh, 2), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID), new ComparableStack(ModBlocks.capacitor_tantalium, 1), new ComparableStack(ModBlocks.glass_quartz, 16))); @@ -385,9 +385,9 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.fusionheater").setup(200, 100).outputItems(new ItemStack(ModBlocks.fusion_heater, 4)) .inputItems(new OreDictStack(W.plateWelded(), 2), new OreDictStack(STEEL.plateWelded(), 2), new OreDictStack(OreDictManager.getReflector(), 2), new ComparableStack(ModItems.magnetron, 2))); this.register(new GenericRecipe("ass.blankettungsten").setup(600, 100).outputItems(new ItemStack(ModItems.fusion_shield_tungsten, 1)) - .inputItems(new OreDictStack(W.block(), 32), new OreDictStack(OreDictManager.getReflector(), 96))); + .inputItems(new OreDictStack(W.block(), 32), new OreDictStack(OreDictManager.getReflector(), 64))); this.register(new GenericRecipe("ass.blanketdesh").setup(600, 100).outputItems(new ItemStack(ModItems.fusion_shield_desh, 1)) - .inputItems(new OreDictStack(DESH.block(), 16), new OreDictStack(CO.block(), 16), new OreDictStack(BIGMT.plate(), 96))); + .inputItems(new OreDictStack(DESH.block(), 16), new OreDictStack(CO.block(), 16), new OreDictStack(BIGMT.plate(), 64))); this.register(new GenericRecipe("ass.blanketchlorophyte").setup(600, 100).outputItems(new ItemStack(ModItems.fusion_shield_chlorophyte, 1)) .inputItems(new OreDictStack(W.block(), 16), new OreDictStack(DURA.block(), 16), new OreDictStack(OreDictManager.getReflector(), 48), new ComparableStack(ModItems.powder_chlorophyte, 48))); @@ -579,9 +579,9 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.fritz").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_fritz, 1)) .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 16), new ComparableStack(ModItems.motor, 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 8), new OreDictStack(GUNMETAL.mechanism(), 3), new ComparableStack(ModBlocks.barrel_steel))); this.register(new GenericRecipe("ass.arty").setup(1_200, 100).outputItems(new ItemStack(ModBlocks.turret_arty, 1)) - .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 128), new ComparableStack(ModItems.motor_desh, 5), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 12), new OreDictStack(WEAPONSTEEL.mechanism(), 16), new ComparableStack(ModBlocks.machine_radar, 1), new ComparableStack(ModItems.crt_display, 1))); + .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 64), new OreDictStack(STEEL.ingot(), 64), new ComparableStack(ModItems.motor_desh, 5), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 12), new OreDictStack(WEAPONSTEEL.mechanism(), 16), new ComparableStack(ModBlocks.machine_radar, 1), new ComparableStack(ModItems.crt_display, 1))); this.register(new GenericRecipe("ass.himars").setup(1_200, 100).outputItems(new ItemStack(ModBlocks.turret_himars, 1)) - .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 128), new OreDictStack(ANY_PLASTIC.ingot(), 64), new ComparableStack(ModItems.motor_desh, 5), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.ADVANCED), new OreDictStack(BIGMT.mechanism(), 8), new ComparableStack(ModBlocks.machine_radar, 1), new ComparableStack(ModItems.crt_display, 1))); + .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 64), new OreDictStack(STEEL.ingot(), 64), new OreDictStack(ANY_PLASTIC.ingot(), 64), new ComparableStack(ModItems.motor_desh, 5), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.ADVANCED), new OreDictStack(BIGMT.mechanism(), 8), new ComparableStack(ModBlocks.machine_radar, 1), new ComparableStack(ModItems.crt_display, 1))); this.register(new GenericRecipe("ass.himarssmall").setup(100, 100).outputItems(new ItemStack(ModItems.ammo_himars, 1, ItemAmmoHIMARS.SMALL)) .inputItems(new OreDictStack(STEEL.plate(), 24), new OreDictStack(ANY_PLASTIC.ingot(), 12), new ComparableStack(ModItems.rocket_fuel, 48), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 48), new ComparableStack(ModItems.circuit, 6, EnumCircuitType.BASIC))); this.register(new GenericRecipe("ass.himarssmallhe").setup(100, 100).outputItems(new ItemStack(ModItems.ammo_himars, 1, ItemAmmoHIMARS.SMALL_HE)) diff --git a/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java index 4bbf1074c..ca0228ca0 100644 --- a/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java @@ -60,7 +60,7 @@ public class ChemicalPlantRecipes extends GenericRecipes { this.register(new GenericRecipe("chem.xenonoxy").setupNamed(20, 1_000).setIcon(ModItems.gas_full, Fluids.XENON.getID()) .inputFluids(new FluidStack(Fluids.AIR, 8_000), new FluidStack(Fluids.OXYGEN, 250)) - .outputFluids(new FluidStack(Fluids.XENON, 50))); + .outputFluids(new FluidStack(Fluids.XENON, 50)).setPools(GenericRecipes.POOL_PREFIX_ALT + ".xenonoxy")); this.register(new GenericRecipe("chem.helium3").setupNamed(200, 2_000).setIcon(ModItems.gas_full, Fluids.HELIUM3.getID()) .inputItems(new ComparableStack(ModBlocks.moon_turf, 8)) @@ -131,6 +131,11 @@ public class ChemicalPlantRecipes extends GenericRecipes { .inputFluids(new FluidStack(Fluids.WATER, 2_000)) .outputItems(new ItemStack(ModBlocks.ducrete_smooth, 8))); + this.register(new GenericRecipe("chem.liquidconk").setup(100, 100) + .inputItems(new ComparableStack(ModItems.powder_cement, 1), new ComparableStack(Blocks.gravel, 8), new OreDictStack(KEY_SAND, 8)) + .inputFluids(new FluidStack(Fluids.WATER, 2_000)) + .outputFluids(new FluidStack(Fluids.CONCRETE, 16_000))); + this.register(new GenericRecipe("chem.asphalt").setup(100, 100) .inputItems(new ComparableStack(Blocks.gravel, 2), new OreDictStack(KEY_SAND, 6)) .inputFluids(new FluidStack(Fluids.BITUMEN, 1_000)) @@ -209,7 +214,7 @@ public class ChemicalPlantRecipes extends GenericRecipes { this.register(new GenericRecipe("chem.birkeland").setupNamed(200, 5_000) .inputFluids(new FluidStack(Fluids.AIR, 8_000), new FluidStack(Fluids.WATER, 2_000)) - .outputFluids(new FluidStack(Fluids.NITRIC_ACID, 1_000))); + .outputFluids(new FluidStack(Fluids.NITRIC_ACID, 1_000)).setPools(GenericRecipes.POOL_PREFIX_ALT + ".birkeland")); this.register(new GenericRecipe("chem.schrabidic").setup(100, 5_000) .inputItems(new ComparableStack(ModItems.pellet_charged)) diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java index 264e67cda..0f98be052 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java @@ -57,7 +57,7 @@ public class GenericRecipe { public GenericRecipe setNamed() { this.customLocalization = true; return this; } public GenericRecipe setPools(String... pools) { this.blueprintPools = pools; for(String pool : pools) GenericRecipes.addToPool(pool, this); return this; } - public GenericRecipe inputItems(AStack... input) { this.inputItem = input; return this; } + public GenericRecipe inputItems(AStack... input) { this.inputItem = input; for(AStack stack : this.inputItem) if(stack.stacksize > 64) throw new IllegalArgumentException("AStack in " + this.name + " exceeds stack limit!"); return this; } public GenericRecipe inputFluids(FluidStack... input) { this.inputFluid = input; return this; } public GenericRecipe outputItems(IOutput... output) { this.outputItem = output; return this; } public GenericRecipe outputFluids(FluidStack... output) { this.outputFluid = output; return this; } diff --git a/src/main/java/com/hbm/itempool/ItemPoolsComponent.java b/src/main/java/com/hbm/itempool/ItemPoolsComponent.java index 7bbeea0e0..8f1a78633 100644 --- a/src/main/java/com/hbm/itempool/ItemPoolsComponent.java +++ b/src/main/java/com/hbm/itempool/ItemPoolsComponent.java @@ -50,7 +50,8 @@ public class ItemPoolsComponent { weighted(ModItems.circuit, EnumCircuitType.VACUUM_TUBE.ordinal(), 1, 2, 4), weighted(ModItems.circuit, EnumCircuitType.PCB.ordinal(), 1, 3, 5), weighted(ModItems.circuit, EnumCircuitType.CAPACITOR.ordinal(), 1, 1, 3), - weighted(ModItems.blade_titanium, 0, 1, 8, 1) + weighted(ModItems.blade_titanium, 0, 1, 8, 1), + weighted(ModItems.blueprint_folder, 0, 1, 1, 1) }; }}; @@ -123,7 +124,8 @@ public class ItemPoolsComponent { weighted(ModItems.toothpicks, 0, 1, 16, 10), weighted(ModItems.dust, 0, 1, 1, 40), weighted(ModItems.dust_tiny, 0, 1, 3, 75), - weighted(ModItems.ink, 0, 1, 1, 1) + weighted(ModItems.ink, 0, 1, 1, 1), + weighted(ModItems.blueprint_folder, 0, 1, 1, 5) }; }}; diff --git a/src/main/java/com/hbm/itempool/ItemPoolsLegacy.java b/src/main/java/com/hbm/itempool/ItemPoolsLegacy.java index 289a495e9..31d43ed4f 100644 --- a/src/main/java/com/hbm/itempool/ItemPoolsLegacy.java +++ b/src/main/java/com/hbm/itempool/ItemPoolsLegacy.java @@ -64,7 +64,8 @@ public class ItemPoolsLegacy { weighted(ModItems.canister_full, Fluids.DIESEL.getID(), 1, 2, 2), weighted(ModItems.canister_full, Fluids.BIOFUEL.getID(), 1, 2, 3), weighted(ModItems.gas_mask_m65, 60, 1, 1, 2), - weighted(ModItems.gas_mask_filter, 0, 1, 1, 3) + weighted(ModItems.gas_mask_filter, 0, 1, 1, 3), + weighted(ModItems.blueprint_folder, 0, 1, 1, 1) }; }}; @@ -132,6 +133,7 @@ public class ItemPoolsLegacy { weighted(ModItems.gas_mask_filter, 0, 1, 1, 4), weighted(ModItems.launch_code_piece, 0, 1, 1, 1), weighted(ModItems.gun_double_barrel, 0, 1, 1, 1), + weighted(ModItems.blueprint_folder, 1, 1, 1, 1) }; }}; diff --git a/src/main/java/com/hbm/itempool/ItemPoolsRedRoom.java b/src/main/java/com/hbm/itempool/ItemPoolsRedRoom.java index 4b1c88353..44393be00 100644 --- a/src/main/java/com/hbm/itempool/ItemPoolsRedRoom.java +++ b/src/main/java/com/hbm/itempool/ItemPoolsRedRoom.java @@ -59,6 +59,7 @@ public class ItemPoolsRedRoom { weighted(ModItems.item_secret, EnumSecretType.SELENIUM_STEEL.ordinal(), 4, 4, 10), weighted(ModItems.item_secret, EnumSecretType.CONTROLLER.ordinal(), 1, 1, 10), weighted(ModItems.item_secret, EnumSecretType.CANISTER.ordinal(), 1, 1, 10), + weighted(ModItems.blueprint_folder, 2, 1, 1, 1), }; }}; } diff --git a/src/main/java/com/hbm/itempool/ItemPoolsSingle.java b/src/main/java/com/hbm/itempool/ItemPoolsSingle.java index 47c0a9c17..f8dd79f0a 100644 --- a/src/main/java/com/hbm/itempool/ItemPoolsSingle.java +++ b/src/main/java/com/hbm/itempool/ItemPoolsSingle.java @@ -124,6 +124,7 @@ public class ItemPoolsSingle { weighted(ModItems.launch_code_piece, 0, 1, 1, 5), weighted(ModItems.egg_glyphid, 0, 1, 1, 5), weighted(ModItems.gem_alexandrite, 0, 1, 1, 1), + weighted(ModItems.blueprint_folder, 1, 1, 1, 1) }; }}; } diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 5724185f5..ca9456f9d 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1186,10 +1186,8 @@ public class ModItems { public static Item settings_tool; public static Item blueprints; + public static Item blueprint_folder; public static Item template_folder; - @Deprecated public static Item journal_pip; - @Deprecated public static Item journal_bj; - @Deprecated public static Item journal_silver; @Deprecated public static Item assembly_template; @Deprecated public static Item chemistry_template; @Deprecated public static Item chemistry_icon; @@ -4103,10 +4101,8 @@ public class ModItems { mech_key = new ItemCustomLore().setUnlocalizedName("mech_key").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":mech_key"); blueprints = new ItemBlueprints().setUnlocalizedName("blueprints").setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":blueprints"); + blueprint_folder = new ItemBlueprintFolder().setUnlocalizedName("blueprint_folder").setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":blueprint_folder"); template_folder = new ItemTemplateFolder().setUnlocalizedName("template_folder").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":template_folder"); - journal_pip = new ItemTemplateFolder().setUnlocalizedName("journal_pip").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":journal_pip"); - journal_bj = new ItemTemplateFolder().setUnlocalizedName("journal_bj").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":journal_bj"); - journal_silver = new ItemTemplateFolder().setUnlocalizedName("journal_silver").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":journal_silver"); assembly_template = new ItemAssemblyTemplate().setUnlocalizedName("assembly_template").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":assembly_template"); chemistry_template = new ItemChemistryTemplate().setUnlocalizedName("chemistry_template").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":chemistry_template"); chemistry_icon = new ItemChemistryIcon().setUnlocalizedName("chemistry_icon").setMaxStackSize(1).setCreativeTab(null); @@ -5754,10 +5750,8 @@ public class ModItems { //Folders GameRegistry.registerItem(blueprints, blueprints.getUnlocalizedName()); + GameRegistry.registerItem(blueprint_folder, blueprint_folder.getUnlocalizedName()); GameRegistry.registerItem(template_folder, template_folder.getUnlocalizedName()); - GameRegistry.registerItem(journal_pip, journal_pip.getUnlocalizedName()); - GameRegistry.registerItem(journal_bj, journal_bj.getUnlocalizedName()); - GameRegistry.registerItem(journal_silver, journal_silver.getUnlocalizedName()); GameRegistry.registerItem(bobmazon, bobmazon.getUnlocalizedName()); GameRegistry.registerItem(bobmazon_hidden, bobmazon_hidden.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/machine/ItemBlueprintFolder.java b/src/main/java/com/hbm/items/machine/ItemBlueprintFolder.java new file mode 100644 index 000000000..a6fe26c04 --- /dev/null +++ b/src/main/java/com/hbm/items/machine/ItemBlueprintFolder.java @@ -0,0 +1,72 @@ +package com.hbm.items.machine; + +import java.util.ArrayList; +import java.util.List; + +import com.hbm.inventory.recipes.loader.GenericRecipes; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +public class ItemBlueprintFolder extends Item { + + @SideOnly(Side.CLIENT) protected IIcon iconDiscover; + @SideOnly(Side.CLIENT) protected IIcon iconSecret; + + public ItemBlueprintFolder() { + this.setHasSubtypes(true); + this.setMaxStackSize(1); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister reg) { + super.registerIcons(reg); + this.iconDiscover = reg.registerIcon(this.getIconString() + "_discover"); + this.iconSecret = reg.registerIcon(this.getIconString() + "_secret"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIconFromDamage(int meta) { + return meta == 1 ? iconDiscover : meta == 2 ? iconSecret : itemIcon; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(Item item, CreativeTabs tab, List list) { + for(int i = 0; i < 2; i++) list.add(new ItemStack(item, 1, i)); + } + + @Override + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { + if(world.isRemote) return stack; + + List pools = new ArrayList(); + + for(String pool : GenericRecipes.blueprintPools.keySet()) { + if(stack.getItemDamage() == 0 && pool.startsWith(GenericRecipes.POOL_PREFIX_ALT)) pools.add(pool); + if(stack.getItemDamage() == 1 && pool.startsWith(GenericRecipes.POOL_PREFIX_DISCOVER)) pools.add(pool); + if(stack.getItemDamage() == 2 && pool.startsWith(GenericRecipes.POOL_PREFIX_SECRET)) pools.add(pool); + } + + if(!pools.isEmpty()) { + stack.stackSize--; + + String chosen = pools.get(player.getRNG().nextInt(pools.size())); + ItemStack blueprint = ItemBlueprints.make(chosen); + + if(!player.inventory.addItemStackToInventory(blueprint)) + player.dropPlayerItemWithRandomChoice(blueprint, false); + } + + return stack; + } +} diff --git a/src/main/java/com/hbm/items/machine/ItemCatalyst.java b/src/main/java/com/hbm/items/machine/ItemCatalyst.java index 99ffe4a11..25dae2545 100644 --- a/src/main/java/com/hbm/items/machine/ItemCatalyst.java +++ b/src/main/java/com/hbm/items/machine/ItemCatalyst.java @@ -37,12 +37,6 @@ public class ItemCatalyst extends Item { @Override public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { - /*list.add("Absolute Energy Bonus: " + powerAbs + "HE"); - list.add("Energy Modifier: " + (powerMod >= 1 ? "+" : "") + (Math.round(powerMod * 1000) * .10 - 100) + "%"); - list.add("Heat Modifier: " + (heatMod >= 1 ? "+" : "") + (Math.round(heatMod * 1000) * .10 - 100) + "%"); - list.add("Fuel Modifier: " + (fuelMod >= 1 ? "+" : "") + (Math.round(fuelMod * 1000) * .10 - 100) + "%");*/ - //TODO: do something useful with this - list.add("Adds spice to the core."); list.add("Look at all those colors!"); } diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index d2262372e..4788a6fd0 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -458,6 +458,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.steel_grate), 4), new Object[] { "SS", "SS", 'S', ModBlocks.steel_beam }); addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.steel_grate_wide), 4), new Object[] { "SS", 'S', ModBlocks.steel_grate }); addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.steel_grate), 1), new Object[] { "SS", 'S', ModBlocks.steel_grate_wide }); + addRecipeAuto(new ItemStack(ModBlocks.rebar, 1), new Object[] { "BB", "BB", 'B', STEEL.bolt() }); addRecipeAuto(new ItemStack(ModBlocks.steel_scaffold, 8, 0), new Object[] { "SSS", "SDS", "SSS", 'S', ModBlocks.steel_scaffold, 'D', "dyeGray" }); addRecipeAuto(new ItemStack(ModBlocks.steel_scaffold, 8, 1), new Object[] { "SSS", "SDS", "SSS", 'S', ModBlocks.steel_scaffold, 'D', "dyeRed" }); diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 8588f66c2..dffae8513 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -1718,6 +1718,9 @@ public class MainRegistry { ignoreMappings.add("hbm:item.component_limiter"); ignoreMappings.add("hbm:item.bottle2_korl_special"); ignoreMappings.add("hbm:item.bottle2_fritz_special"); + ignoreMappings.add("hbm:item.journal_pip"); + ignoreMappings.add("hbm:item.journal_bj"); + ignoreMappings.add("hbm:item.journal_silver"); /// REMAP /// remapItems.put("hbm:item.gadget_explosive8", ModItems.early_explosive_lenses); diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index ea71876e6..ed62ac103 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -3,6 +3,7 @@ package com.hbm.main; import com.hbm.blocks.ILookOverlay; import com.hbm.blocks.ModBlocks; import com.hbm.blocks.generic.BlockAshes; +import com.hbm.blocks.generic.BlockRebar; import com.hbm.config.ClientConfig; import com.hbm.config.GeneralConfig; import com.hbm.entity.mob.EntityHunterChopper; @@ -924,9 +925,9 @@ public class ModEventHandlerClient { ); String prefix = "Gun "; - int gunScale = 16; - int defaultScale = 1; - int slotScale = gunScale; + //int gunScale = 16; + //int defaultScale = 1; + int slotScale = 16; boolean ignoreNonNTM = true; boolean onlyGuns = true; @@ -1138,6 +1139,8 @@ public class ModEventHandlerClient { public void onRenderWorldLastEvent(RenderWorldLastEvent event) { Clock.update(); + + BlockRebar.renderRebar(Minecraft.getMinecraft().theWorld.loadedTileEntityList, event.partialTicks); GL11.glPushMatrix(); diff --git a/src/main/java/com/hbm/render/util/HorsePronter.java b/src/main/java/com/hbm/render/util/HorsePronter.java index bec1e9ef6..117f58db0 100644 --- a/src/main/java/com/hbm/render/util/HorsePronter.java +++ b/src/main/java/com/hbm/render/util/HorsePronter.java @@ -123,7 +123,7 @@ public class HorsePronter { GL11.glTranslated(offset.xCoord, offset.yCoord, offset.zCoord); GL11.glRotated(rotation.xCoord, 0, 1, 0); GL11.glRotated(rotation.yCoord, 1, 0, 0); - GL11.glRotated(rotation.zCoord, 0, 0, 1); //TODO: check pitch and roll axis + GL11.glRotated(rotation.zCoord, 0, 0, 1); GL11.glTranslated(-offset.xCoord, -offset.yCoord, -offset.zCoord); } diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 1337d34c0..3b7676d73 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -14,6 +14,7 @@ import com.hbm.blocks.generic.BlockGlyphidSpawner.TileEntityGlpyhidSpawner; import com.hbm.blocks.generic.BlockLoot.TileEntityLoot; import com.hbm.blocks.generic.BlockPedestal.TileEntityPedestal; import com.hbm.blocks.generic.BlockPlushie.TileEntityPlushie; +import com.hbm.blocks.generic.BlockRebar.TileEntityRebar; import com.hbm.blocks.generic.BlockSkeletonHolder.TileEntitySkeletonHolder; import com.hbm.blocks.generic.BlockSnowglobe.TileEntitySnowglobe; import com.hbm.blocks.generic.BlockSupplyCrate.TileEntitySupplyCrate; @@ -456,6 +457,8 @@ public class TileMappings { put(TileEntityRailSwitch.class, "tileentity_rail_switch"); + put(TileEntityRebar.class, "tileentity_rebar"); + // OC Compat items boolean ocPresent = Loader.isModLoaded("OpenComputers"); diff --git a/src/main/java/com/hbm/uninos/NodeNet.java b/src/main/java/com/hbm/uninos/NodeNet.java index f37446cec..eb4c99233 100644 --- a/src/main/java/com/hbm/uninos/NodeNet.java +++ b/src/main/java/com/hbm/uninos/NodeNet.java @@ -2,7 +2,7 @@ package com.hbm.uninos; import java.util.ArrayList; import java.util.HashMap; -import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.List; import java.util.Random; import java.util.Set; @@ -16,7 +16,7 @@ public abstract class NodeNet { public static Random rand = new Random(); public boolean valid = true; - public Set links = new HashSet(); + public Set links = new LinkedHashSet(); public HashMap receiverEntries = new HashMap(); public HashMap providerEntries = new HashMap(); diff --git a/src/main/java/com/hbm/uninos/networkproviders/PneumaticNetworkProvider.java b/src/main/java/com/hbm/uninos/networkproviders/PneumaticNetworkProvider.java index 330db1821..47d7c108f 100644 --- a/src/main/java/com/hbm/uninos/networkproviders/PneumaticNetworkProvider.java +++ b/src/main/java/com/hbm/uninos/networkproviders/PneumaticNetworkProvider.java @@ -2,7 +2,7 @@ package com.hbm.uninos.networkproviders; import com.hbm.uninos.INetworkProvider; -public class PneumaticNetworkProvider implements INetworkProvider{ +public class PneumaticNetworkProvider implements INetworkProvider { public static PneumaticNetworkProvider THE_PROVIDER = new PneumaticNetworkProvider(); diff --git a/src/main/java/com/hbm/uninos/networkproviders/RebarNetwork.java b/src/main/java/com/hbm/uninos/networkproviders/RebarNetwork.java new file mode 100644 index 000000000..23afb5ad8 --- /dev/null +++ b/src/main/java/com/hbm/uninos/networkproviders/RebarNetwork.java @@ -0,0 +1,9 @@ +package com.hbm.uninos.networkproviders; + +import com.hbm.uninos.NodeNet; + +public class RebarNetwork extends NodeNet { + + @Override + public void update() { } +} diff --git a/src/main/java/com/hbm/uninos/networkproviders/RebarNetworkProvider.java b/src/main/java/com/hbm/uninos/networkproviders/RebarNetworkProvider.java new file mode 100644 index 000000000..df9b22707 --- /dev/null +++ b/src/main/java/com/hbm/uninos/networkproviders/RebarNetworkProvider.java @@ -0,0 +1,13 @@ +package com.hbm.uninos.networkproviders; + +import com.hbm.uninos.INetworkProvider; + +public class RebarNetworkProvider implements INetworkProvider { + + public static RebarNetworkProvider THE_PROVIDER = new RebarNetworkProvider(); + + @Override + public RebarNetwork provideNetwork() { + return new RebarNetwork(); + } +} diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 2cc9428b9..599e12787 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -752,6 +752,7 @@ hbmfluid.coalgas=Kohlebenzin hbmfluid.coalgas_leaded=Bleikohlebenzin hbmfluid.colloid=Kolloid hbmfluid.coaloil=Kohleöl +hbmfluid.concrete=Nassbeton hbmfluid.coolant=Kühlflüssigkeit hbmfluid.coolant_hot=Heiße Kühlflüssigkeit hbmfluid.crackoil=Crack-Öl @@ -1417,6 +1418,7 @@ item.blades_schrabidium.name=Schrabidiumsägeblatt item.blades_steel.name=Stahlsägeblatt item.blades_titanium.name=Titansägeblatt item.blowtorch.name=Lötlampe +item.blueprint_folder.name=Blaupausenbuch item.blueprints.name=Blaupausen item.board_copper.name=Kupfertafel item.boat_rubber.name=Schlauchboot @@ -4029,6 +4031,7 @@ tile.concrete_colored_ext.pink.name=Builder's Choice Concrete - Männliches Pink tile.concrete_colored_ext.purple.name=Builder's Choice Concrete - Mysteriöses Lila tile.concrete_colored_ext.sand.name=Builder's Choice Concrete - Wüstensturm tile.concrete_pillar.name=Stahlbetonsäule +tile.concrete_rebar.name=Stahlbeton tile.concrete_slab.asphalt.name=Asphaltstufe tile.concrete_slab.concrete.name=Betonfliesenstufe tile.concrete_slab.concrete_asbestos.name=Asbestbetonstufe @@ -4752,6 +4755,7 @@ tile.reactor_ejector.name=Reaktor-Brennstoffauswurf tile.reactor_element.name=Reaktorkammer tile.reactor_hatch.name=Kraftwerkszugriffsluke tile.reactor_inserter.name=Reaktor-Brennstoffeinlass +tile.rebar.name=Armierungseisen tile.red_barrel.name=Explosives Fass tile.red_cable.name=Rotes Kupferkabel tile.red_cable_classic.name=Rotes Kupferkabel (Klassisch) diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 53f1112b2..ff4e2e5cc 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -1461,6 +1461,7 @@ hbmfluid.coalgas=Coal Gasoline hbmfluid.coalgas_leaded=Leaded Coal Gasoline hbmfluid.coaloil=Coal Oil hbmfluid.colloid=Colloid +hbmfluid.concrete=Liquid Concrete hbmfluid.coolant=Coolant hbmfluid.coolant_hot=Hot Coolant hbmfluid.crackoil=Cracked Oil @@ -2161,6 +2162,7 @@ item.blades_desh.name=Desh Shredder Blades item.blades_steel.name=Steel Shredder Blades item.blades_titanium.name=Titanium Shredder Blades item.blowtorch.name=Blowtorch +item.blueprint_folder.name=Blueprint Booklet item.blueprints.name=Blueprints item.board_copper.name=Copper Panel item.boat_rubber.name=Rubber Boat @@ -5145,6 +5147,7 @@ tile.concrete_colored_ext.pink.name=Builder's Choice Concrete - Manly Pink tile.concrete_colored_ext.purple.name=Builder's Choice Concrete - Mysterious Purple tile.concrete_colored_ext.sand.name=Builder's Choice Concrete - Desert Storm tile.concrete_pillar.name=Rebar Reinforced Concrete Pillar +tile.concrete_rebar.name=Reinforced Concrete tile.concrete_slab.asphalt.name=Asphalt Slab tile.concrete_slab.concrete.name=Concrete Tile Slab tile.concrete_slab.concrete_asbestos.name=Asbestos Concrete Slab @@ -5903,6 +5906,7 @@ tile.reactor_ejector.name=Reactor Waste Ejector tile.reactor_element.name=Reactor Chamber tile.reactor_hatch.name=Reactor Access Hatch tile.reactor_inserter.name=Reactor Fuel Inserter +tile.rebar.name=Rebar tile.red_barrel.name=Explosive Barrel tile.red_cable.name=Red Copper Cable tile.red_cable_classic.name=Red Copper Cable (Classic) diff --git a/src/main/resources/assets/hbm/textures/blocks/concrete_rebar.png b/src/main/resources/assets/hbm/textures/blocks/concrete_rebar.png new file mode 100644 index 0000000000000000000000000000000000000000..bc2d6579fc7b332ff87fe4cdb73b371b33da0e5b GIT binary patch literal 599 zcmV-d0;v6oP)cZ8Sg!P-?x4UffyrwN{JXF03n11-nNZW3P9^? zt(m5Y&(BX{jA*UtFShURZ;UaNQYfWxo+sXW0E{tB(bv}(!!RI(VB0qOQVPqm@O(b; z-cw59_xG1l3PK1%2-I4UQu6cjL*Mrd!_XA#wZ=6Oab#d)4c zYc1AVlv3^2Wm%}TvTYmtzVr6>_8+;{np!J4XJprPxy#@V+^<34IxAurRCr{o@ts8LLjB2>pIqTQz&{`8h;13bhaMU!~kmdjY002ovPDHLkV1g!h5_$jt literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/concrete_rebar_alt.png b/src/main/resources/assets/hbm/textures/blocks/concrete_rebar_alt.png new file mode 100644 index 0000000000000000000000000000000000000000..c6d616f3ec1f7a930f8585a153f36526c44b6195 GIT binary patch literal 652 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/gui/fluids/concrete.png b/src/main/resources/assets/hbm/textures/gui/fluids/concrete.png new file mode 100644 index 0000000000000000000000000000000000000000..5d76282fe5c8438b922d95686c704a2396eb572e GIT binary patch literal 646 zcmV;10(t$3P)*cR5k zi@XS)Hd=_8IY;N4KVM&8f9H9|drzL{e1CsqjN$qDnd9*Yz%)&4+eQe15CX$6pp>Gj zDt6N}F^(f41gfgy^YfEo7yt+%q~aJO<2d5IM{5nhJkRXLab%h%>bk~zk8_U4xn8eW zYni4AV+iAp_Jl$J|`;xd7h(`;&!{;8z`mH1b}fI z)BW=DLS5Hrtr3xALu<{tuB_{da?T+lbX~_ZO;~F&#*pVZzrVk{zP>U|6W)82Qiw?U zaIH1Udrt^~x3{-csI_LEXRNifZHrQhx~}QEjx5U%5!Q7j%QALVRZ*7Z|6+6xLeic}^TCtu<}iQWOQlFwnLwP167{ z3TcoDeOVS_j2L6?5C1Jo2!TA$IUbM6O4oH< zE|)u%5BcLbvfu9kxZQ3^W?k0_AQ1uJ{r#P)s&LM+^WIaIB_e`zF2(b(BO)|SL*Mr} g=Qy2C06cc+AKE5D8*cmd+5i9m07*qoM6N<$f(yhcMgRZ+ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/assembly_nuke.png b/src/main/resources/assets/hbm/textures/items/assembly_nuke.png index 3243576ba0105458024c50259a8ff68560cfe096..4a6dcc92f19e28b0e740e051498302a3f15442d7 100644 GIT binary patch delta 372 zcmV-)0gL|U0-pnrG=Ek}L_t(IjjdC=Y63wNJtGPUArJy0rr1VIVUte%hF~+F;18r* z{~_#0_yHC|SkfA>k|{&BNZ4X;u@)Cg5o2*vgq_T|D+H1Q12gBGd*?6@;EzyMD}9v>9v`~0Iny4;%qN@FkBQsh98YiTam{A)Q~=bDiGO$6l}yZB;!Y;`4WcNr zXXGU?#s~l;N#YH+sPF(l7>3FwC=4I8#d^I55di>#AOHaLdOa9pWHy_5X=-lQEXx4E z7Q1t1wt9idWFocj@=CHSt2DSMbY@1Y)k44D|4v{&_f{xS#6F(8ST2`Hk_7da{Z8Ex z2{VI;&EK45k*oXCj%k{r(P-ds zI9M)@jIGTQ Stvc=i0000;yBBhjeZMSV3j0*}#DJ|!G!x>|q zibNqYj^l&CGXw>aB-z+XslN&QhV_it-oZIX-}jq@JkR|c>VKlJqYw~6Y&)on!rp{H z*L9et=}@&S%SYvT1^{TS(KHQ%1%rs;aX8`b>NOOZW!4$bkIpvitu4 O00003Zh;@y>_0x62=qOt5_^rq`axFemN++l9pwG?)`+)$OU~>XbEUc+`5|$?Jnl z%V~iVRtM3(gB+$IC_V>X9 zCw@pd>$;@{or&x)H#RgdFt{^csDEL94g literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/blueprint_folder_discover.png b/src/main/resources/assets/hbm/textures/items/blueprint_folder_discover.png new file mode 100644 index 0000000000000000000000000000000000000000..451232e7c18547b4ed45789cb7b10b639e82d885 GIT binary patch literal 301 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfyUv+oBh#1=dy#!J4%a61VaSo*fe)ce!v=I+c>*hykJrums2|bLj{{lk5&bD zD*XRKbnOji`^2R-bSC#D&M4|Ve>8Fb|4p-xNLal!Q|mKkOY%`$ zx7+XIK|M>}EkRQgPE1WGy}=Tfuz_QLI)g!6{N=>QrzG#l`i*ssnSwWVxgcJG&~C^499Wm6DbxYBg-&y)EH wQ#(ZR?tEo>kg+UIV2YXW0o5+9JLjvIcQGe0+TB>u2=p(5r>mdKI;Vst0FUc)%m4rY literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/blueprint_folder_secret.png b/src/main/resources/assets/hbm/textures/items/blueprint_folder_secret.png new file mode 100644 index 0000000000000000000000000000000000000000..d23d7ce41724d7c28b30f70c4ad38149d30cc6b9 GIT binary patch literal 270 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 Date: Wed, 23 Jul 2025 16:34:11 +0200 Subject: [PATCH 8/9] cast yourself a whole house, cast yourself a new mother, cast a vacation straight to fucking hell --- changelog | 4 + .../com/hbm/blocks/generic/BlockRebar.java | 152 ++++++-- .../java/com/hbm/crafting/ToolRecipes.java | 1 + .../ContainerMachineChemicalFactory.java | 9 + .../ContainerMachineChemicalPlant.java | 4 +- .../hbm/inventory/gui/GuiInfoContainer.java | 2 + .../recipes/ChemicalPlantRecipes.java | 6 + .../inventory/recipes/ShredderRecipes.java | 10 +- src/main/java/com/hbm/items/ModItems.java | 6 +- .../com/hbm/items/tool/ItemRebarPlacer.java | 337 ++++++++++++++++++ .../java/com/hbm/main/CraftingManager.java | 2 +- src/main/resources/assets/hbm/lang/de_DE.lang | 2 + src/main/resources/assets/hbm/lang/en_US.lang | 2 + .../assets/hbm/textures/gui/gui_rebar.png | Bin 0 -> 3367 bytes .../hbm/textures/items/rebar_placer.png | Bin 0 -> 513 bytes 15 files changed, 498 insertions(+), 39 deletions(-) create mode 100644 src/main/java/com/hbm/items/tool/ItemRebarPlacer.java create mode 100644 src/main/resources/assets/hbm/textures/gui/gui_rebar.png create mode 100644 src/main/resources/assets/hbm/textures/items/rebar_placer.png diff --git a/changelog b/changelog index 958bb0f23..fa222ff1a 100644 --- a/changelog +++ b/changelog @@ -7,9 +7,13 @@ * Rebar * When hooked up to liquid concrete using pipes, will fill to create reinforced concrete * Fills bottom to top, so connect the pipes to the top +* Rebar placer + * Can be configured with different types of concrete, reinforced or not, or even colored + * Rebar created with the rebar placer will remember its type and assume it when being filled with liquid concrete ## Changed * The alternate recipes for nitric acid and xenon gas in the chemical plant now require blueprints +* The chemical plant now has a recipe for making cobblestone from 25mB of lava (which can be liquefacted into even more lava, useful for cobblestone generation) ## Fixed * Fixed a few assembler recipes using the old crafting numbers which sometimes exceed the stack limit diff --git a/src/main/java/com/hbm/blocks/generic/BlockRebar.java b/src/main/java/com/hbm/blocks/generic/BlockRebar.java index 67b9f13c7..391533e0a 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockRebar.java +++ b/src/main/java/com/hbm/blocks/generic/BlockRebar.java @@ -7,11 +7,16 @@ import org.lwjgl.opengl.GL11; import com.hbm.blocks.ModBlocks; import com.hbm.config.ClientConfig; +import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.items.ModItems; +import com.hbm.items.tool.ItemRebarPlacer; import com.hbm.lib.Library; import com.hbm.lib.RefStrings; +import com.hbm.main.MainRegistry; +import com.hbm.main.ServerProxy; import com.hbm.render.block.ISBRHUniversal; import com.hbm.render.util.RenderBlocksNT; import com.hbm.tileentity.IBufPacketReceiver; @@ -24,6 +29,7 @@ import com.hbm.uninos.networkproviders.RebarNetwork; import com.hbm.uninos.networkproviders.RebarNetworkProvider; import com.hbm.util.BobMathUtil; import com.hbm.util.Compat; +import com.hbm.util.InventoryUtil; import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.DirPos; @@ -41,9 +47,13 @@ import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IIcon; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.MovingObjectPosition.MovingObjectType; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -97,10 +107,18 @@ public class BlockRebar extends BlockContainer implements ISBRHUniversal { public static class TileEntityRebar extends TileEntityLoadedBase implements IFluidReceiverMK2, IBufPacketReceiver { + public Block concrete; + public int concreteMeta; public int progress; public int prevProgress; protected RebarNode node; public boolean hasConnection = false; + + public TileEntityRebar setup(Block b, int m) { + this.concrete = b; + this.concreteMeta = m; + return this; + } @Override public void updateEntity() { @@ -115,7 +133,11 @@ public class BlockRebar extends BlockContainer implements ISBRHUniversal { } if(this.progress >= 1_000) { - worldObj.setBlock(xCoord, yCoord, zCoord, ModBlocks.concrete_rebar); + if(concrete != null && ItemRebarPlacer.isValidConk(Item.getItemFromBlock(concrete), concreteMeta)) { + worldObj.setBlock(xCoord, yCoord, zCoord, concrete, concreteMeta, 3); + } else { + worldObj.setBlock(xCoord, yCoord, zCoord, ModBlocks.concrete_rebar); + } return; } @@ -158,6 +180,11 @@ public class BlockRebar extends BlockContainer implements ISBRHUniversal { super.readFromNBT(nbt); this.progress = nbt.getInteger("progress"); this.hasConnection = nbt.getBoolean("hasConnection"); + + if(nbt.hasKey("block")) { + this.concrete = Block.getBlockById(nbt.getInteger("block")); + this.concreteMeta = nbt.getInteger("meta"); + } } @Override @@ -165,6 +192,11 @@ public class BlockRebar extends BlockContainer implements ISBRHUniversal { super.writeToNBT(nbt); nbt.setInteger("progress", this.progress); nbt.setBoolean("hasConnection", this.hasConnection); + + if(this.concrete != null) { + nbt.setInteger("block", Block.getIdFromBlock(this.concrete)); + nbt.setInteger("meta", this.concreteMeta); + } } public RebarNode createNode() { @@ -341,6 +373,14 @@ public class BlockRebar extends BlockContainer implements ISBRHUniversal { TileEntityRebar rebar = (TileEntityRebar) o; if(rebar.progress > 0) rebars.add(rebar); } + + Minecraft mc = Minecraft.getMinecraft(); + EntityPlayer player = mc.thePlayer; + World world = mc.theWorld; + + double dx = player.prevPosX + (player.posX - player.prevPosX) * interp; + double dy = player.prevPosY + (player.posY - player.prevPosY) * interp; + double dz = player.prevPosZ + (player.posZ - player.prevPosZ) * interp; if(!rebars.isEmpty()) { @@ -348,19 +388,12 @@ public class BlockRebar extends BlockContainer implements ISBRHUniversal { GL11.glShadeModel(GL11.GL_SMOOTH); //RenderHelper.enableStandardItemLighting(); - EntityRenderer entityRenderer = Minecraft.getMinecraft().entityRenderer; + EntityRenderer entityRenderer = mc.entityRenderer; entityRenderer.enableLightmap(interp); - EntityPlayer player = Minecraft.getMinecraft().thePlayer; - World world = Minecraft.getMinecraft().theWorld; - - double dx = player.prevPosX + (player.posX - player.prevPosX) * interp; - double dy = player.prevPosY + (player.posY - player.prevPosY) * interp; - double dz = player.prevPosZ + (player.posZ - player.prevPosZ) * interp; - RenderBlocksNT renderer = RenderBlocksNT.INSTANCE.setWorld(world); renderer.setOverrideBlockTexture(((BlockRebar) ModBlocks.rebar).concrete); - Minecraft.getMinecraft().getTextureManager().bindTexture(TextureMap.locationBlocksTexture); + mc.getTextureManager().bindTexture(TextureMap.locationBlocksTexture); Tessellator tess = Tessellator.instance; tess.startDrawingQuads(); @@ -370,26 +403,6 @@ public class BlockRebar extends BlockContainer implements ISBRHUniversal { tess.setColorRGBA_F(1F, 1F, 1F, 1F); renderer.setRenderBounds(0, 0, 0, 1, rebar.progress / 1000D, 1); renderer.renderStandardBlock(ModBlocks.rebar, rebar.xCoord, rebar.yCoord, rebar.zCoord); - - /*IIcon icon = ((BlockRebar) ModBlocks.rebar).concrete; - double minU = icon.getInterpolatedU(renderer.renderMinX * 16.0D); - double maxU = icon.getInterpolatedU(renderer.renderMaxX * 16.0D); - double minV = icon.getInterpolatedV(renderer.renderMinZ * 16.0D); - double maxV = icon.getInterpolatedV(renderer.renderMaxZ * 16.0D); - - double minX = rebar.xCoord + renderer.renderMinX; - double maxX = rebar.xCoord + renderer.renderMaxX; - double minY = rebar.yCoord + renderer.renderMinY; - double maxY = rebar.yCoord + renderer.renderMaxY; - double minZ = rebar.zCoord + renderer.renderMinZ; - double maxZ = rebar.zCoord + renderer.renderMaxZ; - - //tess.setColorOpaque_F(0.5F, 1F, 1F); - tess.setNormal(0, 1, 0); - tess.addVertexWithUV(maxX, maxY, maxZ, maxU, maxV); - tess.addVertexWithUV(maxX, maxY, minZ, maxU, minV); - tess.addVertexWithUV(minX, maxY, minZ, minU, minV); - tess.addVertexWithUV(minX, maxY, maxZ, minU, maxV);*/ } tess.draw(); @@ -400,5 +413,84 @@ public class BlockRebar extends BlockContainer implements ISBRHUniversal { GL11.glShadeModel(GL11.GL_FLAT); GL11.glPopMatrix(); } + + if(player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.rebar_placer && player.getHeldItem().hasTagCompound() && + player.getHeldItem().stackTagCompound.hasKey("pos") && mc.objectMouseOver != null && mc.objectMouseOver.typeOfHit == MovingObjectType.BLOCK) { + + int[] pos = player.getHeldItem().stackTagCompound.getIntArray("pos"); + MovingObjectPosition mop = mc.objectMouseOver; + ForgeDirection dir = ForgeDirection.getOrientation(mop.sideHit); + int iX = mop.blockX + dir.offsetX; + int iY = mop.blockY + dir.offsetY; + int iZ = mop.blockZ + dir.offsetZ; + + double minX = Math.min(pos[0], iX) + 0.125; + double maxX = Math.max(pos[0], iX) + 0.875; + double minY = Math.min(pos[1], iY) + 0.125; + double maxY = Math.max(pos[1], iY) + 0.875; + double minZ = Math.min(pos[2], iZ) + 0.125; + double maxZ = Math.max(pos[2], iZ) + 0.875; + + GL11.glPushMatrix(); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glColor3f(1F, 1F, 1F); + + Tessellator tess = Tessellator.instance; + tess.setTranslation(-dx, -dy, -dz); + tess.startDrawing(GL11.GL_LINES); + tess.setBrightness(240); + tess.setColorRGBA_F(1F, 1F, 1F, 1F); + + // top + tess.addVertex(minX, maxY, minZ); + tess.addVertex(minX, maxY, maxZ); + + tess.addVertex(minX, maxY, maxZ); + tess.addVertex(maxX, maxY, maxZ); + + tess.addVertex(maxX, maxY, maxZ); + tess.addVertex(maxX, maxY, minZ); + + tess.addVertex(maxX, maxY, minZ); + tess.addVertex(minX, maxY, minZ); + + // bottom + tess.addVertex(minX, minY, minZ); + tess.addVertex(minX, minY, maxZ); + + tess.addVertex(minX, minY, maxZ); + tess.addVertex(maxX, minY, maxZ); + + tess.addVertex(maxX, minY, maxZ); + tess.addVertex(maxX, minY, minZ); + + tess.addVertex(maxX, minY, minZ); + tess.addVertex(minX, minY, minZ); + + // sides + tess.addVertex(minX, minY, minZ); + tess.addVertex(minX, maxY, minZ); + + tess.addVertex(maxX, minY, minZ); + tess.addVertex(maxX, maxY, minZ); + + tess.addVertex(maxX, minY, maxZ); + tess.addVertex(maxX, maxY, maxZ); + + tess.addVertex(minX, minY, maxZ); + tess.addVertex(minX, maxY, maxZ); + + tess.draw(); + tess.setTranslation(0, 0, 0); + + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glPopMatrix(); + + int rebarLeft = InventoryUtil.countAStackMatches(player, new ComparableStack(ModBlocks.rebar), true); + int rebarRequired = (Math.max(pos[0], iX) - Math.min(pos[0], iX) + 1) * (Math.max(pos[1], iY) - Math.min(pos[1], iY) + 1) * (Math.max(pos[2], iZ) - Math.min(pos[2], iZ) + 1); + MainRegistry.proxy.displayTooltip((rebarRequired > rebarLeft ? EnumChatFormatting.RED : EnumChatFormatting.GREEN) + (rebarLeft + " / " + rebarRequired), 1_000, ServerProxy.ID_CABLE); + } } } diff --git a/src/main/java/com/hbm/crafting/ToolRecipes.java b/src/main/java/com/hbm/crafting/ToolRecipes.java index d8d52b0ce..45ad0922c 100644 --- a/src/main/java/com/hbm/crafting/ToolRecipes.java +++ b/src/main/java/com/hbm/crafting/ToolRecipes.java @@ -156,6 +156,7 @@ public class ToolRecipes { CraftingManager.addRecipeAuto(ItemBlowtorch.getEmptyTool(ModItems.blowtorch), new Object[] { "CC ", " I ", "CCC", 'C', CU.plate528(), 'I', IRON.ingot() }); CraftingManager.addRecipeAuto(ItemBlowtorch.getEmptyTool(ModItems.acetylene_torch), new Object[] { "SS ", " PS", " T ", 'S', STEEL.plate528(), 'P', ANY_PLASTIC.ingot(), 'T', ModItems.tank_steel }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.boltgun), new Object[] { "DPS", " RD", " D ", 'D', DURA.ingot(), 'P', DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_PNEUMATIC), 'R', RUBBER.ingot(), 'S', STEEL.shell() }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.rebar_placer), new Object[] { "RDR", "DWD", "RDR", 'R', ModBlocks.rebar, 'D', ModItems.ducttape, 'W', ModItems.wrench }); //Bobmazon CraftingManager.addShapelessAuto(new ItemStack(ModItems.bobmazon), new Object[] { Items.book, Items.gold_nugget, Items.string, KEY_BLUE }); diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineChemicalFactory.java b/src/main/java/com/hbm/inventory/container/ContainerMachineChemicalFactory.java index 484dcfc21..fbdcba7a1 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMachineChemicalFactory.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineChemicalFactory.java @@ -3,6 +3,7 @@ package com.hbm.inventory.container; import com.hbm.inventory.SlotCraftingOutput; import com.hbm.inventory.SlotNonRetarded; import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemBlueprints; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.util.InventoryUtil; @@ -53,6 +54,14 @@ public class ContainerMachineChemicalFactory extends ContainerBase { if(slotOriginal.getItem() instanceof IBatteryItem || slotOriginal.getItem() == ModItems.battery_creative) { if(!this.mergeItemStack(slotStack, 0, 1, false)) return null; + } else if(slotOriginal.getItem() instanceof ItemBlueprints) { + if(!this.mergeItemStack(slotStack, 4, 5, false)) return null; + } else if(slotOriginal.getItem() instanceof ItemBlueprints) { + if(!this.mergeItemStack(slotStack, 11, 12, false)) return null; + } else if(slotOriginal.getItem() instanceof ItemBlueprints) { + if(!this.mergeItemStack(slotStack, 18, 19, false)) return null; + } else if(slotOriginal.getItem() instanceof ItemBlueprints) { + if(!this.mergeItemStack(slotStack, 25, 26, false)) return null; } else if(slotOriginal.getItem() instanceof ItemMachineUpgrade) { if(!this.mergeItemStack(slotStack, 1, 4, false)) return null; } else { diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineChemicalPlant.java b/src/main/java/com/hbm/inventory/container/ContainerMachineChemicalPlant.java index 2c4f4052a..30f50de65 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMachineChemicalPlant.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineChemicalPlant.java @@ -3,7 +3,7 @@ package com.hbm.inventory.container; import com.hbm.inventory.SlotCraftingOutput; import com.hbm.inventory.SlotNonRetarded; import com.hbm.items.ModItems; -import com.hbm.items.machine.ItemChemistryTemplate; +import com.hbm.items.machine.ItemBlueprints; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.util.InventoryUtil; @@ -57,7 +57,7 @@ public class ContainerMachineChemicalPlant extends ContainerBase { if(slotOriginal.getItem() instanceof IBatteryItem || slotOriginal.getItem() == ModItems.battery_creative) { if(!this.mergeItemStack(slotStack, 0, 1, false)) return null; - } else if(slotOriginal.getItem() instanceof ItemChemistryTemplate) { + } else if(slotOriginal.getItem() instanceof ItemBlueprints) { if(!this.mergeItemStack(slotStack, 1, 2, false)) return null; } else if(slotOriginal.getItem() instanceof ItemMachineUpgrade) { if(!this.mergeItemStack(slotStack, 2, 4, false)) return null; diff --git a/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java b/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java index d3f151798..7c57a4dab 100644 --- a/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java +++ b/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java @@ -292,6 +292,8 @@ public abstract class GuiInfoContainer extends GuiContainer implements INEIGuiHa this.drawGradientRect(minX + indent, minY, minX + indent + 16, minY + 16, 0xffb0b0b0, 0xffb0b0b0); } GL11.glEnable(GL11.GL_DEPTH_TEST); + RenderHelper.enableGUIStandardItemLighting(); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); itemRender.renderItemAndEffectIntoGUI(this.fontRendererObj, this.mc.getTextureManager(), stack, minX + indent, minY); itemRender.renderItemOverlayIntoGUI(this.fontRendererObj, this.mc.getTextureManager(), stack, minX + indent, minY, null); RenderHelper.disableStandardItemLighting(); diff --git a/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java index ca0228ca0..f3b759658 100644 --- a/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java @@ -116,6 +116,12 @@ public class ChemicalPlantRecipes extends GenericRecipes { .outputItems(DictFrame.fromOne(ModItems.fuel_additive, EnumFuelAdditive.DEICER))); /// THE CONC AND ASPHALE /// + this.register(new GenericRecipe("chem.cobble").setup(20, 100) + .inputFluids(new FluidStack(Fluids.WATER, 1_000), new FluidStack(Fluids.LAVA, 25)) + .outputItems(new ItemStack(Blocks.cobblestone))); + this.register(new GenericRecipe("chem.stone").setup(60, 500).setPools(GenericRecipes.POOL_PREFIX_DISCOVER) + .inputFluids(new FluidStack(Fluids.WATER, 1_000), new FluidStack(Fluids.LAVA, 25), new FluidStack(Fluids.AIR, 4_000)) + .outputItems(new ItemStack(Blocks.stone))); this.register(new GenericRecipe("chem.concrete").setup(100, 100) .inputItems(new ComparableStack(ModItems.powder_cement, 1), new ComparableStack(Blocks.gravel, 8), new OreDictStack(KEY_SAND, 8)) .inputFluids(new FluidStack(Fluids.WATER, 2_000)) diff --git a/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java b/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java index 908804a5e..af47669a1 100644 --- a/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java @@ -264,12 +264,12 @@ public class ShredderRecipes extends SerializableRecipe { ShredderRecipes.setRecipe(ModItems.crystal_cobalt, new ItemStack(ModItems.powder_cobalt, 3)); /* Misc recycling */ - ShredderRecipes.setRecipe(ModBlocks.steel_poles, new ItemStack(ModItems.powder_steel_tiny, 3)); - ShredderRecipes.setRecipe(ModBlocks.steel_roof, new ItemStack(ModItems.powder_steel_tiny, 13)); - ShredderRecipes.setRecipe(ModBlocks.steel_wall, new ItemStack(ModItems.powder_steel_tiny, 13)); - ShredderRecipes.setRecipe(ModBlocks.steel_corner, new ItemStack(ModItems.powder_steel_tiny, 26)); + ShredderRecipes.setRecipe(ModBlocks.steel_poles, new ItemStack(ModItems.powder_steel_tiny, 2)); + ShredderRecipes.setRecipe(ModBlocks.steel_roof, new ItemStack(ModItems.powder_steel_tiny, 9)); + ShredderRecipes.setRecipe(ModBlocks.steel_wall, new ItemStack(ModItems.powder_steel_tiny, 9)); + ShredderRecipes.setRecipe(ModBlocks.steel_corner, new ItemStack(ModItems.powder_steel_tiny, 18)); ShredderRecipes.setRecipe(ModBlocks.steel_beam, new ItemStack(ModItems.powder_steel_tiny, 3)); - ShredderRecipes.setRecipe(new ItemStack(ModBlocks.steel_scaffold, 1, OreDictionary.WILDCARD_VALUE), new ItemStack(ModItems.powder_steel_tiny, 7)); + ShredderRecipes.setRecipe(new ItemStack(ModBlocks.steel_scaffold, 1, OreDictionary.WILDCARD_VALUE), new ItemStack(ModItems.powder_steel_tiny, 4)); ShredderRecipes.setRecipe(ModItems.coil_copper, new ItemStack(ModItems.powder_red_copper, 1)); ShredderRecipes.setRecipe(ModItems.coil_copper_torus, new ItemStack(ModItems.powder_red_copper, 2)); ShredderRecipes.setRecipe(ModItems.coil_advanced_alloy, new ItemStack(ModItems.powder_advanced_alloy, 1)); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index ca9456f9d..df5e429b2 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -2075,6 +2075,8 @@ public class ModItems { public static Item hazmat_paa_legs; public static Item hazmat_paa_boots; + public static Item rebar_placer; + public static Item wand; public static Item wand_s; public static Item wand_d; @@ -4003,6 +4005,7 @@ public class ModItems { upgrade_stack = new ItemMetaUpgrade(3).setUnlocalizedName("upgrade_stack").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_stack"); upgrade_ejector = new ItemMetaUpgrade(3).setUnlocalizedName("upgrade_ejector").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_ejector"); + rebar_placer = new ItemRebarPlacer().setUnlocalizedName("rebar_placer").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setFull3D().setTextureName(RefStrings.MODID + ":rebar_placer"); wand = new ItemWand().setUnlocalizedName("wand_k").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setFull3D().setTextureName(RefStrings.MODID + ":wand"); wand_s = new ItemWandS().setUnlocalizedName("wand_s").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setFull3D().setTextureName(RefStrings.MODID + ":wand_s"); wand_d = new ItemWandD().setUnlocalizedName("wand_d").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setFull3D().setTextureName(RefStrings.MODID + ":wand_d"); @@ -7047,7 +7050,8 @@ public class ModItems { GameRegistry.registerItem(crystal_horn, crystal_horn.getUnlocalizedName()); GameRegistry.registerItem(crystal_charred, crystal_charred.getUnlocalizedName()); - //OP Tools + //Wands, Tools, Other Crap + GameRegistry.registerItem(rebar_placer, rebar_placer.getUnlocalizedName()); GameRegistry.registerItem(wand, wand.getUnlocalizedName()); GameRegistry.registerItem(wand_s, wand_s.getUnlocalizedName()); GameRegistry.registerItem(wand_d, wand_d.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/tool/ItemRebarPlacer.java b/src/main/java/com/hbm/items/tool/ItemRebarPlacer.java new file mode 100644 index 000000000..86b120769 --- /dev/null +++ b/src/main/java/com/hbm/items/tool/ItemRebarPlacer.java @@ -0,0 +1,337 @@ +package com.hbm.items.tool; + +import java.util.ArrayList; +import java.util.List; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.generic.BlockConcreteColoredExt.EnumConcreteType; +import com.hbm.blocks.generic.BlockRebar.TileEntityRebar; +import com.hbm.inventory.RecipesCommon.ComparableStack; +import com.hbm.inventory.SlotPattern; +import com.hbm.inventory.gui.GuiInfoContainer; +import com.hbm.items.ItemInventory; +import com.hbm.lib.RefStrings; +import com.hbm.main.MainRegistry; +import com.hbm.tileentity.IGUIProvider; +import com.hbm.util.ChatBuilder; +import com.hbm.util.InventoryUtil; +import com.hbm.util.ItemStackUtil; +import com.hbm.util.Tuple.Pair; +import com.hbm.util.i18n.I18nUtil; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class ItemRebarPlacer extends Item implements IGUIProvider { + + public static List> acceptableConk = new ArrayList(); + + public ItemRebarPlacer() { + this.setMaxStackSize(1); + + acceptableConk.add(new Pair(ModBlocks.concrete, 0)); + acceptableConk.add(new Pair(ModBlocks.concrete_rebar, 0)); + acceptableConk.add(new Pair(ModBlocks.concrete_smooth, 0)); + acceptableConk.add(new Pair(ModBlocks.concrete_pillar, 0)); + + for(int i = 0; i < 16; i++) acceptableConk.add(new Pair(ModBlocks.concrete_colored, i)); + for(int i = 0; i < EnumConcreteType.values().length; i++) acceptableConk.add(new Pair(ModBlocks.concrete_colored_ext, i)); + } + + public static boolean isValidConk(Item item, int meta) { + + for(Pair conk : acceptableConk) { + if(item == Item.getItemFromBlock(conk.getKey()) && meta == conk.getValue()) return true; + } + return false; + } + + @Override + public int getMaxItemUseDuration(ItemStack stack) { + return 1; + } + + // if the placer isn't equipped or no concrete is loaded, forget the cached position + @Override + public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean held) { + if(stack.hasTagCompound() && stack.stackTagCompound.hasKey("pos")) { + ItemStack theConk = ItemStackUtil.readStacksFromNBT(stack, 1)[0]; + + if(!held || theConk == null) { + stack.stackTagCompound.removeTag("pos"); + return; + } + + if(!isValidConk(theConk.getItem(), theConk.getItemDamage())) { + stack.stackTagCompound.removeTag("pos"); + return; + } + } + } + + @Override + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { + if(!world.isRemote && player.isSneaking()) player.openGui(MainRegistry.instance, 0, world, 0, 0, 0); + return stack; + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { + + } + + @Override + public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float fx, float fy, float fz) { + if(world.isRemote) return true; + if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound(); + ItemStack theConk = ItemStackUtil.readStacksFromNBT(stack, 1)[0]; + + boolean hasConk = theConk != null && isValidConk(theConk.getItem(), theConk.getItemDamage()); + + if(!hasConk) { + player.addChatMessage(ChatBuilder.start("[").color(EnumChatFormatting.DARK_AQUA) + .nextTranslation(this.getUnlocalizedName() + ".name").color(EnumChatFormatting.DARK_AQUA) + .next("] ").color(EnumChatFormatting.DARK_AQUA) + .next("No valid concrete type set!").color(EnumChatFormatting.RED).flush()); + return true; + } + + ForgeDirection dir = ForgeDirection.getOrientation(side); + + if(!stack.stackTagCompound.hasKey("pos")) { + stack.stackTagCompound.setIntArray("pos", new int[] {x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ}); + } else { + int rebarLeft = InventoryUtil.countAStackMatches(player, new ComparableStack(ModBlocks.rebar), true); + if(rebarLeft <= 0) { + player.addChatMessage(ChatBuilder.start("[").color(EnumChatFormatting.DARK_AQUA) + .nextTranslation(this.getUnlocalizedName() + ".name").color(EnumChatFormatting.DARK_AQUA) + .next("] ").color(EnumChatFormatting.DARK_AQUA) + .next("Out of rebar!").color(EnumChatFormatting.RED).flush()); + stack.stackTagCompound.removeTag("pos"); + return true; + } + + int[] pos = stack.stackTagCompound.getIntArray("pos"); + int iX = x + dir.offsetX; + int iY = y + dir.offsetY; + int iZ = z + dir.offsetZ; + + int minX = Math.min(pos[0], iX); + int maxX = Math.max(pos[0], iX); + int minY = Math.min(pos[1], iY); + int maxY = Math.max(pos[1], iY); + int minZ = Math.min(pos[2], iZ); + int maxZ = Math.max(pos[2], iZ); + + int rebarUsed = 0; + + outer: for(int k = minY; k <= maxY; k++) { + for(int j = minZ; j <= maxZ; j++) { + for(int i = minX; i<= maxX; i++) { + if(rebarLeft <= 0) break outer; + + if(world.getBlock(i, k, j).isReplaceable(world, i, k, j) && player.canPlayerEdit(i, k, j, side, stack)) { + world.setBlock(i, k, j, ModBlocks.rebar); + TileEntity tile = world.getTileEntity(i, k, j); + if(tile instanceof TileEntityRebar) { + ((TileEntityRebar) tile).setup(Block.getBlockFromItem(theConk.getItem()), theConk.getItemDamage()); + } + rebarUsed++; + rebarLeft--; + } + } + } + } + + InventoryUtil.tryConsumeAStack(player.inventory.mainInventory, 0, player.inventory.mainInventory.length - 1, new ComparableStack(ModBlocks.rebar, rebarUsed)); + + player.addChatMessage(ChatBuilder.start("[").color(EnumChatFormatting.DARK_AQUA) + .nextTranslation(this.getUnlocalizedName() + ".name").color(EnumChatFormatting.DARK_AQUA) + .next("] ").color(EnumChatFormatting.DARK_AQUA) + .next("Placed " + rebarUsed + " rebar!").color(EnumChatFormatting.GREEN).flush()); + + stack.stackTagCompound.removeTag("pos"); + player.inventoryContainer.detectAndSendChanges(); + } + + return true; + } + + @Override + public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new ContainerRebar(player.inventory, new InventoryRebar(player, player.getHeldItem())); + } + + @Override + @SideOnly(Side.CLIENT) + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new GUIRebar(player.inventory, new InventoryRebar(player, player.getHeldItem())); + } + + public static class InventoryRebar extends ItemInventory { + + public InventoryRebar(EntityPlayer player, ItemStack box) { + this.player = player; + this.target = box; + slots = new ItemStack[this.getSizeInventory()]; + + if(!box.hasTagCompound()) box.setTagCompound(new NBTTagCompound()); + + ItemStack[] fromNBT = ItemStackUtil.readStacksFromNBT(box, slots.length); + if(fromNBT != null) System.arraycopy(fromNBT, 0, slots, 0, slots.length); + } + + @Override public int getSizeInventory() { return 1; } + @Override public String getInventoryName() { return "container.rebar"; } + @Override public boolean hasCustomInventoryName() { return target.hasDisplayName(); } + @Override public int getInventoryStackLimit() { return 1; } + } + + public static class ContainerRebar extends Container { + + private InventoryRebar rebar; + + public ContainerRebar(InventoryPlayer invPlayer, InventoryRebar rebar) { + this.rebar = rebar; + + this.addSlotToContainer(new SlotPattern(rebar, 0, 53, 36)); + + for(int i = 0; i < 3; i++) { + for(int j = 0; j < 9; j++) { + this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 100 + i * 18)); + } + } + + for(int i = 0; i < 9; i++) { + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 158)); + } + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + return null; + } + + @Override + public ItemStack slotClick(int index, int button, int mode, EntityPlayer player) { + + //L/R: 0 + //M3: 3 + //SHIFT: 1 + //DRAG: 5 + + // prevents the player from moving around the currently open box + if(mode == 2 && button == player.inventory.currentItem) return null; + if(index == player.inventory.currentItem + 47) return null; + + if(index != 0) return super.slotClick(index, button, mode, player); + + Slot slot = this.getSlot(index); + + ItemStack ret = null; + ItemStack held = player.inventory.getItemStack(); + + if(slot.getHasStack()) ret = slot.getStack().copy(); + slot.putStack(held); + rebar.markDirty(); + + return ret; + } + + @Override + public boolean canInteractWith(EntityPlayer player) { + return rebar.isUseableByPlayer(player); + } + + @Override + public void onContainerClosed(EntityPlayer player) { + super.onContainerClosed(player); + } + } + + public static class GUIRebar extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/gui_rebar.png"); + private final InventoryRebar inventory; + + public GUIRebar(InventoryPlayer invPlayer, InventoryRebar box) { + super(new ContainerRebar(invPlayer, box)); + this.inventory = box; + + this.xSize = 176; + this.ySize = 182; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float f) { + super.drawScreen(mouseX, mouseY, f); + + if(this.isMouseOverSlot(this.inventorySlots.getSlot(0), mouseX, mouseY) && !this.inventorySlots.getSlot(0).getHasStack()) { + + List lines = new ArrayList(); + List list = new ArrayList(); + for(Pair conk : acceptableConk) list.add(new ItemStack(conk.getKey(), 1, conk.getValue())); + ItemStack selected = list.get(0); + + if(list.size() > 1) { + int cycle = (int) ((System.currentTimeMillis() % (1000 * list.size())) / 1000); + selected = ((ItemStack) list.get(cycle)).copy(); + selected.stackSize = 0; + list.set(cycle, selected); + } + + if(list.size() < 10) { + lines.add(list.toArray()); + } else if(list.size() < 24) { + lines.add(list.subList(0, list.size() / 2).toArray()); + lines.add(list.subList(list.size() / 2, list.size()).toArray()); + } else { + int bound0 = (int) Math.ceil(list.size() / 3D); + int bound1 = (int) Math.ceil(list.size() / 3D * 2D); + lines.add(list.subList(0, bound0).toArray()); + lines.add(list.subList(bound0, bound1).toArray()); + lines.add(list.subList(bound1, list.size()).toArray()); + } + + lines.add(new Object[] {I18nUtil.resolveKey(selected.getDisplayName())}); + this.drawStackText(lines, mouseX, mouseY, this.fontRendererObj); + } + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = I18n.format(this.inventory.getInventoryName()); + if(inventory.hasCustomInventoryName()) name = inventory.target.getDisplayName(); + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + if(inventory.slots[0] == null || !ItemRebarPlacer.isValidConk(inventory.slots[0].getItem(), inventory.slots[0].getItemDamage())) + drawTexturedModalRect(guiLeft + 87, guiTop + 17, 176, 0, 56, 56); + } + } +} diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 4788a6fd0..d170e553b 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -458,7 +458,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.steel_grate), 4), new Object[] { "SS", "SS", 'S', ModBlocks.steel_beam }); addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.steel_grate_wide), 4), new Object[] { "SS", 'S', ModBlocks.steel_grate }); addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.steel_grate), 1), new Object[] { "SS", 'S', ModBlocks.steel_grate_wide }); - addRecipeAuto(new ItemStack(ModBlocks.rebar, 1), new Object[] { "BB", "BB", 'B', STEEL.bolt() }); + addRecipeAuto(new ItemStack(ModBlocks.rebar, 8), new Object[] { "BB", "BB", 'B', STEEL.bolt() }); addRecipeAuto(new ItemStack(ModBlocks.steel_scaffold, 8, 0), new Object[] { "SSS", "SDS", "SSS", 'S', ModBlocks.steel_scaffold, 'D', "dyeGray" }); addRecipeAuto(new ItemStack(ModBlocks.steel_scaffold, 8, 1), new Object[] { "SSS", "SDS", "SSS", 'S', ModBlocks.steel_scaffold, 'D', "dyeRed" }); diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 599e12787..c3dbefea1 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -449,6 +449,7 @@ container.reactor=Brutreaktor container.reactorControl=Reaktorfernsteuerung container.reactorLarge=Großer Atomreaktor container.reactorSmall=Atomreaktor +container.rebar=Armiereisen-Platzierer container.reix=Rei-X Hauptrechner container.rtg=Radioisotopengenerator container.rtgFurnace=RTG-Ofen @@ -3118,6 +3119,7 @@ item.rbmk_tool.set=RBMK verlinkt! item.reacher.name=Wolfram-Greifzange item.reactor_core.name=Brutreaktorkern item.reactor_sensor.name=Reaktor-Fernsensor +item.rebar_placer.name=Armiereisen-Platzierer item.record.glass.desc=? ? ? item.record.lc.desc=Valve - Diabolic Adrenaline Guitar/Lambda Core item.record.ss.desc=Valve - Sector Sweep diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index ff4e2e5cc..b02964bcc 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -853,6 +853,7 @@ container.reactorBreeding=Breeding Reactor container.reactorControl=Reactor Remote Control Block container.reactorLarge=Big Nuclear Reactor container.reactorResearch=Research Reactor +container.rebar=Rebar Placer container.reix=Rei-X Mainframe container.rtg=RT Generator container.rtgFurnace=RTG Furnace @@ -4073,6 +4074,7 @@ item.rbmk_tool.set=RBMK linked! item.reacher.name=Tungsten Reacher item.reactor_core.name=Breeding Reactor Core item.reactor_sensor.name=Reactor Remote Sensor +item.rebar_placer.name=Rebar Placer item.record.glass.desc=? ? ? item.record.lc.desc=Valve - Diabolic Adrenaline Guitar/Lambda Core item.record.ss.desc=Valve - Sector Sweep diff --git a/src/main/resources/assets/hbm/textures/gui/gui_rebar.png b/src/main/resources/assets/hbm/textures/gui/gui_rebar.png new file mode 100644 index 0000000000000000000000000000000000000000..a3dfeb186d5bad3432726fba276eae6e61191b93 GIT binary patch literal 3367 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 DddB2B literal 0 HcmV?d00001 From 2102db622923fdd2cc76594f33bd71704b1baad9 Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 24 Jul 2025 15:12:54 +0200 Subject: [PATCH 9/9] RBMK autoloader --- changelog | 5 +- src/main/java/com/hbm/blocks/ModBlocks.java | 12 +- .../hbm/blocks/machine/MachineArcFurnace.java | 288 ----- .../blocks/machine/rbmk/RBMKAutoloader.java | 42 + .../container/ContainerMachineArcFurnace.java | 90 -- .../ContainerMachineReactorBreeding.java | 4 +- .../container/ContainerRBMKAutoloader.java | 54 + .../inventory/gui/GUIMachineArcFurnace.java | 64 - .../hbm/inventory/gui/GUIRBMKAutoloader.java | 72 ++ src/main/java/com/hbm/items/ModItems.java | 2 +- .../com/hbm/items/tool/ItemRebarPlacer.java | 5 +- src/main/java/com/hbm/main/ClientProxy.java | 1 + src/main/java/com/hbm/main/MainRegistry.java | 2 + .../java/com/hbm/main/ResourceManager.java | 2 + .../item/weapon/sedna/ItemRenderFlaregun.java | 7 + .../tileentity/RenderRBMKAutoloader.java | 62 + .../hbm/tileentity/TileEntityProxyCombo.java | 4 +- .../java/com/hbm/tileentity/TileMappings.java | 2 +- .../machine/TileEntityDiFurnaceRTG.java | 2 +- .../machine/TileEntityMachineArcFurnace.java | 419 ------- .../TileEntityMachineElectricFurnace.java | 2 +- .../machine/TileEntityRtgFurnace.java | 2 +- .../rbmk/TileEntityRBMKAutoloader.java | 290 +++++ src/main/resources/assets/hbm/lang/de_DE.lang | 2 + src/main/resources/assets/hbm/lang/en_US.lang | 2 + .../assets/hbm/models/rbmk/autoloader.obj | 1029 +++++++++++++++++ .../hbm/textures/blocks/rbmk_autoloader.png | Bin 0 -> 285 bytes .../assets/hbm/textures/gui/gui_arc.png | Bin 3054 -> 0 bytes .../textures/gui/machine/gui_autoloader.png | Bin 0 -> 1736 bytes .../models/machines/rbmk_autoloader.png | Bin 0 -> 1576 bytes 30 files changed, 1586 insertions(+), 880 deletions(-) delete mode 100644 src/main/java/com/hbm/blocks/machine/MachineArcFurnace.java create mode 100644 src/main/java/com/hbm/blocks/machine/rbmk/RBMKAutoloader.java delete mode 100644 src/main/java/com/hbm/inventory/container/ContainerMachineArcFurnace.java create mode 100644 src/main/java/com/hbm/inventory/container/ContainerRBMKAutoloader.java delete mode 100644 src/main/java/com/hbm/inventory/gui/GUIMachineArcFurnace.java create mode 100644 src/main/java/com/hbm/inventory/gui/GUIRBMKAutoloader.java create mode 100644 src/main/java/com/hbm/render/tileentity/RenderRBMKAutoloader.java delete mode 100644 src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java create mode 100644 src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKAutoloader.java create mode 100644 src/main/resources/assets/hbm/models/rbmk/autoloader.obj create mode 100644 src/main/resources/assets/hbm/textures/blocks/rbmk_autoloader.png delete mode 100644 src/main/resources/assets/hbm/textures/gui/gui_arc.png create mode 100644 src/main/resources/assets/hbm/textures/gui/machine/gui_autoloader.png create mode 100644 src/main/resources/assets/hbm/textures/models/machines/rbmk_autoloader.png diff --git a/changelog b/changelog index fa222ff1a..57f21b30a 100644 --- a/changelog +++ b/changelog @@ -14,7 +14,10 @@ ## Changed * The alternate recipes for nitric acid and xenon gas in the chemical plant now require blueprints * The chemical plant now has a recipe for making cobblestone from 25mB of lava (which can be liquefacted into even more lava, useful for cobblestone generation) +* Removed the old arc furnace ## Fixed * Fixed a few assembler recipes using the old crafting numbers which sometimes exceed the stack limit - * As an extra safeguard, the recipe loader now throws an exception if that happens \ No newline at end of file + * As an extra safeguard, the recipe loader now throws an exception if that happens +* Fixed dupe caused by the breeding reactor +* Fixed a potential crash caused by a change done to tile entity proxies in relation to EnergyControl \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 1b7dd0f7d..f9d312fa8 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -750,9 +750,6 @@ public class ModBlocks { public static Block machine_microwave; - public static Block machine_arc_furnace_off; - public static Block machine_arc_furnace_on; - //public static Block machine_deuterium; public static Block machine_battery_potato; @@ -1124,6 +1121,7 @@ public class ModBlocks { public static Block rbmk_heater; public static Block rbmk_console; public static Block rbmk_crane_console; + public static Block rbmk_autoloader; public static Block rbmk_loader; public static Block rbmk_steam_inlet; public static Block rbmk_steam_outlet; @@ -1526,7 +1524,7 @@ public class ModBlocks { floodlight = new Floodlight(Material.iron).setBlockName("floodlight").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); floodlight_beam = new FloodlightBeam().setBlockName("floodlight_beam"); - rebar = new BlockRebar().setBlockName("rebar").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(100.0F).setBlockTextureName(RefStrings.MODID + ":rebar"); + rebar = new BlockRebar().setBlockName("rebar").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(20.0F).setBlockTextureName(RefStrings.MODID + ":rebar"); reinforced_stone = new BlockGeneric(Material.rock).setBlockName("reinforced_stone").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(100.0F).setBlockTextureName(RefStrings.MODID + ":reinforced_stone"); concrete_smooth = new BlockRadResistant(Material.rock).setBlockName("concrete_smooth").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(140.0F).setBlockTextureName(RefStrings.MODID + ":concrete"); concrete_colored = new BlockConcreteColored(Material.rock).setBlockName("concrete_colored").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(140.0F).setBlockTextureName(RefStrings.MODID + ":concrete"); @@ -1877,8 +1875,6 @@ public class ModBlocks { machine_electric_furnace_off = new MachineElectricFurnace(false).setBlockName("machine_electric_furnace_off").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); machine_electric_furnace_on = new MachineElectricFurnace(true).setBlockName("machine_electric_furnace_on").setHardness(5.0F).setLightLevel(1.0F).setResistance(10.0F); - machine_arc_furnace_off = new MachineArcFurnace(false).setBlockName("machine_arc_furnace_off").setHardness(5.0F).setResistance(10.0F); - machine_arc_furnace_on = new MachineArcFurnace(true).setBlockName("machine_arc_furnace_on").setHardness(5.0F).setLightLevel(1.0F).setResistance(10.0F); machine_arc_furnace = new MachineArcFurnaceLarge().setBlockName("machine_arc_furnace").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_microwave = new MachineMicrowave(Material.iron).setBlockName("machine_microwave").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_microwave"); @@ -2173,6 +2169,7 @@ public class ModBlocks { rbmk_heater = new RBMKHeater().setBlockName("rbmk_heater").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_heater"); rbmk_console = new RBMKConsole().setBlockName("rbmk_console").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_console"); rbmk_crane_console = new RBMKCraneConsole().setBlockName("rbmk_crane_console").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_crane_console"); + rbmk_autoloader = new RBMKAutoloader().setBlockName("rbmk_autoloader").setCreativeTab(MainRegistry.machineTab).setHardness(50.0F).setResistance(60.0F).setBlockTextureName(RefStrings.MODID + ":rbmk_autoloader"); rbmk_loader = new RBMKLoader(Material.iron).setBlockName("rbmk_loader").setCreativeTab(MainRegistry.machineTab).setHardness(50.0F).setResistance(60.0F).setBlockTextureName(RefStrings.MODID + ":rbmk_loader"); rbmk_steam_inlet = new RBMKInlet(Material.iron).setBlockName("rbmk_steam_inlet").setCreativeTab(MainRegistry.machineTab).setHardness(50.0F).setResistance(60.0F).setBlockTextureName(RefStrings.MODID + ":rbmk_steam_inlet"); rbmk_steam_outlet = new RBMKOutlet(Material.iron).setBlockName("rbmk_steam_outlet").setCreativeTab(MainRegistry.machineTab).setHardness(50.0F).setResistance(60.0F).setBlockTextureName(RefStrings.MODID + ":rbmk_steam_outlet"); @@ -3188,6 +3185,7 @@ public class ModBlocks { GameRegistry.registerBlock(rbmk_heater, rbmk_heater.getUnlocalizedName()); GameRegistry.registerBlock(rbmk_console, rbmk_console.getUnlocalizedName()); GameRegistry.registerBlock(rbmk_crane_console, rbmk_crane_console.getUnlocalizedName()); + register(rbmk_autoloader); register(rbmk_loader); register(rbmk_steam_inlet); register(rbmk_steam_outlet); @@ -3293,8 +3291,6 @@ public class ModBlocks { GameRegistry.registerBlock(machine_converter_rf_he, machine_converter_rf_he.getUnlocalizedName()); GameRegistry.registerBlock(machine_electric_furnace_off, machine_electric_furnace_off.getUnlocalizedName()); GameRegistry.registerBlock(machine_electric_furnace_on, machine_electric_furnace_on.getUnlocalizedName()); - GameRegistry.registerBlock(machine_arc_furnace_off, machine_arc_furnace_off.getUnlocalizedName()); - GameRegistry.registerBlock(machine_arc_furnace_on, machine_arc_furnace_on.getUnlocalizedName()); GameRegistry.registerBlock(machine_microwave, machine_microwave.getUnlocalizedName()); GameRegistry.registerBlock(machine_assembler, machine_assembler.getUnlocalizedName()); register(machine_assembly_machine); diff --git a/src/main/java/com/hbm/blocks/machine/MachineArcFurnace.java b/src/main/java/com/hbm/blocks/machine/MachineArcFurnace.java deleted file mode 100644 index 7b45594c8..000000000 --- a/src/main/java/com/hbm/blocks/machine/MachineArcFurnace.java +++ /dev/null @@ -1,288 +0,0 @@ -package com.hbm.blocks.machine; - -import java.util.Random; - -import com.hbm.blocks.ModBlocks; -import com.hbm.lib.RefStrings; -import com.hbm.main.MainRegistry; -import com.hbm.tileentity.machine.TileEntityMachineArcFurnace; - -import cpw.mods.fml.common.network.internal.FMLNetworkHandler; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.block.Block; -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.IIcon; -import net.minecraft.util.MathHelper; -import net.minecraft.world.World; - -public class MachineArcFurnace extends BlockContainer { - - private final Random field_149933_a = new Random(); - private final boolean isActive; - private static boolean keepInventory; - - @SideOnly(Side.CLIENT) - private IIcon iconFront; - @SideOnly(Side.CLIENT) - private IIcon iconTop; - @SideOnly(Side.CLIENT) - private IIcon iconBottom; - @SideOnly(Side.CLIENT) - private IIcon iconRods; - - public MachineArcFurnace(boolean blockState) { - super(Material.iron); - isActive = blockState; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister iconRegister) { - this.iconFront = iconRegister.registerIcon(RefStrings.MODID + (this.isActive ? ":machine_arc_furnace_front_on" : ":machine_arc_furnace_front_off")); - this.iconTop = iconRegister.registerIcon(RefStrings.MODID + (this.isActive ? ":machine_arc_furnace_top_on" : ":machine_arc_furnace_top")); - this.iconBottom = iconRegister.registerIcon(RefStrings.MODID + ":machine_arc_furnace_bottom"); - this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":machine_arc_furnace_side"); - this.iconRods = iconRegister.registerIcon(RefStrings.MODID + ":machine_arc_furnace_top_rods"); - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(int side, int metadata) { - - if(this == ModBlocks.machine_arc_furnace_off) { - - if(side == 1 && metadata > 5) { - return iconRods; - } - } - - if(metadata > 5) - metadata -= 4; - - if(side == 0) - return this.iconBottom; - if(side == 1) - return this.iconTop; - - return metadata == 0 && side == 3 ? this.iconFront : (side == metadata ? this.iconFront : this.blockIcon); - } - - @Override - public Item getItemDropped(int p_149650_1_, Random p_149650_2_, int p_149650_3_) - { - return Item.getItemFromBlock(ModBlocks.machine_arc_furnace_off); - } - - @Override - public void onBlockAdded(World world, int x, int y, int z) { - super.onBlockAdded(world, x, y, z); - this.setDefaultDirection(world, x, y, z); - } - - private void setDefaultDirection(World world, int x, int y, int z) { - if(!world.isRemote) - { - Block block1 = world.getBlock(x, y, z - 1); - Block block2 = world.getBlock(x, y, z + 1); - Block block3 = world.getBlock(x - 1, y, z); - Block block4 = world.getBlock(x + 1, y, z); - - byte b0 = 3; - - if(block1.func_149730_j() && !block2.func_149730_j()) - { - b0 = 3; - } - if(block2.func_149730_j() && !block1.func_149730_j()) - { - b0 = 2; - } - if(block3.func_149730_j() && !block4.func_149730_j()) - { - b0 = 5; - } - if(block4.func_149730_j() && !block3.func_149730_j()) - { - b0 = 4; - } - - world.setBlockMetadataWithNotify(x, y, z, b0, 2); - } - } - - @Override - public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack itemStack) { - int i = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; - - if(i == 0) - { - world.setBlockMetadataWithNotify(x, y, z, 2, 2); - } - if(i == 1) - { - world.setBlockMetadataWithNotify(x, y, z, 5, 2); - } - if(i == 2) - { - world.setBlockMetadataWithNotify(x, y, z, 3, 2); - } - if(i == 3) - { - world.setBlockMetadataWithNotify(x, y, z, 4, 2); - } - - if(itemStack.hasDisplayName()) - { - ((TileEntityMachineArcFurnace)world.getTileEntity(x, y, z)).setCustomName(itemStack.getDisplayName()); - } - } - - @Override - public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { - if(world.isRemote) - { - return true; - } else if(!player.isSneaking()) - { - TileEntityMachineArcFurnace entity = (TileEntityMachineArcFurnace) world.getTileEntity(x, y, z); - if(entity != null) - { - FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z); - } - return true; - } else { - return false; - } - } - - @Override - public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) { - return new TileEntityMachineArcFurnace(); - } - - public static void updateBlockState(boolean isProcessing, World world, int x, int y, int z) { - int i = world.getBlockMetadata(x, y, z); - TileEntity entity = world.getTileEntity(x, y, z); - keepInventory = true; - - if(isProcessing) - { - world.setBlock(x, y, z, ModBlocks.machine_arc_furnace_on); - }else{ - world.setBlock(x, y, z, ModBlocks.machine_arc_furnace_off); - } - - keepInventory = false; - world.setBlockMetadataWithNotify(x, y, z, i, 2); - - if(entity != null) { - entity.validate(); - world.setTileEntity(x, y, z, entity); - } - } - - @Override - public void breakBlock(World p_149749_1_, int p_149749_2_, int p_149749_3_, int p_149749_4_, Block p_149749_5_, int p_149749_6_) - { - if (!keepInventory) - { - TileEntityMachineArcFurnace tileentityfurnace = (TileEntityMachineArcFurnace)p_149749_1_.getTileEntity(p_149749_2_, p_149749_3_, p_149749_4_); - - if (tileentityfurnace != null) - { - for (int i1 = 0; i1 < tileentityfurnace.getSizeInventory(); ++i1) - { - ItemStack itemstack = tileentityfurnace.getStackInSlot(i1); - - if (itemstack != null) - { - float f = this.field_149933_a.nextFloat() * 0.8F + 0.1F; - float f1 = this.field_149933_a.nextFloat() * 0.8F + 0.1F; - float f2 = this.field_149933_a.nextFloat() * 0.8F + 0.1F; - - while (itemstack.stackSize > 0) - { - int j1 = this.field_149933_a.nextInt(21) + 10; - - if (j1 > itemstack.stackSize) - { - j1 = itemstack.stackSize; - } - - itemstack.stackSize -= j1; - EntityItem entityitem = new EntityItem(p_149749_1_, p_149749_2_ + f, p_149749_3_ + f1, p_149749_4_ + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage())); - - if (itemstack.hasTagCompound()) - { - entityitem.getEntityItem().setTagCompound((NBTTagCompound)itemstack.getTagCompound().copy()); - } - - float f3 = 0.05F; - entityitem.motionX = (float)this.field_149933_a.nextGaussian() * f3; - entityitem.motionY = (float)this.field_149933_a.nextGaussian() * f3 + 0.2F; - entityitem.motionZ = (float)this.field_149933_a.nextGaussian() * f3; - p_149749_1_.spawnEntityInWorld(entityitem); - } - } - } - - p_149749_1_.func_147453_f(p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_); - } - } - - super.breakBlock(p_149749_1_, p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_, p_149749_6_); - } - - @Override - @SideOnly(Side.CLIENT) - public void randomDisplayTick(World p_149734_1_, int x, int y, int z, Random rand) - { - if (isActive) - { - int l = p_149734_1_.getBlockMetadata(x, y, z); - float f = x + 0.5F; - float f1 = y + 0.0F + rand.nextFloat() * 6.0F / 16.0F; - float f2 = z + 0.5F; - float f3 = 0.52F; - float f4 = rand.nextFloat() * 0.6F - 0.3F; - - if (l == 4) - { - p_149734_1_.spawnParticle("smoke", f - f3, f1, f2 + f4, 0.0D, 0.0D, 0.0D); - p_149734_1_.spawnParticle("flame", f - f3, f1, f2 + f4, 0.0D, 0.0D, 0.0D); - } - else if (l == 5) - { - p_149734_1_.spawnParticle("smoke", f + f3, f1, f2 + f4, 0.0D, 0.0D, 0.0D); - p_149734_1_.spawnParticle("flame", f + f3, f1, f2 + f4, 0.0D, 0.0D, 0.0D); - } - else if (l == 2) - { - p_149734_1_.spawnParticle("smoke", f + f4, f1, f2 - f3, 0.0D, 0.0D, 0.0D); - p_149734_1_.spawnParticle("flame", f + f4, f1, f2 - f3, 0.0D, 0.0D, 0.0D); - } - else if (l == 3) - { - p_149734_1_.spawnParticle("smoke", f + f4, f1, f2 + f3, 0.0D, 0.0D, 0.0D); - p_149734_1_.spawnParticle("flame", f + f4, f1, f2 + f3, 0.0D, 0.0D, 0.0D); - } - } - } - - @Override - @SideOnly(Side.CLIENT) - public Item getItem(World p_149694_1_, int p_149694_2_, int p_149694_3_, int p_149694_4_) - { - return Item.getItemFromBlock(ModBlocks.machine_arc_furnace_off); - } -} diff --git a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKAutoloader.java b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKAutoloader.java new file mode 100644 index 000000000..9eb8f58dc --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKAutoloader.java @@ -0,0 +1,42 @@ +package com.hbm.blocks.machine.rbmk; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.tileentity.TileEntityProxyCombo; +import com.hbm.tileentity.machine.rbmk.TileEntityRBMKAutoloader; + +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; + +public class RBMKAutoloader extends BlockDummyable { + + public RBMKAutoloader() { + super(Material.iron); + + this.bounding.add(AxisAlignedBB.getBoundingBox(-0.125, 0, -0.125, 0.125, 4, 0.125)); + this.bounding.add(AxisAlignedBB.getBoundingBox(-0.5, 4, -0.5, 0.5, 9, 0.5)); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + if(meta >= 12) return new TileEntityRBMKAutoloader(); + return new TileEntityProxyCombo().inventory(); + } + + @Override + public int[] getDimensions() { + return new int[] {8, 0, 0, 0, 0, 0}; + } + + @Override + public int getOffset() { + return 0; + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + return this.standardOpenBehavior(world, x, y, z, player, 0); + } +} diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineArcFurnace.java b/src/main/java/com/hbm/inventory/container/ContainerMachineArcFurnace.java deleted file mode 100644 index c3dd0c537..000000000 --- a/src/main/java/com/hbm/inventory/container/ContainerMachineArcFurnace.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.hbm.inventory.container; - -import com.hbm.inventory.SlotSmelting; -import com.hbm.items.ModItems; -import com.hbm.tileentity.machine.TileEntityMachineArcFurnace; - -import api.hbm.energymk2.IBatteryItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.ICrafting; -import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; - -public class ContainerMachineArcFurnace extends Container { - - private TileEntityMachineArcFurnace diFurnace; - - public ContainerMachineArcFurnace(InventoryPlayer invPlayer, TileEntityMachineArcFurnace tedf) { - - diFurnace = tedf; - - this.addSlotToContainer(new Slot(tedf, 0, 56, 17)); - this.addSlotToContainer(new SlotSmelting(invPlayer.player, tedf, 1, 116, 35)); - this.addSlotToContainer(new Slot(tedf, 2, 38, 53)); - this.addSlotToContainer(new Slot(tedf, 3, 56, 53)); - this.addSlotToContainer(new Slot(tedf, 4, 74, 53)); - this.addSlotToContainer(new Slot(tedf, 5, 8, 53)); - - for(int i = 0; i < 3; i++) { - for(int j = 0; j < 9; j++) { - this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); - } - } - - for(int i = 0; i < 9; i++) { - this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142)); - } - } - - @Override - public void addCraftingToCrafters(ICrafting crafting) { - super.addCraftingToCrafters(crafting); - } - - @Override - public ItemStack transferStackInSlot(EntityPlayer player, int index) { - ItemStack rStack = null; - Slot slot = (Slot) this.inventorySlots.get(index); - - if(slot != null && slot.getHasStack()) { - ItemStack stack = slot.getStack(); - rStack = stack.copy(); - - if(index <= 5) { - if(!this.mergeItemStack(stack, 6, this.inventorySlots.size(), true)) { - return null; - } - - slot.onSlotChange(stack, rStack); - - } else { - - if(rStack.getItem() instanceof IBatteryItem || rStack.getItem() == ModItems.battery_creative) { - if(!this.mergeItemStack(stack, 5, 6, false)) - return null; - - } else if(rStack.getItem() == ModItems.arc_electrode) { - if(!this.mergeItemStack(stack, 2, 5, false)) - return null; - - } else if(!this.mergeItemStack(stack, 0, 1, false)) - return null; - } - - if(stack.stackSize == 0) { - slot.putStack((ItemStack) null); - } else { - slot.onSlotChanged(); - } - } - - return rStack; - } - - @Override - public boolean canInteractWith(EntityPlayer player) { - return diFurnace.isUseableByPlayer(player); - } -} diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineReactorBreeding.java b/src/main/java/com/hbm/inventory/container/ContainerMachineReactorBreeding.java index 331b69d1d..cab45d330 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMachineReactorBreeding.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineReactorBreeding.java @@ -43,8 +43,8 @@ public class ContainerMachineReactorBreeding extends Container { ItemStack stack = slot.getStack(); var3 = stack.copy(); - if(index <= 1) { - if(!this.mergeItemStack(stack, 1, this.inventorySlots.size(), true)) { + if(index <= 2) { + if(!this.mergeItemStack(stack, 2, this.inventorySlots.size(), true)) { return null; } diff --git a/src/main/java/com/hbm/inventory/container/ContainerRBMKAutoloader.java b/src/main/java/com/hbm/inventory/container/ContainerRBMKAutoloader.java new file mode 100644 index 000000000..de34fab6b --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerRBMKAutoloader.java @@ -0,0 +1,54 @@ +package com.hbm.inventory.container; + +import com.hbm.tileentity.machine.rbmk.TileEntityRBMKAutoloader; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerRBMKAutoloader extends ContainerBase { + + public TileEntityRBMKAutoloader loader; + + public ContainerRBMKAutoloader(InventoryPlayer invPlayer, TileEntityRBMKAutoloader tedf) { + super(invPlayer, tedf); + loader = tedf; + + this.addSlots(loader, 0, 17, 18, 3, 3); + this.addTakeOnlySlots(loader, 9, 107, 18, 3, 3); + this.playerInv(invPlayer, 8, 100); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack rStack = null; + Slot slot = (Slot) this.inventorySlots.get(index); + + if(slot != null && slot.getHasStack()) { + ItemStack stack = slot.getStack(); + rStack = stack.copy(); + + if(index <= 17) { + if(!this.mergeItemStack(stack, 18, this.inventorySlots.size(), true)) { + return null; + } + } else { + if(!this.mergeItemStack(stack, 0, 9, false)) return null; + } + + if(stack.stackSize == 0) { + slot.putStack((ItemStack) null); + } else { + slot.onSlotChanged(); + } + } + + return rStack; + } + + @Override + public boolean canInteractWith(EntityPlayer player) { + return loader.isUseableByPlayer(player); + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineArcFurnace.java b/src/main/java/com/hbm/inventory/gui/GUIMachineArcFurnace.java deleted file mode 100644 index 5f6e04fdf..000000000 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineArcFurnace.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.hbm.inventory.gui; - -import org.lwjgl.opengl.GL11; - -import com.hbm.inventory.container.ContainerMachineArcFurnace; -import com.hbm.lib.RefStrings; -import com.hbm.tileentity.machine.TileEntityMachineArcFurnace; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.resources.I18n; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.util.ResourceLocation; - -public class GUIMachineArcFurnace extends GuiInfoContainer { - - private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/gui_arc.png"); - private TileEntityMachineArcFurnace diFurnace; - - public GUIMachineArcFurnace(InventoryPlayer invPlayer, TileEntityMachineArcFurnace tedf) { - super(new ContainerMachineArcFurnace(invPlayer, tedf)); - diFurnace = tedf; - - this.xSize = 176; - this.ySize = 166; - } - - @Override - public void drawScreen(int mouseX, int mouseY, float f) { - super.drawScreen(mouseX, mouseY, f); - - this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 51 - 34, 16, 34, diFurnace.power, diFurnace.maxPower); - } - - @Override - protected void drawGuiContainerForegroundLayer(int i, int j) { - String name = this.diFurnace.hasCustomInventoryName() ? this.diFurnace.getInventoryName() : I18n.format(this.diFurnace.getInventoryName()); - - this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); - this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); - } - - @Override - protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - Minecraft.getMinecraft().getTextureManager().bindTexture(texture); - drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); - - if(diFurnace.isInvalid() && diFurnace.getWorldObj().getTileEntity(diFurnace.xCoord, diFurnace.yCoord, diFurnace.zCoord) instanceof TileEntityMachineArcFurnace) - diFurnace = (TileEntityMachineArcFurnace) diFurnace.getWorldObj().getTileEntity(diFurnace.xCoord, diFurnace.yCoord, diFurnace.zCoord); - - if(diFurnace.hasPower()) { - int i = (int)diFurnace.getPowerRemainingScaled(34); - drawTexturedModalRect(guiLeft + 8, guiTop + 51 - i, 176, 67 - i, 16, i); - } - - if(diFurnace.canProcess() && diFurnace.hasPower()) - { - drawTexturedModalRect(guiLeft + 55, guiTop + 35, 176, 0, 15, 16); - } - - int j1 = diFurnace.getDiFurnaceProgressScaled(24); - drawTexturedModalRect(guiLeft + 79, guiTop + 34, 176, 16, j1 + 1, 17); - } -} diff --git a/src/main/java/com/hbm/inventory/gui/GUIRBMKAutoloader.java b/src/main/java/com/hbm/inventory/gui/GUIRBMKAutoloader.java new file mode 100644 index 000000000..2805437f6 --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIRBMKAutoloader.java @@ -0,0 +1,72 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerRBMKAutoloader; +import com.hbm.lib.RefStrings; +import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; +import com.hbm.tileentity.machine.rbmk.TileEntityRBMKAutoloader; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ResourceLocation; + +public class GUIRBMKAutoloader extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/machine/gui_autoloader.png"); + private TileEntityRBMKAutoloader loader; + + public GUIRBMKAutoloader(InventoryPlayer invPlayer, TileEntityRBMKAutoloader tile) { + super(new ContainerRBMKAutoloader(invPlayer, tile)); + loader = tile; + + this.xSize = 176; + this.ySize = 182; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float f) { + super.drawScreen(mouseX, mouseY, f); + } + + @Override + protected void mouseClicked(int x, int y, int i) { + super.mouseClicked(x, y, i); + + if(guiLeft + 74 <= x && guiLeft + 74 + 12 > x && guiTop + 36 < y && guiTop + 36 + 12 >= y) { + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); + NBTTagCompound data = new NBTTagCompound(); + data.setBoolean("minus", true); + PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, loader.xCoord, loader.yCoord, loader.zCoord)); + } + + if(guiLeft + 90 <= x && guiLeft + 90 + 12 > x && guiTop + 36 < y && guiTop + 36 + 12 >= y) { + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); + NBTTagCompound data = new NBTTagCompound(); + data.setBoolean("plus", true); + PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, loader.xCoord, loader.yCoord, loader.zCoord)); + } + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.loader.hasCustomInventoryName() ? this.loader.getInventoryName() : I18n.format(this.loader.getInventoryName()); + + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 0xFFFFFF); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + + String percent = loader.cycle + "%"; + this.fontRendererObj.drawString(percent, this.xSize / 2 - this.fontRendererObj.getStringWidth(percent) / 2, 23, 0x00FF00); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + } +} diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index df5e429b2..b8bbdbde8 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -4005,7 +4005,7 @@ public class ModItems { upgrade_stack = new ItemMetaUpgrade(3).setUnlocalizedName("upgrade_stack").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_stack"); upgrade_ejector = new ItemMetaUpgrade(3).setUnlocalizedName("upgrade_ejector").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":upgrade_ejector"); - rebar_placer = new ItemRebarPlacer().setUnlocalizedName("rebar_placer").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setFull3D().setTextureName(RefStrings.MODID + ":rebar_placer"); + rebar_placer = new ItemRebarPlacer().setUnlocalizedName("rebar_placer").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":rebar_placer"); wand = new ItemWand().setUnlocalizedName("wand_k").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setFull3D().setTextureName(RefStrings.MODID + ":wand"); wand_s = new ItemWandS().setUnlocalizedName("wand_s").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setFull3D().setTextureName(RefStrings.MODID + ":wand_s"); wand_d = new ItemWandD().setUnlocalizedName("wand_d").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setFull3D().setTextureName(RefStrings.MODID + ":wand_d"); diff --git a/src/main/java/com/hbm/items/tool/ItemRebarPlacer.java b/src/main/java/com/hbm/items/tool/ItemRebarPlacer.java index 86b120769..d6d5715cd 100644 --- a/src/main/java/com/hbm/items/tool/ItemRebarPlacer.java +++ b/src/main/java/com/hbm/items/tool/ItemRebarPlacer.java @@ -101,7 +101,10 @@ public class ItemRebarPlacer extends Item implements IGUIProvider { @Override public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float fx, float fy, float fz) { if(world.isRemote) return true; - if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound(); + if(!stack.hasTagCompound()) { + stack.stackTagCompound = new NBTTagCompound(); + ItemStackUtil.addStacksToNBT(stack, new ItemStack[] {new ItemStack(ModBlocks.concrete_rebar)}); + } ItemStack theConk = ItemStackUtil.readStacksFromNBT(stack, 1)[0]; boolean hasConk = theConk != null && isValidConk(theConk.getItem(), theConk.getItemDamage()); diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 1d934e87d..1661a221b 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -416,6 +416,7 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKCooler.class, new RenderRBMKLid()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKStorage.class, new RenderRBMKLid()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKHeater.class, new RenderRBMKLid()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKAutoloader.class, new RenderRBMKAutoloader()); //ITER ClientRegistry.bindTileEntitySpecialRenderer(TileEntityITER.class, new RenderITER()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachinePlasmaHeater.class, new RenderPlasmaHeater()); diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index dffae8513..b1818f018 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -1721,6 +1721,8 @@ public class MainRegistry { ignoreMappings.add("hbm:item.journal_pip"); ignoreMappings.add("hbm:item.journal_bj"); ignoreMappings.add("hbm:item.journal_silver"); + ignoreMappings.add("hbm:tile.machine_arc_furnace_off"); + ignoreMappings.add("hbm:tile.machine_arc_furnace_on"); /// REMAP /// remapItems.put("hbm:item.gadget_explosive8", ModItems.early_explosive_lenses); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index a1fee2c2c..fb125b628 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -1565,10 +1565,12 @@ public class ResourceManager { public static final IModelCustom rbmk_rods_vbo = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/rbmk/rbmk_rods.obj")).asVBO(); public static final IModelCustom rbmk_crane_console = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/rbmk/crane_console.obj")).asVBO(); public static final IModelCustom rbmk_crane = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/rbmk/crane.obj")).asVBO(); + public static final IModelCustom rbmk_autoloader = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/rbmk/autoloader.obj")).asVBO(); public static final IModelCustom rbmk_console = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/rbmk/rbmk_console.obj")).asVBO(); public static final IModelCustom rbmk_debris = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/rbmk/debris.obj")); public static final ResourceLocation rbmk_crane_console_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/crane_console.png"); public static final ResourceLocation rbmk_crane_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/rbmk_crane.png"); + public static final ResourceLocation rbmk_autoloader_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/rbmk_autoloader.png"); public static final ResourceLocation rbmk_console_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/rbmk_control.png"); public static final IModelCustom hev_battery = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/battery.obj")); public static final IModelCustom anvil = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/anvil.obj")); diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderFlaregun.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderFlaregun.java index 3bcabc96b..d21439d5d 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderFlaregun.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderFlaregun.java @@ -112,6 +112,13 @@ public class ItemRenderFlaregun extends ItemRenderWeaponBase { GL11.glRotated(90, 0, 1, 0); } + @Override + public void setupEntity(ItemStack stack) { + super.setupEntity(stack); + double scale = 0.5D; + GL11.glScaled(scale, scale, scale); + } + @Override public void renderOther(ItemStack stack, ItemRenderType type) { GL11.glEnable(GL11.GL_LIGHTING); diff --git a/src/main/java/com/hbm/render/tileentity/RenderRBMKAutoloader.java b/src/main/java/com/hbm/render/tileentity/RenderRBMKAutoloader.java new file mode 100644 index 000000000..3018364a9 --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderRBMKAutoloader.java @@ -0,0 +1,62 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.ModBlocks; +import com.hbm.main.ResourceManager; +import com.hbm.render.item.ItemRenderBase; +import com.hbm.tileentity.machine.rbmk.TileEntityRBMKAutoloader; + +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.Item; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.client.IItemRenderer; + +public class RenderRBMKAutoloader extends TileEntitySpecialRenderer implements IItemRendererProvider { + + @Override + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5D, y, z + 0.5D); + GL11.glEnable(GL11.GL_CULL_FACE); + + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.rbmk_autoloader_tex); + ResourceManager.rbmk_autoloader.renderPart("Base"); + + TileEntityRBMKAutoloader press = (TileEntityRBMKAutoloader) tile; + double p = (press.lastPiston + (press.renderPiston - press.lastPiston) * interp); + GL11.glTranslated(0, p * -4D, 0); + + GL11.glTranslated(0, 4, 0); + ResourceManager.rbmk_autoloader.renderPart("Piston"); + GL11.glShadeModel(GL11.GL_FLAT); + + GL11.glPopMatrix(); + } + + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.rbmk_autoloader); + } + + @Override + public IItemRenderer getRenderer() { + return new ItemRenderBase( ) { + public void renderInventory() { + GL11.glTranslated(0, -6, 0); + GL11.glScaled(1.75, 1.75, 1.75); + } + public void renderCommon() { + GL11.glRotated(180, 0, 1, 0); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.rbmk_autoloader_tex); + ResourceManager.rbmk_autoloader.renderPart("Base"); + ResourceManager.rbmk_autoloader.renderPart("Piston"); + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glEnable(GL11.GL_CULL_FACE); + }}; + } + +} diff --git a/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java b/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java index c38e5f51e..fb80aa785 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java +++ b/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java @@ -75,8 +75,8 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy return this; } - /** Returns the actual tile entity that represents the core. Only for internal use. */ - protected TileEntity getTile() { + /** Returns the actual tile entity that represents the core. Only for internal use, and EnergyControl. */ + public TileEntity getTile() { if(tile == null || tile.isInvalid()) { tile = this.getTE(); } diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 3b7676d73..7a8f9ead4 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -149,7 +149,6 @@ public class TileMappings { put(TileEntityCoreInjector.class, "tileentity_v0_injector"); put(TileEntityCoreStabilizer.class, "tileentity_v0_stabilizer"); put(TileEntityCore.class, "tileentity_v0"); - put(TileEntityMachineArcFurnace.class, "tileentity_arc_furnace"); put(TileEntityMachineAmgen.class, "tileentity_amgen"); put(TileEntityMachineHephaestus.class, "tileentity_hephaestus"); put(TileEntityGeysir.class, "tileentity_geysir"); @@ -403,6 +402,7 @@ public class TileMappings { put(TileEntityRBMKConsole.class, "tileentity_rbmk_console"); put(TileEntityRBMKInlet.class, "tileentity_rbmk_inlet"); put(TileEntityRBMKOutlet.class, "tileentity_rbmk_outlet"); + put(TileEntityRBMKAutoloader.class, "tileentity_rbmk_autoloader"); } private static void putNetwork() { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnaceRTG.java b/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnaceRTG.java index 5776fa53a..2c4999f23 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnaceRTG.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnaceRTG.java @@ -105,7 +105,7 @@ public class TileEntityDiFurnaceRTG extends TileEntityMachineBase implements IGU for(int i = 0; i < 2; i++) { if(slots[i].stackSize <= 0) - slots[i] = new ItemStack(slots[i].getItem().setFull3D()); + slots[i] = new ItemStack(slots[i].getItem()); else slots[i].stackSize--; if(slots[i].stackSize <= 0) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java deleted file mode 100644 index 7c6df467c..000000000 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java +++ /dev/null @@ -1,419 +0,0 @@ -package com.hbm.tileentity.machine; - -import com.hbm.blocks.ModBlocks; -import com.hbm.blocks.machine.MachineArcFurnace; -import com.hbm.inventory.container.ContainerMachineArcFurnace; -import com.hbm.inventory.gui.GUIMachineArcFurnace; -import com.hbm.items.ModItems; -import com.hbm.lib.Library; -import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.TileEntityLoadedBase; -import com.hbm.util.CompatEnergyControl; - -import api.hbm.energymk2.IEnergyReceiverMK2; -import api.hbm.tile.IInfoProviderEC; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import io.netty.buffer.ByteBuf; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.ISidedInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.FurnaceRecipes; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -public class TileEntityMachineArcFurnace extends TileEntityLoadedBase implements ISidedInventory, IEnergyReceiverMK2, IGUIProvider, IInfoProviderEC { - - private ItemStack slots[]; - - public int dualCookTime; - public long power; - public static final long maxPower = 50000; - public static final int processingSpeed = 20; - - //0: i - //1: o - //2: 1 - //3: 2 - //4: 3 - //5: b - private static final int[] slots_io = new int[] {0, 1, 2, 3, 4, 5}; - - private String customName; - - public TileEntityMachineArcFurnace() { - slots = new ItemStack[6]; - } - - @Override - public int getSizeInventory() { - return slots.length; - } - - @Override - public ItemStack getStackInSlot(int i) { - return slots[i]; - } - - @Override - public ItemStack getStackInSlotOnClosing(int i) { - if(slots[i] != null) - { - ItemStack itemStack = slots[i]; - slots[i] = null; - return itemStack; - } else { - return null; - } - } - - @Override - public void setInventorySlotContents(int i, ItemStack itemStack) { - slots[i] = itemStack; - if(itemStack != null && itemStack.stackSize > getInventoryStackLimit()) - { - itemStack.stackSize = getInventoryStackLimit(); - } - } - - @Override - public String getInventoryName() { - return this.hasCustomInventoryName() ? this.customName : "container.arcFurnace"; - } - - @Override - public boolean hasCustomInventoryName() { - return this.customName != null && this.customName.length() > 0; - } - - public void setCustomName(String name) { - this.customName = name; - markDirty(); - } - - @Override - public int getInventoryStackLimit() { - return 64; - } - - @Override - public boolean isUseableByPlayer(EntityPlayer player) { - if(worldObj.getTileEntity(xCoord, yCoord, zCoord) != this) - { - return false; - }else{ - return player.getDistanceSq(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) <=64; - } - } - - //You scrubs aren't needed for anything (right now) - @Override - public void openInventory() {} - @Override - public void closeInventory() {} - - @Override - public boolean isItemValidForSlot(int i, ItemStack itemStack) { - - if(i == 2 || i == 3 || i == 4) - return itemStack.getItem() == ModItems.arc_electrode; - - if(i == 0) - return FurnaceRecipes.smelting().getSmeltingResult(itemStack) != null; - - return false; - } - - @Override - public ItemStack decrStackSize(int i, int j) { - if(slots[i] != null) - { - if(slots[i].stackSize <= j) - { - ItemStack itemStack = slots[i]; - slots[i] = null; - return itemStack; - } - ItemStack itemStack1 = slots[i].splitStack(j); - if (slots[i].stackSize == 0) - { - slots[i] = null; - } - - return itemStack1; - } else { - return null; - } - } - - @Override - public void readFromNBT(NBTTagCompound nbt) { - super.readFromNBT(nbt); - NBTTagList list = nbt.getTagList("items", 10); - - this.power = nbt.getLong("powerTime"); - this.dualCookTime = nbt.getInteger("cookTime"); - slots = new ItemStack[getSizeInventory()]; - - for(int i = 0; i < list.tagCount(); i++) - { - NBTTagCompound nbt1 = list.getCompoundTagAt(i); - byte b0 = nbt1.getByte("slot"); - if(b0 >= 0 && b0 < slots.length) - { - slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); - } - } - - customName = nbt.getString("name"); - } - - @Override - public void writeToNBT(NBTTagCompound nbt) { - super.writeToNBT(nbt); - nbt.setLong("powerTime", power); - nbt.setInteger("cookTime", dualCookTime); - NBTTagList list = new NBTTagList(); - - for(int i = 0; i < slots.length; i++) - { - if(slots[i] != null) - { - NBTTagCompound nbt1 = new NBTTagCompound(); - nbt1.setByte("slot", (byte)i); - slots[i].writeToNBT(nbt1); - list.appendTag(nbt1); - } - } - nbt.setTag("items", list); - - if (customName != null) { - nbt.setString("name", customName); - } - } - - @Override - public int[] getAccessibleSlotsFromSide(int side) { - return slots_io; - } - - @Override - public boolean canInsertItem(int i, ItemStack itemStack, int j) { - return this.isItemValidForSlot(i, itemStack); - } - - @Override - public boolean canExtractItem(int i, ItemStack itemStack, int j) { - - if(i == 1) - return true; - - if(i == 2 || i == 3 || i == 4) - return itemStack.getItem() == ModItems.arc_electrode_burnt; - - return false; - } - - public int getDiFurnaceProgressScaled(int i) { - return (dualCookTime * i) / processingSpeed; - } - - public long getPowerRemainingScaled(long i) { - return (power * i) / maxPower; - } - - public boolean hasPower() { - return power >= 250; - } - - public boolean isProcessing() { - return this.dualCookTime > 0; - } - - private boolean hasElectrodes() { - - if(slots[2] != null && slots[3] != null && slots[4] != null) { - if((slots[2].getItem() == ModItems.arc_electrode) && - (slots[3].getItem() == ModItems.arc_electrode) && - (slots[4].getItem() == ModItems.arc_electrode)) - return true; - } - - return false; - } - - public boolean canProcess() { - - if(!hasElectrodes()) - return false; - - if(slots[0] == null) - { - return false; - } - ItemStack itemStack = FurnaceRecipes.smelting().getSmeltingResult(this.slots[0]); - - if(itemStack == null) - { - return false; - } - - if(slots[1] == null) - { - return true; - } - - if(!slots[1].isItemEqual(itemStack)) { - return false; - } - - if(slots[1].stackSize < getInventoryStackLimit() && slots[1].stackSize < slots[1].getMaxStackSize()) { - return true; - }else{ - return slots[1].stackSize < itemStack.getMaxStackSize(); - } - } - - private void processItem() { - if(canProcess()) { - ItemStack itemStack = FurnaceRecipes.smelting().getSmeltingResult(this.slots[0]); - - if(slots[1] == null) - { - slots[1] = itemStack.copy(); - }else if(slots[1].isItemEqual(itemStack)) { - slots[1].stackSize += itemStack.stackSize; - } - - for(int i = 0; i < 1; i++) - { - if(slots[i].stackSize <= 0) - { - slots[i] = new ItemStack(slots[i].getItem()); - }else{ - slots[i].stackSize--; - } - if(slots[i].stackSize <= 0) - { - slots[i] = null; - } - } - } - } - - //TODO: fix this punjabi trash - @Override - public void updateEntity() { - boolean flag1 = false; - - if(!worldObj.isRemote) { - - for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) - this.trySubscribe(worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, dir); - - if(hasPower() && canProcess()) - { - dualCookTime++; - - power -= 250; - - if(power < 0) - power = 0; - - if(this.dualCookTime == processingSpeed) - { - this.dualCookTime = 0; - this.processItem(); - flag1 = true; - } - }else{ - dualCookTime = 0; - } - - boolean trigger = true; - - if(hasPower() && canProcess() && this.dualCookTime == 0) - { - trigger = false; - } - - if(trigger) - { - flag1 = true; - MachineArcFurnace.updateBlockState(this.dualCookTime > 0, this.worldObj, this.xCoord, this.yCoord, this.zCoord); - } - - if(worldObj.getBlock(xCoord, yCoord, zCoord) == ModBlocks.machine_arc_furnace_off) { - - int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); - - if(hasElectrodes() && meta <= 5) { - worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, meta + 4, 2); - } - if(!hasElectrodes() && meta > 5) { - worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, meta - 4, 2); - } - } - - power = Library.chargeTEFromItems(slots, 5, power, maxPower); - - networkPackNT(50); // it makes no sense to refactor this to some, but I want to delete the AuxElectricityPacket already - } - - if(flag1) - { - this.markDirty(); - } - } - - @Override - public void serialize(ByteBuf buf) { - super.serialize(buf); - buf.writeLong(power); - buf.writeInt(dualCookTime); - } - - @Override - public void deserialize(ByteBuf buf) { - super.deserialize(buf); - power = buf.readLong(); - dualCookTime = buf.readInt(); - } - - @Override - public void setPower(long i) { - power = i; - - } - - @Override - public long getPower() { - return power; - - } - - @Override - public long getMaxPower() { - return maxPower; - } - - @Override - public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { - return new ContainerMachineArcFurnace(player.inventory, this); - } - - @Override - @SideOnly(Side.CLIENT) - public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { - return new GUIMachineArcFurnace(player.inventory, this); - } - - @Override - public void provideExtraInfo(NBTTagCompound data) { - data.setBoolean(CompatEnergyControl.B_ACTIVE, this.hasPower() && this.canProcess()); - data.setInteger(CompatEnergyControl.I_PROGRESS, this.dualCookTime); - } -} diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java index 84c1fd378..bd76ff316 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java @@ -154,7 +154,7 @@ public class TileEntityMachineElectricFurnace extends TileEntityMachineBase impl for(int i = 1; i < 2; i++) { if(slots[i].stackSize <= 0) { - slots[i] = new ItemStack(slots[i].getItem().setFull3D()); + slots[i] = new ItemStack(slots[i].getItem()); } else { slots[i].stackSize--; } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityRtgFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityRtgFurnace.java index 72882cabd..f2ac74441 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityRtgFurnace.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityRtgFurnace.java @@ -240,7 +240,7 @@ public class TileEntityRtgFurnace extends TileEntity implements ISidedInventory, { if(slots[i].stackSize <= 0) { - slots[i] = new ItemStack(slots[i].getItem().setFull3D()); + slots[i] = new ItemStack(slots[i].getItem()); }else{ slots[i].stackSize--; } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKAutoloader.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKAutoloader.java new file mode 100644 index 000000000..8ba45ef55 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKAutoloader.java @@ -0,0 +1,290 @@ +package com.hbm.tileentity.machine.rbmk; + +import com.hbm.blocks.machine.rbmk.RBMKBase; +import com.hbm.interfaces.IControlReceiver; +import com.hbm.interfaces.ICopiable; +import com.hbm.inventory.container.ContainerRBMKAutoloader; +import com.hbm.inventory.gui.GUIRBMKAutoloader; +import com.hbm.items.machine.ItemRBMKRod; +import com.hbm.main.MainRegistry; +import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.TileEntityMachineBase; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; + +public class TileEntityRBMKAutoloader extends TileEntityMachineBase implements IGUIProvider, IControlReceiver, ICopiable { + + public double piston; + public double renderPiston; + public double lastPiston; + private double syncPiston; + private int turnProgress; + private boolean isRetracting = true; + private int delay = 0; + + public static double speed = 0.005D; + + public int cycle = 50; + + private AudioWrapper audioLift; + + public TileEntityRBMKAutoloader() { + super(18); + } + + @Override + public String getName() { + return "container.rbmkAutoloader"; + } + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + + if(delay > 0) delay--; + + if(delay <= 0 && this.isRetracting && this.piston > 0D) { + this.piston -= this.speed; + if(this.piston <= 0) { + this.piston = 0; + this.delay = 40; + } + } + + // check for connected fuel rod and decide whether to begin working + if(isRetracting && worldObj.getTotalWorldTime() % 20 == 0 && this.hasFuel() && this.hasSpace()) { + Block below = worldObj.getBlock(xCoord, yCoord - 1, zCoord); + if(below instanceof RBMKBase) { + int[] pos = ((RBMKBase) below).findCore(worldObj, xCoord, yCoord - 1, zCoord); + TileEntity tile = worldObj.getTileEntity(pos[0], pos[1], pos[2]); + if(tile instanceof TileEntityRBMKRod) { + TileEntityRBMKRod rod = (TileEntityRBMKRod) tile; + if(rod.slots[0] == null || (rod.slots[0] != null && rod.slots[0].getItem() instanceof ItemRBMKRod && ItemRBMKRod.getEnrichment(rod.slots[0]) * 100 < cycle)) { + this.isRetracting = false; + } + } + } + } + + if(delay <= 0 && !this.isRetracting && this.piston < 1D) { + this.piston += this.speed; + if(this.piston >= 1) { + this.piston = 1; + this.delay = 40; + } + } + + // once the piston is fully extended + if(!isRetracting && this.piston >= 1D) { + this.piston = 1D; + + Block below = worldObj.getBlock(xCoord, yCoord - 1, zCoord); + if(below instanceof RBMKBase) { + int[] pos = ((RBMKBase) below).findCore(worldObj, xCoord, yCoord - 1, zCoord); + TileEntity tile = worldObj.getTileEntity(pos[0], pos[1], pos[2]); + if(tile instanceof TileEntityRBMKRod) { + TileEntityRBMKRod rod = (TileEntityRBMKRod) tile; + // try to take out the old fuel rod + if(rod.slots[0] != null && this.hasSpace()) { + for(int i = 9; i < 18; i++) { + if(slots[i] == null) { + slots[i] = rod.slots[0].copy(); + rod.slots[0] = null; + break; + } + } + } + // if there's space, try and insert a new fuel rod + if(rod.slots[0] == null) { + for(int i = 0; i < 9; i++) { + ItemStack stack = slots[i]; + if(stack != null && stack.getItem() instanceof ItemRBMKRod && ItemRBMKRod.getEnrichment(stack) * 100 >= cycle) { + rod.slots[0] = stack.copy(); + slots[i] = null; + break; + } + } + } + + this.isRetracting = true; + this.delay = 40; + } + } + } + + this.networkPackNT(100); + } else { + + this.lastPiston = this.renderPiston; + + if(this.turnProgress > 0) { + this.renderPiston = this.renderPiston + ((this.syncPiston - this.renderPiston) / (double) this.turnProgress); + --this.turnProgress; + } else { + this.renderPiston = this.syncPiston; + } + + if(this.renderPiston > 0.01 && this.renderPiston < 0.99) { + if(this.audioLift == null || !this.audioLift.isPlaying()) { + this.audioLift = MainRegistry.proxy.getLoopedSound("hbm:door.wgh_start", xCoord, yCoord, zCoord, this.getVolume(0.75F), 25F, 1.0F, 5); + this.audioLift.startSound(); + } + this.audioLift.updateVolume(this.getVolume(0.75F)); + this.audioLift.keepAlive(); + } else { + if(this.audioLift != null) { + this.audioLift.stopSound(); + this.audioLift = null; + MainRegistry.proxy.playSoundClient(xCoord, yCoord, zCoord, "hbm:door.wgh_stop", this.getVolume(2F), 1F); + } + } + + if(this.renderPiston > 0.99) { + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "tower"); + data.setFloat("lift", 0F); + data.setFloat("base", 0.25F); + data.setFloat("max", 1.5F); + data.setInteger("life", 70 + worldObj.rand.nextInt(30)); + data.setDouble("posX", xCoord + 0.5 + worldObj.rand.nextGaussian() * 0.125); + data.setDouble("posZ", zCoord + 0.5 + worldObj.rand.nextGaussian() * 0.125); + data.setDouble("posY", yCoord + 0.25); + data.setBoolean("noWind", true); + data.setFloat("alphaMod", 2F); + data.setFloat("strafe", 0.05F); + for(int i = 0; i < 3; i++) MainRegistry.proxy.effectNT(data); + } + } + } + + public boolean hasFuel() { + for(int i = 0; i < 9; i++) { + ItemStack stack = slots[i]; + if(stack != null && stack.getItem() instanceof ItemRBMKRod && ItemRBMKRod.getEnrichment(stack) * 100 >= cycle) { + return true; + } + } + + return false; + } + + public boolean hasSpace() { + for(int i = 9; i < 18; i++) if(slots[i] == null) return true; + return false; + } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeDouble(this.piston); + buf.writeInt(this.cycle); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.syncPiston = buf.readDouble(); + this.cycle = buf.readInt(); + + this.turnProgress = 2; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack stack) { + return stack.getItem() instanceof ItemRBMKRod && ItemRBMKRod.getEnrichment(stack) * 100 >= cycle && i < 9; + } + + @Override + public int[] getAccessibleSlotsFromSide(int side) { + return this.piston <= 0 ? new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 } : new int[0]; + } + + @Override + public boolean canExtractItem(int i, ItemStack itemStack, int j) { + return i >= 9; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + piston = nbt.getDouble("piston"); + isRetracting = nbt.getBoolean("ret"); + delay = nbt.getInteger("delay"); + cycle = nbt.getInteger("cycle"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setDouble("piston", piston); + nbt.setBoolean("ret", isRetracting); + nbt.setInteger("delay", delay); + nbt.setInteger("cycle", cycle); + } + + protected AxisAlignedBB aabb; + + @Override + public AxisAlignedBB getRenderBoundingBox() { + if(aabb != null) return aabb; + aabb = AxisAlignedBB.getBoundingBox(xCoord, yCoord, zCoord, xCoord + 1, yCoord + 9, zCoord + 1); + return aabb; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() { + return 65536.0D; + } + + @Override + public boolean hasPermission(EntityPlayer player) { + return this.isUseableByPlayer(player); + } + + @Override + public void receiveControl(NBTTagCompound data) { + if(data.hasKey("minus") && this.cycle > 5) this.cycle -= 5; + if(data.hasKey("plus") && this.cycle < 95) this.cycle += 5; + this.cycle = MathHelper.clamp_int(cycle, 5, 95); + this.markChanged(); + } + + @Override + public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new ContainerRBMKAutoloader(player.inventory, this); + } + + @Override + @SideOnly(Side.CLIENT) + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new GUIRBMKAutoloader(player.inventory, this); + } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound data = new NBTTagCompound(); + data.setInteger("cycle", cycle); + return data; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + if(nbt.hasKey("cycle")) { + this.cycle = MathHelper.clamp_int(nbt.getInteger("cycle"), 5, 95); + } + } +} diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index c3dbefea1..c569a4c24 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -437,6 +437,7 @@ container.radGen=Strahlenbetriebener Generator container.radar=Radar container.radiobox=UKW-Sender container.radiorec=UKW Radio +container.rbmkAutoloader=RBMK-Ladeautomat container.rbmkBoiler=RBMK Dampfkanal container.rbmkControl=RBMK Steuerstäbe container.rbmkControlAuto=RBMK Automatische Steuerstäbe @@ -4729,6 +4730,7 @@ tile.rail_large_switch.name=Normalspur-Weiche (15m, Links) tile.rail_large_switch_flipped.name=Normalspur-Weiche (15m, Rechts) tile.rail_wood.name=Holzschienen tile.rbmk_absorber.name=RBMK Bor-Neutronenabsorber +tile.rbmk_autoloader.name=RBMK-Ladeautomat tile.rbmk_blank.name=RBMK Strukturteil tile.rbmk_boiler.name=RBMK Dampfkanal tile.rbmk_cooler.name=RBMK Kühler diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index b02964bcc..f5702bf91 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -841,6 +841,7 @@ container.radar=Radar container.radiobox=FM Transmitter container.radiolysis=RTG and Radiolysis Chamber container.radiorec=FM Radio +container.rbmkAutoloader=RBMK Autoloader container.rbmkBoiler=RBMK Steam Channel container.rbmkControl=RBMK Control Rods container.rbmkControlAuto=RBMK Automatic Control Rods @@ -5877,6 +5878,7 @@ tile.rail_large_switch_flipped.name=Standard Gauge Switch Rail (15m, Right) tile.rail_narrow.name=Narrow Gauge Cart Rail tile.rail_wood.name=Wooden Tracks tile.rbmk_absorber.name=RBMK Boron Neutron Absorber +tile.rbmk_autoloader.name=RBMK Autoloader tile.rbmk_blank.name=RBMK Structural Column tile.rbmk_boiler.name=RBMK Steam Channel tile.rbmk_console.name=RBMK Console diff --git a/src/main/resources/assets/hbm/models/rbmk/autoloader.obj b/src/main/resources/assets/hbm/models/rbmk/autoloader.obj new file mode 100644 index 000000000..4b1dea3a7 --- /dev/null +++ b/src/main/resources/assets/hbm/models/rbmk/autoloader.obj @@ -0,0 +1,1029 @@ +# Blender v2.79 (sub 0) OBJ File: 'autoloader.blend' +# www.blender.org +o Piston +v 0.062500 0.000000 0.312500 +v 0.062500 0.000000 0.187500 +v 0.187500 0.000000 0.062500 +v 0.187500 0.000000 0.437500 +v 0.312500 0.000000 0.437500 +v 0.312500 0.000000 0.062500 +v 0.437500 0.000000 0.187500 +v 0.437500 0.000000 0.312500 +v -0.500000 0.500000 0.500000 +v 0.500000 0.500000 0.500000 +v -0.500000 0.500000 -0.500000 +v 0.500000 0.500000 -0.500000 +v 0.062500 0.500000 0.312500 +v 0.062500 0.500000 0.187500 +v 0.187500 0.500000 0.062500 +v 0.187500 0.500000 0.437500 +v 0.312500 0.500000 0.437500 +v 0.312500 0.500000 0.062500 +v 0.437500 0.500000 0.187500 +v 0.437500 0.500000 0.312500 +v 0.062500 0.000000 -0.187500 +v 0.062500 0.000000 -0.312500 +v 0.187500 0.000000 -0.437500 +v 0.187500 0.000000 -0.062500 +v 0.312500 0.000000 -0.062500 +v 0.312500 0.000000 -0.437500 +v 0.437500 0.000000 -0.312500 +v 0.437500 0.000000 -0.187500 +v 0.062500 0.500000 -0.187500 +v 0.062500 0.500000 -0.312500 +v 0.187500 0.500000 -0.437500 +v 0.187500 0.500000 -0.062500 +v 0.312500 0.500000 -0.062500 +v 0.312500 0.500000 -0.437500 +v 0.437500 0.500000 -0.312500 +v 0.437500 0.500000 -0.187500 +v -0.437500 0.000000 0.312500 +v -0.437500 0.000000 0.187500 +v -0.312500 0.000000 0.062500 +v -0.312500 0.000000 0.437500 +v -0.187500 0.000000 0.437500 +v -0.187500 0.000000 0.062500 +v -0.062500 0.000000 0.187500 +v -0.062500 0.000000 0.312500 +v -0.437500 0.500000 0.312500 +v -0.437500 0.500000 0.187500 +v -0.312500 0.500000 0.062500 +v -0.312500 0.500000 0.437500 +v -0.187500 0.500000 0.437500 +v -0.187500 0.500000 0.062500 +v -0.062500 0.500000 0.187500 +v -0.062500 0.500000 0.312500 +v -0.437500 0.000000 -0.187500 +v -0.437500 0.000000 -0.312500 +v -0.312500 0.000000 -0.437500 +v -0.312500 0.000000 -0.062500 +v -0.187500 0.000000 -0.062500 +v -0.187500 0.000000 -0.437500 +v -0.062500 0.000000 -0.312500 +v -0.062500 0.000000 -0.187500 +v -0.437500 0.500000 -0.187500 +v -0.437500 0.500000 -0.312500 +v -0.312500 0.500000 -0.437500 +v -0.312500 0.500000 -0.062500 +v -0.187500 0.500000 -0.062500 +v -0.187500 0.500000 -0.437500 +v -0.062500 0.500000 -0.312500 +v -0.062500 0.500000 -0.187500 +v 0.500000 0.000000 -0.500000 +v -0.500000 0.000000 -0.500000 +v 0.500000 0.000000 0.500000 +v -0.500000 0.000000 0.500000 +v 0.375000 0.750000 -0.375000 +v -0.375000 0.750000 -0.375000 +v 0.375000 0.750000 0.375000 +v -0.375000 0.750000 0.375000 +v 0.375000 4.500000 -0.375000 +v -0.375000 4.500000 -0.375000 +v 0.375000 4.500000 0.375000 +v -0.375000 4.500000 0.375000 +v 0.437500 4.500000 0.187500 +v 0.437500 4.500000 0.312500 +v 0.437500 0.500000 0.187500 +v 0.437500 0.500000 0.312500 +v 0.375000 4.500000 -0.312500 +v 0.375000 4.500000 -0.187500 +v 0.375000 0.500000 -0.312500 +v 0.375000 0.500000 -0.187500 +v 0.437500 4.500000 -0.312500 +v 0.437500 4.500000 -0.187500 +v 0.437500 0.500000 -0.312500 +v 0.437500 0.500000 -0.187500 +v 0.375000 0.500000 0.312500 +v 0.375000 0.500000 0.187500 +v 0.375000 4.500000 0.312500 +v 0.375000 4.500000 0.187500 +v -0.437500 4.500000 -0.187500 +v -0.437500 4.500000 -0.312500 +v -0.437500 0.500000 -0.187500 +v -0.437500 0.500000 -0.312500 +v -0.375000 4.500000 0.312500 +v -0.375000 4.500000 0.187500 +v -0.375000 0.500000 0.312500 +v -0.375000 0.500000 0.187500 +v -0.437500 4.500000 0.312500 +v -0.437500 4.500000 0.187500 +v -0.437500 0.500000 0.312500 +v -0.437500 0.500000 0.187500 +v -0.375000 0.500000 -0.312500 +v -0.375000 0.500000 -0.187500 +v -0.375000 4.500000 -0.312500 +v -0.375000 4.500000 -0.187500 +v 0.187500 4.500000 -0.437500 +v 0.312500 4.500000 -0.437500 +v 0.187500 0.500000 -0.437500 +v 0.312500 0.500000 -0.437500 +v -0.312500 4.500000 -0.375000 +v -0.187500 4.500000 -0.375000 +v -0.312500 0.500000 -0.375000 +v -0.187500 0.500000 -0.375000 +v -0.312500 4.500000 -0.437500 +v -0.187500 4.500000 -0.437500 +v -0.312500 0.500000 -0.437500 +v -0.187500 0.500000 -0.437500 +v 0.312500 0.500000 -0.375000 +v 0.187500 0.500000 -0.375000 +v 0.312500 4.500000 -0.375000 +v 0.187500 4.500000 -0.375000 +v -0.187500 4.500000 0.437500 +v -0.312500 4.500000 0.437500 +v -0.187500 0.500000 0.437500 +v -0.312500 0.500000 0.437500 +v 0.312500 4.500000 0.375000 +v 0.187500 4.500000 0.375000 +v 0.312500 0.500000 0.375000 +v 0.187500 0.500000 0.375000 +v 0.312500 4.500000 0.437500 +v 0.187500 4.500000 0.437500 +v 0.312500 0.500000 0.437500 +v 0.187500 0.500000 0.437500 +v -0.312500 0.500000 0.375000 +v -0.187500 0.500000 0.375000 +v -0.312500 4.500000 0.375000 +v -0.187500 4.500000 0.375000 +vt 0.736842 0.150943 +vt 0.631579 0.226415 +vt 0.631579 0.150943 +vt 0.611842 0.009434 +vt 0.631579 0.000000 +vt 0.625000 0.028302 +vt 0.559211 0.141509 +vt 0.598684 0.141509 +vt 0.546053 0.141509 +vt 0.526316 0.150943 +vt 0.532895 0.122642 +vt 0.710526 0.000000 +vt 0.697368 0.075472 +vt 0.697368 0.000000 +vt 0.684211 0.075472 +vt 0.684211 0.000000 +vt 0.671053 0.075472 +vt 0.657895 0.000000 +vt 0.671053 0.000000 +vt 0.736842 0.000000 +vt 0.723684 0.075472 +vt 0.723684 0.000000 +vt 0.644737 0.000000 +vt 0.631579 0.075472 +vt 0.631579 0.000000 +vt 0.710526 0.075472 +vt 0.657895 0.075472 +vt 0.657895 0.132075 +vt 0.631579 0.113208 +vt 0.644737 0.075472 +vt 0.710526 0.000000 +vt 0.697368 0.075472 +vt 0.697368 0.000000 +vt 0.684211 0.075472 +vt 0.684211 0.000000 +vt 0.671053 0.075472 +vt 0.657895 0.000000 +vt 0.671053 0.000000 +vt 0.736842 0.000000 +vt 0.723684 0.075472 +vt 0.723684 0.000000 +vt 0.644737 0.000000 +vt 0.631579 0.075472 +vt 0.631579 0.000000 +vt 0.710526 0.075472 +vt 0.657895 0.075472 +vt 0.657895 0.132075 +vt 0.631579 0.113208 +vt 0.644737 0.075472 +vt 0.710526 0.000000 +vt 0.697368 0.075472 +vt 0.697368 0.000000 +vt 0.684211 0.075472 +vt 0.684211 0.000000 +vt 0.671053 0.075472 +vt 0.657895 0.000000 +vt 0.671053 0.000000 +vt 0.736842 0.000000 +vt 0.723684 0.075472 +vt 0.723684 0.000000 +vt 0.644737 0.000000 +vt 0.631579 0.075472 +vt 0.631579 0.000000 +vt 0.710526 0.075472 +vt 0.657895 0.075472 +vt 0.657895 0.132075 +vt 0.631579 0.113208 +vt 0.644737 0.075472 +vt 0.710526 0.000000 +vt 0.697368 0.075472 +vt 0.697368 0.000000 +vt 0.684211 0.075472 +vt 0.684211 0.000000 +vt 0.671053 0.075472 +vt 0.657895 0.000000 +vt 0.671053 0.000000 +vt 0.736842 0.000000 +vt 0.723684 0.075472 +vt 0.723684 0.000000 +vt 0.644737 0.000000 +vt 0.631579 0.075472 +vt 0.631579 0.000000 +vt 0.710526 0.075472 +vt 0.657895 0.075472 +vt 0.657895 0.132075 +vt 0.631579 0.113208 +vt 0.644737 0.075472 +vt 0.546053 0.084906 +vt 0.559211 0.066038 +vt 0.559211 0.084906 +vt 0.572368 0.103774 +vt 0.585526 0.122642 +vt 0.572368 0.122642 +vt 0.598684 0.084906 +vt 0.611842 0.066038 +vt 0.611842 0.084906 +vt 0.572368 0.028302 +vt 0.585526 0.047170 +vt 0.572368 0.047170 +vt 0.598684 0.066038 +vt 0.585526 0.103774 +vt 0.559211 0.009434 +vt 0.585526 0.028302 +vt 0.532895 0.103774 +vt 0.546053 0.066038 +vt 0.625000 0.047170 +vt 0.625000 0.103774 +vt 0.532895 0.028302 +vt 0.526316 0.000000 +vt 0.546053 0.009434 +vt 0.625000 0.122642 +vt 0.611842 0.141509 +vt 0.532895 0.047170 +vt 0.598684 0.009434 +vt 0.842105 0.150943 +vt 0.736842 0.226415 +vt 0.526316 0.226415 +vt 0.421053 0.226415 +vt 0.421053 0.150943 +vt 0.539474 0.264151 +vt 0.434211 0.264151 +vt 0.842105 0.226415 +vt 0.750000 0.264151 +vt 0.644737 0.264151 +vt 0.723684 0.264151 +vt 0.644737 0.830189 +vt 0.513158 0.264151 +vt 0.434211 0.830189 +vt 0.828947 0.264151 +vt 0.750000 0.830189 +vt 0.618421 0.264151 +vt 0.539474 0.830189 +vt 0.993421 0.603774 +vt 0.980263 0.000000 +vt 0.993421 0.000000 +vt 0.993421 0.000000 +vt 1.000000 0.603774 +vt 0.993421 0.603774 +vt 0.980263 0.603774 +vt 0.973684 0.000000 +vt 0.980263 0.000000 +vt 0.980263 0.603774 +vt 0.973684 0.000000 +vt 1.000000 0.603774 +vt 0.993421 0.603774 +vt 0.980263 0.000000 +vt 0.993421 0.000000 +vt 0.993421 0.000000 +vt 1.000000 0.603774 +vt 0.993421 0.603774 +vt 0.980263 0.603774 +vt 0.973684 0.000000 +vt 0.980263 0.000000 +vt 0.980263 0.603774 +vt 0.973684 0.000000 +vt 1.000000 0.603774 +vt 0.993421 0.603774 +vt 0.980263 0.000000 +vt 0.993421 0.000000 +vt 0.993421 0.000000 +vt 1.000000 0.603774 +vt 0.993421 0.603774 +vt 0.980263 0.603774 +vt 0.973684 0.000000 +vt 0.980263 0.000000 +vt 0.980263 0.603774 +vt 0.973684 0.000000 +vt 1.000000 0.603774 +vt 0.993421 0.603774 +vt 0.980263 0.000000 +vt 0.993421 0.000000 +vt 0.993421 0.000000 +vt 1.000000 0.603774 +vt 0.993421 0.603774 +vt 0.980263 0.603774 +vt 0.973684 0.000000 +vt 0.980263 0.000000 +vt 0.980263 0.603774 +vt 0.973684 0.000000 +vt 1.000000 0.603774 +vt 0.736842 0.075472 +vt 0.671053 0.094340 +vt 0.671053 0.113208 +vt 0.644737 0.132075 +vt 0.631579 0.094340 +vt 0.736842 0.075472 +vt 0.671053 0.094340 +vt 0.671053 0.113208 +vt 0.644737 0.132075 +vt 0.631579 0.094340 +vt 0.736842 0.075472 +vt 0.671053 0.094340 +vt 0.671053 0.113208 +vt 0.644737 0.132075 +vt 0.631579 0.094340 +vt 0.736842 0.075472 +vt 0.671053 0.094340 +vt 0.671053 0.113208 +vt 0.644737 0.132075 +vt 0.631579 0.094340 +vt 0.723684 0.830189 +vt 0.513158 0.830189 +vt 0.828947 0.830189 +vt 0.618421 0.830189 +vt 1.000000 0.000000 +vt 0.973684 0.603774 +vt 0.973684 0.603774 +vt 1.000000 0.000000 +vt 1.000000 0.000000 +vt 0.973684 0.603774 +vt 0.973684 0.603774 +vt 1.000000 0.000000 +vt 1.000000 0.000000 +vt 0.973684 0.603774 +vt 0.973684 0.603774 +vt 1.000000 0.000000 +vt 1.000000 0.000000 +vt 0.973684 0.603774 +vt 0.973684 0.603774 +vt 1.000000 0.000000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn -0.7071 0.0000 0.7071 +vn 0.7071 0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.0000 0.0000 1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.8944 0.4472 0.0000 +vn 0.0000 0.4472 0.8944 +vn -0.8944 0.4472 0.0000 +vn 0.0000 0.4472 -0.8944 +s off +f 70/1/1 12/2/1 69/3/1 +f 54/4/2 70/5/2 55/6/2 +f 7/7/2 28/8/2 69/3/2 +f 8/9/2 71/10/2 5/11/2 +f 8/12/3 19/13/3 7/14/3 +f 7/14/4 18/15/4 6/16/4 +f 15/17/5 2/18/5 3/19/5 +f 4/20/1 17/21/1 5/22/1 +f 1/23/6 16/24/6 4/25/6 +f 5/22/7 20/26/7 8/12/7 +f 6/16/8 15/17/8 3/19/8 +f 14/27/9 1/23/9 2/18/9 +f 19/28/2 17/29/2 13/30/2 +f 28/31/3 35/32/3 27/33/3 +f 27/33/4 34/34/4 26/35/4 +f 31/36/5 22/37/5 23/38/5 +f 24/39/1 33/40/1 25/41/1 +f 21/42/6 32/43/6 24/44/6 +f 25/41/7 36/45/7 28/31/7 +f 26/35/8 31/36/8 23/38/8 +f 30/46/9 21/42/9 22/37/9 +f 35/47/2 33/48/2 29/49/2 +f 44/50/3 51/51/3 43/52/3 +f 43/52/4 50/53/4 42/54/4 +f 47/55/5 38/56/5 39/57/5 +f 40/58/1 49/59/1 41/60/1 +f 37/61/6 48/62/6 40/63/6 +f 41/60/7 52/64/7 44/50/7 +f 42/54/8 47/55/8 39/57/8 +f 46/65/9 37/61/9 38/56/9 +f 51/66/2 49/67/2 45/68/2 +f 60/69/3 67/70/3 59/71/3 +f 59/71/4 66/72/4 58/73/4 +f 63/74/5 54/75/5 55/76/5 +f 56/77/1 65/78/1 57/79/1 +f 53/80/6 64/81/6 56/82/6 +f 57/79/7 68/83/7 60/69/7 +f 58/73/8 63/74/8 55/76/8 +f 62/84/9 53/80/9 54/75/9 +f 67/85/2 65/86/2 61/87/2 +f 1/88/2 43/89/2 2/90/2 +f 3/91/2 25/92/2 6/93/2 +f 21/94/2 59/95/2 22/96/2 +f 39/97/2 57/98/2 42/99/2 +f 42/99/2 60/100/2 24/101/2 +f 38/102/2 56/103/2 39/97/2 +f 4/104/2 44/105/2 1/88/2 +f 6/93/2 28/8/2 7/7/2 +f 22/96/2 58/106/2 23/107/2 +f 40/108/2 72/109/2 37/110/2 +f 26/111/2 69/3/2 27/112/2 +f 23/107/2 58/106/2 70/5/2 +f 41/113/2 4/104/2 71/10/2 +f 53/114/2 38/102/2 72/109/2 +f 72/115/3 11/116/3 70/1/3 +f 69/3/9 10/117/9 71/10/9 +f 71/10/8 9/118/8 72/119/8 +f 12/2/10 75/120/10 10/117/10 +f 10/117/11 76/121/11 9/118/11 +f 9/122/12 74/123/12 11/116/12 +f 11/116/13 73/124/13 12/2/13 +f 74/125/1 77/126/1 73/124/1 +f 75/127/8 80/128/8 76/121/8 +f 76/129/3 78/130/3 74/123/3 +f 73/131/9 79/132/9 75/120/9 +f 81/133/9 84/134/9 83/135/9 +f 91/136/1 85/137/1 89/138/1 +f 90/139/8 88/140/8 92/141/8 +f 89/138/9 92/141/9 91/136/9 +f 82/142/8 93/143/8 84/134/8 +f 83/135/1 96/144/1 81/133/1 +f 97/145/3 100/146/3 99/147/3 +f 107/148/8 101/149/8 105/150/8 +f 106/151/1 104/152/1 108/153/1 +f 105/150/3 108/153/3 107/148/3 +f 98/154/1 109/155/1 100/146/1 +f 99/147/8 112/156/8 97/145/8 +f 113/157/1 116/158/1 115/159/1 +f 123/160/3 117/161/3 121/162/3 +f 122/163/9 120/164/9 124/165/9 +f 121/162/1 124/165/1 123/160/1 +f 114/166/9 125/167/9 116/158/9 +f 115/159/3 128/168/3 113/157/3 +f 129/169/8 132/170/8 131/171/8 +f 139/172/9 133/173/9 137/174/9 +f 138/175/3 136/176/3 140/177/3 +f 137/174/8 140/177/8 139/172/8 +f 130/178/3 141/179/3 132/170/3 +f 131/171/9 144/180/9 129/169/9 +f 70/1/1 11/116/1 12/2/1 +f 28/8/2 27/112/2 69/3/2 +f 69/3/2 71/10/2 7/7/2 +f 71/10/2 8/9/2 7/7/2 +f 8/12/3 20/26/3 19/13/3 +f 7/14/4 19/13/4 18/15/4 +f 15/17/5 14/27/5 2/18/5 +f 4/20/1 16/181/1 17/21/1 +f 1/23/6 13/30/6 16/24/6 +f 5/22/7 17/21/7 20/26/7 +f 6/16/8 18/15/8 15/17/8 +f 14/27/9 13/30/9 1/23/9 +f 13/30/2 14/27/2 15/182/2 +f 15/182/2 18/183/2 19/28/2 +f 19/28/2 20/184/2 17/29/2 +f 17/29/2 16/185/2 13/30/2 +f 13/30/2 15/182/2 19/28/2 +f 28/31/3 36/45/3 35/32/3 +f 27/33/4 35/32/4 34/34/4 +f 31/36/5 30/46/5 22/37/5 +f 24/39/1 32/186/1 33/40/1 +f 21/42/6 29/49/6 32/43/6 +f 25/41/7 33/40/7 36/45/7 +f 26/35/8 34/34/8 31/36/8 +f 30/46/9 29/49/9 21/42/9 +f 29/49/2 30/46/2 31/187/2 +f 31/187/2 34/188/2 35/47/2 +f 35/47/2 36/189/2 33/48/2 +f 33/48/2 32/190/2 29/49/2 +f 29/49/2 31/187/2 35/47/2 +f 44/50/3 52/64/3 51/51/3 +f 43/52/4 51/51/4 50/53/4 +f 47/55/5 46/65/5 38/56/5 +f 40/58/1 48/191/1 49/59/1 +f 37/61/6 45/68/6 48/62/6 +f 41/60/7 49/59/7 52/64/7 +f 42/54/8 50/53/8 47/55/8 +f 46/65/9 45/68/9 37/61/9 +f 45/68/2 46/65/2 47/192/2 +f 47/192/2 50/193/2 51/66/2 +f 51/66/2 52/194/2 49/67/2 +f 49/67/2 48/195/2 45/68/2 +f 45/68/2 47/192/2 51/66/2 +f 60/69/3 68/83/3 67/70/3 +f 59/71/4 67/70/4 66/72/4 +f 63/74/5 62/84/5 54/75/5 +f 56/77/1 64/196/1 65/78/1 +f 53/80/6 61/87/6 64/81/6 +f 57/79/7 65/78/7 68/83/7 +f 58/73/8 66/72/8 63/74/8 +f 62/84/9 61/87/9 53/80/9 +f 61/87/2 62/84/2 63/197/2 +f 63/197/2 66/198/2 67/85/2 +f 67/85/2 68/199/2 65/86/2 +f 65/86/2 64/200/2 61/87/2 +f 61/87/2 63/197/2 67/85/2 +f 1/88/2 44/105/2 43/89/2 +f 3/91/2 24/101/2 25/92/2 +f 21/94/2 60/100/2 59/95/2 +f 39/97/2 56/103/2 57/98/2 +f 24/101/2 3/91/2 2/90/2 +f 2/90/2 43/89/2 42/99/2 +f 42/99/2 57/98/2 60/100/2 +f 60/100/2 21/94/2 24/101/2 +f 24/101/2 2/90/2 42/99/2 +f 38/102/2 53/114/2 56/103/2 +f 4/104/2 41/113/2 44/105/2 +f 6/93/2 25/92/2 28/8/2 +f 22/96/2 59/95/2 58/106/2 +f 58/106/2 55/6/2 70/5/2 +f 70/5/2 69/3/2 23/107/2 +f 69/3/2 26/111/2 23/107/2 +f 4/104/2 5/11/2 71/10/2 +f 71/10/2 72/109/2 41/113/2 +f 72/109/2 40/108/2 41/113/2 +f 38/102/2 37/110/2 72/109/2 +f 72/109/2 70/5/2 53/114/2 +f 70/5/2 54/4/2 53/114/2 +f 72/115/3 9/122/3 11/116/3 +f 69/3/9 12/2/9 10/117/9 +f 71/10/8 10/117/8 9/118/8 +f 12/2/10 73/131/10 75/120/10 +f 10/117/11 75/127/11 76/121/11 +f 9/122/12 76/129/12 74/123/12 +f 11/116/13 74/125/13 73/124/13 +f 74/125/1 78/201/1 77/126/1 +f 75/127/8 79/202/8 80/128/8 +f 76/129/3 80/203/3 78/130/3 +f 73/131/9 77/204/9 79/132/9 +f 81/133/9 82/142/9 84/134/9 +f 91/136/1 87/205/1 85/137/1 +f 90/139/8 86/206/8 88/140/8 +f 89/138/9 90/139/9 92/141/9 +f 82/142/8 95/207/8 93/143/8 +f 83/135/1 94/208/1 96/144/1 +f 97/145/3 98/154/3 100/146/3 +f 107/148/8 103/209/8 101/149/8 +f 106/151/1 102/210/1 104/152/1 +f 105/150/3 106/151/3 108/153/3 +f 98/154/1 111/211/1 109/155/1 +f 99/147/8 110/212/8 112/156/8 +f 113/157/1 114/166/1 116/158/1 +f 123/160/3 119/213/3 117/161/3 +f 122/163/9 118/214/9 120/164/9 +f 121/162/1 122/163/1 124/165/1 +f 114/166/9 127/215/9 125/167/9 +f 115/159/3 126/216/3 128/168/3 +f 129/169/8 130/178/8 132/170/8 +f 139/172/9 135/217/9 133/173/9 +f 138/175/3 134/218/3 136/176/3 +f 137/174/8 138/175/8 140/177/8 +f 130/178/3 143/219/3 141/179/3 +f 131/171/9 142/220/9 144/180/9 +o Base +v -0.500000 4.500000 0.500000 +v 0.500000 4.500000 0.500000 +v -0.500000 4.500000 -0.500000 +v 0.500000 4.500000 -0.500000 +v -0.437500 8.000000 0.437500 +v 0.437500 8.000000 0.437500 +v -0.437500 8.000000 -0.437500 +v 0.437500 8.000000 -0.437500 +v -0.125000 0.000000 0.125000 +v 0.125000 0.000000 0.125000 +v -0.125000 0.000000 -0.125000 +v 0.125000 0.000000 -0.125000 +v -0.125000 4.500000 -0.125000 +v -0.125000 4.500000 0.125000 +v 0.125000 4.500000 0.125000 +v 0.125000 4.500000 -0.125000 +v -0.500000 7.750000 -0.500000 +v -0.500000 7.750000 0.500000 +v 0.500000 7.750000 0.500000 +v 0.500000 7.750000 -0.500000 +v 0.437500 7.500000 -0.437500 +v -0.437500 7.500000 -0.437500 +v 0.437500 7.500000 0.437500 +v -0.437500 7.500000 0.437500 +v -0.500000 4.750000 -0.500000 +v -0.500000 4.750000 0.500000 +v 0.500000 4.750000 0.500000 +v 0.500000 4.750000 -0.500000 +v -0.437500 5.000000 -0.437500 +v -0.437500 5.000000 0.437500 +v 0.437500 5.000000 0.437500 +v 0.437500 5.000000 -0.437500 +v -0.500000 9.000000 0.500000 +v 0.500000 9.000000 0.500000 +v -0.500000 9.000000 -0.500000 +v 0.500000 9.000000 -0.500000 +v -0.437500 8.750000 -0.437500 +v -0.437500 8.750000 0.437500 +v 0.437500 8.750000 0.437500 +v 0.437500 8.750000 -0.437500 +v -0.500000 8.000000 -0.500000 +v -0.500000 8.000000 0.500000 +v 0.500000 8.000000 0.500000 +v 0.500000 8.000000 -0.500000 +v -0.500000 8.750000 -0.500000 +v -0.500000 8.750000 0.500000 +v 0.500000 8.750000 0.500000 +v 0.500000 8.750000 -0.500000 +v -0.500000 8.125000 -0.500000 +v -0.500000 8.125000 0.500000 +v 0.500000 8.125000 0.500000 +v 0.500000 8.125000 -0.500000 +v -0.500000 8.625000 -0.500000 +v -0.500000 8.625000 0.500000 +v 0.500000 8.625000 0.500000 +v 0.500000 8.625000 -0.500000 +v 0.500000 4.750000 -0.187500 +v 0.500000 4.750000 -0.312500 +v 0.500000 7.750000 -0.187500 +v 0.500000 7.750000 -0.312500 +v 0.437500 4.750000 -0.187500 +v 0.437500 4.750000 -0.312500 +v 0.437500 7.750000 -0.187500 +v 0.437500 7.750000 -0.312500 +v 0.500000 4.750000 0.312500 +v 0.500000 4.750000 0.187500 +v 0.500000 7.750000 0.312500 +v 0.500000 7.750000 0.187500 +v 0.437500 4.750000 0.312500 +v 0.437500 4.750000 0.187500 +v 0.437500 7.750000 0.312500 +v 0.437500 7.750000 0.187500 +v -0.500000 4.750000 0.187500 +v -0.500000 4.750000 0.312500 +v -0.500000 7.750000 0.187500 +v -0.500000 7.750000 0.312500 +v -0.437500 4.750000 0.187500 +v -0.437500 4.750000 0.312500 +v -0.437500 7.750000 0.187500 +v -0.437500 7.750000 0.312500 +v -0.500000 4.750000 -0.312500 +v -0.500000 4.750000 -0.187500 +v -0.500000 7.750000 -0.312500 +v -0.500000 7.750000 -0.187500 +v -0.437500 4.750000 -0.312500 +v -0.437500 4.750000 -0.187500 +v -0.437500 7.750000 -0.312500 +v -0.437500 7.750000 -0.187500 +v -0.187500 4.750000 -0.500000 +v -0.312500 4.750000 -0.500000 +v -0.187500 7.750000 -0.500000 +v -0.312500 7.750000 -0.500000 +v -0.187500 4.750000 -0.437500 +v -0.312500 4.750000 -0.437500 +v -0.187500 7.750000 -0.437500 +v -0.312500 7.750000 -0.437500 +v 0.312500 4.750000 -0.500000 +v 0.187500 4.750000 -0.500000 +v 0.312500 7.750000 -0.500000 +v 0.187500 7.750000 -0.500000 +v 0.312500 4.750000 -0.437500 +v 0.187500 4.750000 -0.437500 +v 0.312500 7.750000 -0.437500 +v 0.187500 7.750000 -0.437500 +v 0.187500 4.750000 0.500000 +v 0.312500 4.750000 0.500000 +v 0.187500 7.750000 0.500000 +v 0.312500 7.750000 0.500000 +v 0.187500 4.750000 0.437500 +v 0.312500 4.750000 0.437500 +v 0.187500 7.750000 0.437500 +v 0.312500 7.750000 0.437500 +v -0.312500 4.750000 0.500000 +v -0.187500 4.750000 0.500000 +v -0.312500 7.750000 0.500000 +v -0.187500 7.750000 0.500000 +v -0.312500 4.750000 0.437500 +v -0.187500 4.750000 0.437500 +v -0.312500 7.750000 0.437500 +v -0.187500 7.750000 0.437500 +vt 0.210526 -0.000000 +vt 0.105263 0.150943 +vt 0.105263 0.000000 +vt 0.315789 0.707547 +vt 0.217105 0.688679 +vt 0.309211 0.688679 +vt 0.105263 0.679245 +vt 0.210526 0.641509 +vt 0.210526 0.679245 +vt -0.000000 0.641509 +vt 0.098684 0.603774 +vt 0.105263 0.641509 +vt 0.315789 0.679245 +vt 0.421053 0.641509 +vt 0.421053 0.679245 +vt -0.000000 0.679245 +vt 0.894737 0.000000 +vt 0.868421 0.037736 +vt 0.868421 0.000000 +vt 0.842105 0.716981 +vt 0.842105 0.037736 +vt 0.894737 0.037736 +vt 0.868421 0.716981 +vt 0.947368 0.037736 +vt 0.921053 0.716981 +vt 0.921053 0.037736 +vt 0.894737 0.716981 +vt 0.315789 0.641509 +vt 0.309211 0.603774 +vt 0.414474 0.603774 +vt 0.203947 0.603774 +vt 0.105263 0.188679 +vt 0.006579 0.226415 +vt 0.000000 0.188679 +vt 0.315789 0.150943 +vt 0.210526 0.188679 +vt 0.210526 0.150943 +vt 0.000000 0.150943 +vt 0.421053 0.150943 +vt 0.315789 0.188679 +vt 0.111842 0.226415 +vt 0.421053 0.188679 +vt 0.322368 0.226415 +vt 0.217105 0.226415 +vt 0.322368 0.603774 +vt 0.414474 0.226415 +vt 0.217105 0.603774 +vt 0.309211 0.226415 +vt 0.111842 0.603774 +vt 0.203947 0.226415 +vt 0.006579 0.603774 +vt 0.098684 0.226415 +vt 0.105263 0.849057 +vt 0.210526 1.000000 +vt 0.105263 1.000000 +vt 0.421053 0.707547 +vt 0.322368 0.688679 +vt 0.414474 0.688679 +vt 0.210526 0.849057 +vt 0.315789 0.811321 +vt 0.315789 0.849057 +vt -0.000000 0.849057 +vt 0.105263 0.811321 +vt 0.210526 0.811321 +vt 0.421053 0.811321 +vt 0.421053 0.849057 +vt 0.006579 0.688679 +vt 0.098684 0.688679 +vt 0.111842 0.688679 +vt 0.203947 0.688679 +vt 0.414474 0.801887 +vt 0.322368 0.801887 +vt 0.098684 0.801887 +vt -0.000000 0.811321 +vt 0.006579 0.801887 +vt 0.203947 0.801887 +vt 0.111842 0.801887 +vt 0.309211 0.801887 +vt 0.217105 0.801887 +vt 0.210526 0.707547 +vt 0.105263 0.707547 +vt 0.421053 0.783019 +vt 0.105263 0.783019 +vt 0.210526 0.783019 +vt 0.315789 0.783019 +vt 0.000000 0.707547 +vt 0.967105 0.452830 +vt 0.953947 0.000000 +vt 0.967105 0.000000 +vt 0.953947 0.452830 +vt 0.947368 0.000000 +vt 0.973684 0.452830 +vt 0.967105 0.452830 +vt 0.953947 0.000000 +vt 0.967105 0.000000 +vt 0.953947 0.452830 +vt 0.947368 0.000000 +vt 0.973684 0.452830 +vt 0.967105 0.452830 +vt 0.953947 0.000000 +vt 0.967105 0.000000 +vt 0.953947 0.452830 +vt 0.947368 0.000000 +vt 0.973684 0.452830 +vt 0.967105 0.452830 +vt 0.953947 0.000000 +vt 0.967105 0.000000 +vt 0.953947 0.452830 +vt 0.947368 0.000000 +vt 0.973684 0.452830 +vt 0.967105 0.452830 +vt 0.953947 0.000000 +vt 0.967105 0.000000 +vt 0.953947 0.452830 +vt 0.947368 0.000000 +vt 0.973684 0.452830 +vt 0.967105 0.452830 +vt 0.953947 0.000000 +vt 0.967105 0.000000 +vt 0.953947 0.452830 +vt 0.947368 0.000000 +vt 0.973684 0.452830 +vt 0.967105 0.452830 +vt 0.953947 0.000000 +vt 0.967105 0.000000 +vt 0.953947 0.452830 +vt 0.947368 0.000000 +vt 0.973684 0.452830 +vt 0.967105 0.452830 +vt 0.953947 0.000000 +vt 0.967105 0.000000 +vt 0.953947 0.452830 +vt 0.947368 0.000000 +vt 0.973684 0.452830 +vt 0.947368 0.716981 +vt 0.000000 0.783019 +vt 0.947368 0.452830 +vt 0.973684 0.000000 +vt 0.947368 0.452830 +vt 0.973684 0.000000 +vt 0.947368 0.452830 +vt 0.973684 0.000000 +vt 0.947368 0.452830 +vt 0.973684 0.000000 +vt 0.947368 0.452830 +vt 0.973684 0.000000 +vt 0.947368 0.452830 +vt 0.973684 0.000000 +vt 0.947368 0.452830 +vt 0.973684 0.000000 +vt 0.947368 0.452830 +vt 0.973684 0.000000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.4472 -0.8944 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -0.2425 0.9701 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.2425 -0.9701 +vn -0.9701 -0.2425 0.0000 +vn 0.9701 -0.2425 0.0000 +vn 0.0000 0.2425 0.9701 +vn 0.9701 0.2425 0.0000 +vn -0.9701 0.2425 0.0000 +vn 0.0000 0.2425 -0.9701 +vn 0.0000 1.0000 0.0000 +vn -0.8944 -0.4472 0.0000 +vn 0.8944 -0.4472 0.0000 +vn 0.0000 -0.4472 0.8944 +vn -0.8944 0.4472 0.0000 +vn 0.0000 0.4472 0.8944 +vn 0.8944 0.4472 0.0000 +vn 0.0000 0.4472 -0.8944 +s off +f 147/221/14 146/222/14 145/223/14 +f 193/224/15 152/225/15 151/226/15 +f 187/227/16 164/228/16 188/229/16 +f 162/230/17 167/231/17 163/232/17 +f 185/233/18 162/234/18 186/235/18 +f 186/236/19 163/232/19 187/227/19 +f 155/237/14 154/238/14 153/239/14 +f 154/238/19 158/240/19 153/241/19 +f 156/242/16 159/243/16 154/238/16 +f 153/244/18 157/245/18 155/246/18 +f 155/246/20 160/247/20 156/242/20 +f 188/229/20 161/248/20 185/233/20 +f 164/228/21 166/249/21 161/248/21 +f 161/248/22 168/250/22 162/234/22 +f 163/232/23 165/251/23 164/228/23 +f 171/252/24 174/253/24 170/254/24 +f 147/255/20 172/256/20 148/257/20 +f 146/222/19 170/254/19 145/258/19 +f 148/257/16 171/252/16 146/222/16 +f 145/259/18 169/260/18 147/255/18 +f 172/256/25 175/261/25 171/252/25 +f 170/262/26 173/263/26 169/260/26 +f 169/260/27 176/264/27 172/256/27 +f 166/265/18 174/266/18 168/250/18 +f 165/267/20 173/268/20 166/249/20 +f 167/269/16 176/270/16 165/251/16 +f 168/271/19 175/272/19 167/231/19 +f 178/273/28 179/274/28 177/275/28 +f 194/276/29 151/277/29 149/278/29 +f 180/279/20 189/280/20 179/281/20 +f 177/282/19 191/283/19 178/273/19 +f 178/273/16 192/284/16 180/279/16 +f 179/281/18 190/285/18 177/286/18 +f 151/277/28 186/235/28 149/278/28 +f 149/287/28 187/227/28 150/288/28 +f 150/289/28 188/229/28 152/290/28 +f 152/225/28 185/233/28 151/226/28 +f 182/291/14 189/280/14 181/292/14 +f 183/293/14 190/294/14 182/295/14 +f 184/296/14 191/283/14 183/297/14 +f 181/298/14 192/284/14 184/299/14 +f 196/300/30 150/289/30 152/290/30 +f 195/301/31 149/287/31 150/288/31 +f 181/292/32 198/302/32 182/291/32 +f 182/295/33 199/303/33 183/293/33 +f 183/297/34 200/304/34 184/296/34 +f 184/299/35 197/305/35 181/298/35 +f 198/302/18 193/224/18 194/276/18 +f 199/303/19 194/306/19 195/301/19 +f 200/304/16 195/301/16 196/300/16 +f 197/305/20 196/300/20 193/224/20 +f 204/307/16 201/308/16 202/309/16 +f 203/310/19 205/311/19 201/308/19 +f 202/309/20 208/312/20 204/307/20 +f 212/313/16 209/314/16 210/315/16 +f 211/316/19 213/317/19 209/314/19 +f 210/315/20 216/318/20 212/313/20 +f 220/319/18 217/320/18 218/321/18 +f 219/322/20 221/323/20 217/320/20 +f 218/321/19 224/324/19 220/319/19 +f 228/325/18 225/326/18 226/327/18 +f 227/328/20 229/329/20 225/326/20 +f 226/327/19 232/330/19 228/325/19 +f 236/331/20 233/332/20 234/333/20 +f 235/334/16 237/335/16 233/332/16 +f 234/333/18 240/336/18 236/331/18 +f 244/337/20 241/338/20 242/339/20 +f 243/340/16 245/341/16 241/338/16 +f 242/339/18 248/342/18 244/337/18 +f 252/343/19 249/344/19 250/345/19 +f 251/346/18 253/347/18 249/344/18 +f 250/345/16 256/348/16 252/343/16 +f 260/349/19 257/350/19 258/351/19 +f 259/352/18 261/353/18 257/350/18 +f 258/351/16 264/354/16 260/349/16 +f 147/221/14 148/257/14 146/222/14 +f 193/224/15 196/300/15 152/225/15 +f 187/227/16 163/232/16 164/228/16 +f 162/230/17 168/271/17 167/231/17 +f 185/233/18 161/248/18 162/234/18 +f 186/236/19 162/230/19 163/232/19 +f 155/237/14 156/242/14 154/238/14 +f 154/238/19 159/243/19 158/240/19 +f 156/242/16 160/247/16 159/243/16 +f 153/244/18 158/355/18 157/245/18 +f 155/246/20 157/245/20 160/247/20 +f 188/229/20 164/228/20 161/248/20 +f 164/228/21 165/267/21 166/249/21 +f 161/248/22 166/265/22 168/250/22 +f 163/232/23 167/269/23 165/251/23 +f 171/252/24 175/272/24 174/253/24 +f 147/255/20 169/260/20 172/256/20 +f 146/222/19 171/252/19 170/254/19 +f 148/257/16 172/256/16 171/252/16 +f 145/259/18 170/262/18 169/260/18 +f 172/256/25 176/270/25 175/261/25 +f 170/262/26 174/266/26 173/263/26 +f 169/260/27 173/268/27 176/264/27 +f 166/265/18 173/263/18 174/266/18 +f 165/267/20 176/264/20 173/268/20 +f 167/269/16 175/261/16 176/270/16 +f 168/271/19 174/253/19 175/272/19 +f 178/273/28 180/279/28 179/274/28 +f 194/276/29 193/224/29 151/277/29 +f 180/279/20 192/284/20 189/280/20 +f 177/282/19 190/294/19 191/283/19 +f 178/273/16 191/283/16 192/284/16 +f 179/281/18 189/280/18 190/285/18 +f 151/277/28 185/233/28 186/235/28 +f 149/287/28 186/236/28 187/227/28 +f 150/289/28 187/227/28 188/229/28 +f 152/225/28 188/229/28 185/233/28 +f 182/291/14 190/285/14 189/280/14 +f 183/293/14 191/283/14 190/294/14 +f 184/296/14 192/284/14 191/283/14 +f 181/298/14 189/280/14 192/284/14 +f 196/300/30 195/301/30 150/289/30 +f 195/301/31 194/306/31 149/287/31 +f 181/292/32 197/305/32 198/302/32 +f 182/295/33 198/356/33 199/303/33 +f 183/297/34 199/303/34 200/304/34 +f 184/299/35 200/304/35 197/305/35 +f 198/302/18 197/305/18 193/224/18 +f 199/303/19 198/356/19 194/306/19 +f 200/304/16 199/303/16 195/301/16 +f 197/305/20 200/304/20 196/300/20 +f 204/307/16 203/310/16 201/308/16 +f 203/310/19 207/357/19 205/311/19 +f 202/309/20 206/358/20 208/312/20 +f 212/313/16 211/316/16 209/314/16 +f 211/316/19 215/359/19 213/317/19 +f 210/315/20 214/360/20 216/318/20 +f 220/319/18 219/322/18 217/320/18 +f 219/322/20 223/361/20 221/323/20 +f 218/321/19 222/362/19 224/324/19 +f 228/325/18 227/328/18 225/326/18 +f 227/328/20 231/363/20 229/329/20 +f 226/327/19 230/364/19 232/330/19 +f 236/331/20 235/334/20 233/332/20 +f 235/334/16 239/365/16 237/335/16 +f 234/333/18 238/366/18 240/336/18 +f 244/337/20 243/340/20 241/338/20 +f 243/340/16 247/367/16 245/341/16 +f 242/339/18 246/368/18 248/342/18 +f 252/343/19 251/346/19 249/344/19 +f 251/346/18 255/369/18 253/347/18 +f 250/345/16 254/370/16 256/348/16 +f 260/349/19 259/352/19 257/350/19 +f 259/352/18 263/371/18 261/353/18 +f 258/351/16 262/372/16 264/354/16 diff --git a/src/main/resources/assets/hbm/textures/blocks/rbmk_autoloader.png b/src/main/resources/assets/hbm/textures/blocks/rbmk_autoloader.png new file mode 100644 index 0000000000000000000000000000000000000000..84c7faeb761786a0c31b907c3e49d94e8f23c7e1 GIT binary patch literal 285 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf#%`9@aupR3lsx5Dm1^`|MWVNNwP+ON%Gdhoyv7fw=gwtO!-;z{Img&{vS?3 zM`nh{7GkU_ib~647PH4zpLThx=e1LS$wOXRLr}8h`=gy53+{iP$jI=eKRrzA<=aO_ z{(|!*87lok*%4Y>+s-(|+m`)PZ%&<;6Y}f!oo#jI7tXk6v~1SO>DhWl<>B7- h(lW-^3y$q&yuYPJaNoq>2%!HMJYD@<);T3K0RWAEZ%_aL literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/gui/gui_arc.png b/src/main/resources/assets/hbm/textures/gui/gui_arc.png deleted file mode 100644 index b78524b439a4d95387f2c648710bcb3f0c1f1ac4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3054 zcmc&$do+~m8h>ZZVT`t0Qtpb}vJ+dHBqX=lF*XK~TPaF%%eV}4QM*LrHf~8#VQUy9 zMUC6El}MAqP$bGNgWL_naK6?)YwdIPT4(J)&L8Jp>s#-)*7H8U_4_@~`+L4G@fWPk z4=8yQ0N@9Vt)&wHFz6KqkiyXB8Ghd%+7K5lFgPT%;*h7W0U%b4u{?r{zBN6-4p!)u zYndB=opv<+QQ(P+E_Gzub8OnNvp-hC5y^Vy6Zf>J%(@6E79|q)u%}e`q3F=wa9B@G zj_)W+TE_aeZTjhEBei!L?9|mM3k|h{{9Oq$0b}cA%E`VepW8^1O8&usvA18{5-D-} zs+G+hw=||>Xm2-LMf|9b^boFYZW-2vI|q5A%nHw57dlS9v4Rtr&@&NX-1qTgca9I~ z+=V-tmJ4bDJv}{-o;FkCeqfaYI=IZC6%CjVrHz&|VLfPcT zv&|!snckbpGmUG(vcmv7{pR)|{#12G#LTA#OB&s^Ea{%@0aF3aQKoeUk26R&+1lo! zx-}tb_;~o?7bzv)XBP$J&5}Vq&u*di$~XxGV5gcuDX}xliKLii9ICD~M=hp8PxD)= ziz6Ubwo~r!h!y>h}0_3k zqRT+(m!gWd>)3^DHfP)nvOB;ncL{Lg*Jp=fK47}zn8nNqZcBMn;N6e!zL*71IzU|Z zGWC|m^T_W!=biFJN7SWY`zB$4-r(^(((Yb(o8#N_?FhZyn9(A$b-&Rf&D@7$c6Vr^ zqgvTj>+%#}es^WVyE)_>f?6|)Rnea zAKKi=q3Uxr&j_M<6~=EaG4B?t8vQI?R|!J`8S9dM=Z@5o=redc_OA3n&cb|Q{;Sc4 z%)8yFpSdqwR>Rz@6nAHbAf$m7qND8oyA`Xfr_4S*pZiLyItn&*dO}Ziv{Tfq!WTPv z98vf`63Z<2=74Htkmg#_l|CL5_}HVA!!6|m8YDr23w>(&(sCTN2EusMqqX%_s*PzZ z0)&SUiC&YFlibKU8qFbQDLZ;!mR23 zT4!>6aq(`iCemU2?XVHzI{HIjU*G%Md9S+2>F47pG_iII_oFP#60 zVUu?LiUh^Knx35e!()$fA$F6Gj1{UmbY*gNHO8gP<#6<@Zz)Vw3Qk|ma!*z5MX3PD zzm75!Ey)Uy+ZwzbQifacUUGh!>WN>_*~4gqmR257FxxD_jF{-mO-`4zJ((#-;j|MI zAZC_pru>Ny)d8sHU$TC-%8!~=!PfS>?6^8l^kMruht$ut61*t{79m!t84cRZ=2OS`b~1@ z*$sVagD^`x{xk+k>W^!jQF*_SS5V+4V>NFQf?g`H8a`&Y`96h-@D-cIF_55Rq5G^M zuH2OqT$^D3DY$mGz?j1$ZnBi(1GWhpl2K~`z);W%afG^@KThWaLL*eEPWVC7=REe9 z`_Otc>2sLYKV4etFbiTwL7kR}i7}X{p5b)_x!>mVm8C*v4|F zo|L>w;o}QTiKPbyoJe}FWf#9g>AW!&YP`v9e;#gI&LDC z*4YXR#T6FdkwGCL?O}>P>gwJfoH-v5V1uD)ZD~$VS$O54M7?(Oh%;ut(EGuujN{s7 zaGveB0V^_a1&THMjp)-4Ga$%G0dKH(dAUX> zE6M1?08q$>&KvKWAb2{=2)lm|mlhY0jNj_wp zizh_16(dDivP1Mye}&oc0-w z^0fT2=*jJ>S#}~U2Qxttp`ijA7C}aSRPXv|eW&U(<>DIGyeK#W1t6hf3XyfDsYAfD z<(uUL!KvLr?q!!nk1e40UB41;EfBN0z_TCLxPwmFcJ=dYO)vh9~@@m=`T7!Z%gZyyI)6nrZN|?@uSe|B%r)N0@f)6@YRQd z2RmTkI28b0YXD@`0JtvoXSm9*KvIh^7vlPV zfcO&7QrC=gE1MI|yP&7LElvrGxT)OppDO)&eB@&|}rN0lZV=Kegy4C|D|e*)-mNG|{Y diff --git a/src/main/resources/assets/hbm/textures/gui/machine/gui_autoloader.png b/src/main/resources/assets/hbm/textures/gui/machine/gui_autoloader.png new file mode 100644 index 0000000000000000000000000000000000000000..05618d9481f09ec201d8cf826e54661ecd3c03f8 GIT binary patch literal 1736 zcmb_ddoqvWFD;QN3^V1CMyqJD7HM1AH5`v=W*DztMiHThH&LU; zGd5+HvC-I8(@$6orebQwv!zkOnAx#)I{T>8Kl}aTe!u5@@4es8x!=$Cb5r-?T$Poy zl>h+B?rvCb0ASJ(1{CC_&OfT+JE@b4c5&aYAT_GOw=@9c6Wy`S`^g2<+?w$92iG8; z@=Q(5@&0!zA2gKs;15;^SD(LY3V#LjXj@eOOxf&gj>m5H#d}J&czl)3Dg#naSXS%~ zNwt8gS2@aKOcp#DzVm9>^GeYTK7{!uyA+Y>UU zn!wrt$DBH<5L@7A>5|2nD{+EYKJEda>g*3npIx4}zH8 zlZ0t*A>zP9fzZ9rW$c?)amb6{s@7fGRT_;~V3%C+6;zCg-nLi&l2%OOp{$jso%{>jpm z%!lPH$k)io$Z=C_9p2nvVmaaFi6*4Kj-DRrOVxoc(K6>q7NgG<#_SeJWdK+-F*(7} z8S#g*YYp>LD{pv6>h(5fyPs4&dhcwPXexJda#F#p&)0L*8BitS_}h+HEYjh_^ofAnERIB{@a`WsYC$Mx1J9lA_ohs8UftpOZ!Noa>N z)>BFXVthOyYC|qtDd?qmdC3_eLmU8M9c_x0@>=j-`ohYm^1oO~T_S9~^67PkEZdBg O3*C3(u+=U>$NvP_-_mCQ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/machines/rbmk_autoloader.png b/src/main/resources/assets/hbm/textures/models/machines/rbmk_autoloader.png new file mode 100644 index 0000000000000000000000000000000000000000..f15f922bd5ded58c99a8b6ac95367cd53f120b8f GIT binary patch literal 1576 zcmaKseK^x=7{}M4QD|K_nU_LS>{J`&Exjn2GB2Z;Hf$>WPz|xB?Ihw5LwU=Fs8&>J zCZxhhNK55ZSZG#xtJYH3CNn#~{y5k9UKcDOVl@Fs zEO7~aJkEXz`_XYrr6|CLiZqJ0dmERfUbLaSiOQS~D$GxM=*4m?a=YhSM*J8VlasFb zYIRy~)K@>PiJP_a;lZzzeW&FLjVpPhmkK%JZHd$CI~@W>m8U}*9GRYM`$n2&{niGEtW*i+Xgs zE9YjCUb|-9g=##`DQMs;ZXQoG#5mW}!%8mW;z)=w3T_f1+8=R#$Ty;Q;?7_gBzE>g z1 zQ9cpqvIjF``9Hkyw3*);PXTb%3tdEi^T;nnChM7;QKv@)L?4HDRdztCU(7d5Kj8e* zZ?L~zJHbhKtVYjLe~ON@dd^7w? zO0E@iI?RfhP@iuTGw*%qf!S5G|IZA-R=-o%gTrpyQz)EN9Gxp}#MF7q2V8^_L3u)q zxZ^osz+$odu*K%hvh8niT%GpiTY3~mE*TP8IPPnKs1k;=iAw=Fx5Sx#IcuI&vVY-o zR*#PKjf_!?xYtJFGXkT!z!|K3peO$jI~6l*r1E(VdZ|BYjI-VCQuA#7VKCeT&pZf4 z_&@vG^j|ZeY^??9{^k5{*?*gGbxsf@@-7jc;{j?P@1{_4Ln!%^C!x9=Zx!>nyZBZ> zO}?_HWmv{QK8EVF*Svzg+sj`Nl0BM4=YqNTfvF2O(4oy1hf<|m#k?7<_|Ph{T>Obl zkc_?W5*n7LiX%vW6}_#|TV6S2KGaoTH26+tFhi`Cz! zTaNQ5l?K*Nz~AO?b9Nt@(15&?DI-q)h%Y;G@PZgLi9aTb93{N+1WSu`9g_LZ|m<$ z03d~@62cf64qG-H7%Xowr(Dp5Y8+J_OeN%ledxBCx#+{rX2b#97&MC$N%_jOK_sG! oPUkvIqL#dt2b#6noBGJn&`JFM;d7eb!PO7(#Q3^byM?9v1sK8(N&o-= literal 0 HcmV?d00001