From 16ed2ed4d24f870fe831851ea0925ca12cb52c11 Mon Sep 17 00:00:00 2001 From: HbmMods Date: Sun, 7 Jun 2020 16:14:20 +0200 Subject: [PATCH] finished crystallizer, updated textures --- assets/hbm/lang/de_DE.lang | 28 + assets/hbm/lang/en_US.lang | 28 + assets/hbm/models/weapons/grenade_frag.obj | 1664 +++++++++++++++++ assets/hbm/models/weapons/pch.obj | 245 +++ assets/hbm/sounds.json | 2 + assets/hbm/sounds/tool/vice.ogg | Bin 0 -> 10271 bytes assets/hbm/sounds/weapon/bodysplat.ogg | Bin 0 -> 9352 bytes assets/hbm/textures/blocks/brick_obsidian.png | Bin 470 -> 570 bytes .../blocks/machine_crystallizer_side.png | Bin 0 -> 354 bytes .../blocks/machine_crystallizer_top.png | Bin 0 -> 400 bytes assets/hbm/textures/gui/centrifuge_gas.png | Bin 2412 -> 2590 bytes assets/hbm/textures/gui/gui_arc.png | Bin 2595 -> 2766 bytes .../gui/processing/gui_crystallizer.png | Bin 1854 -> 2105 bytes .../textures/gui/weapon/fatManSchematic.png | Bin 8916 -> 10273 bytes .../textures/gui/weapon/gadgetSchematic.png | Bin 3159 -> 10212 bytes .../textures/gui/weapon/lilBoySchematic.png | Bin 9180 -> 11109 bytes assets/hbm/textures/items/boy_bullet.png | Bin 298 -> 310 bytes assets/hbm/textures/items/boy_target.png | Bin 351 -> 388 bytes assets/hbm/textures/items/cbt_device.png | Bin 0 -> 277 bytes .../hbm/textures/items/crystal_fluorite.png | Bin 0 -> 432 bytes assets/hbm/textures/items/crystal_lithium.png | Bin 0 -> 442 bytes assets/hbm/textures/items/crystal_niter.png | Bin 0 -> 402 bytes .../hbm/textures/items/crystal_phosphorus.png | Bin 0 -> 435 bytes .../hbm/textures/items/crystal_plutonium.png | Bin 0 -> 453 bytes .../hbm/textures/items/crystal_starmetal.png | Bin 0 -> 422 bytes assets/hbm/textures/items/crystal_trixite.png | Bin 0 -> 414 bytes .../textures/items/ingot_plutonium_fuel.png | Bin 321 -> 395 bytes .../hbm/textures/items/ingot_uranium_fuel.png | Bin 327 -> 434 bytes assets/hbm/textures/items/motor.png | Bin 283 -> 339 bytes .../hbm/textures/items/nugget_beryllium.png | Bin 248 -> 302 bytes .../textures/items/nugget_dineutronium.png | Bin 179 -> 290 bytes .../hbm/textures/items/nugget_euphemium.png | Bin 238 -> 295 bytes assets/hbm/textures/items/nugget_hes.png | Bin 218 -> 313 bytes assets/hbm/textures/items/nugget_lead.png | Bin 237 -> 286 bytes assets/hbm/textures/items/nugget_les.png | Bin 218 -> 320 bytes assets/hbm/textures/items/nugget_mox_fuel.png | Bin 217 -> 303 bytes .../hbm/textures/items/nugget_neptunium.png | Bin 213 -> 286 bytes .../hbm/textures/items/nugget_plutonium.png | Bin 243 -> 276 bytes .../textures/items/nugget_plutonium_fuel.png | Bin 208 -> 325 bytes assets/hbm/textures/items/nugget_pu238.png | Bin 207 -> 317 bytes assets/hbm/textures/items/nugget_pu239.png | Bin 205 -> 317 bytes assets/hbm/textures/items/nugget_pu240.png | Bin 210 -> 315 bytes .../hbm/textures/items/nugget_schrabidium.png | Bin 242 -> 283 bytes assets/hbm/textures/items/nugget_solinium.png | Bin 186 -> 286 bytes assets/hbm/textures/items/nugget_u233.png | Bin 215 -> 320 bytes assets/hbm/textures/items/nugget_u235.png | Bin 217 -> 320 bytes assets/hbm/textures/items/nugget_u238.png | Bin 219 -> 319 bytes assets/hbm/textures/items/nugget_uranium.png | Bin 244 -> 288 bytes .../textures/items/nugget_uranium_fuel.png | Bin 218 -> 326 bytes assets/hbm/textures/items/pch.png | Bin 0 -> 3416 bytes assets/hbm/textures/items/solinium_core.png | Bin 332 -> 381 bytes .../hbm/textures/models/weapons/grenade.png | Bin 0 -> 231 bytes .../textures/models/weapons/grenade_mk2.png | Bin 0 -> 2139 bytes assets/hbm/textures/models/weapons/pch.png | Bin 0 -> 333 bytes .../blocks/machine/MachineCrystallizer.java | 22 + com/hbm/blocks/machine/SoyuzLauncher.java | 21 +- com/hbm/blocks/network/BlockConveyor.java | 6 - .../grenade/EntityGrenadeBouncyBase.java | 26 +- .../entity/projectile/EntityBulletBase.java | 8 +- com/hbm/handler/ToolAbility.java | 7 +- com/hbm/handler/VersionChecker.java | 50 + com/hbm/handler/guncfg/GunEnergyFactory.java | 2 +- .../handler/nei/CentrifugeRecipeHandler.java | 63 +- .../handler/nei/ChemplantRecipeHandler.java | 18 +- .../nei/CrystallizerRecipeHandler.java | 181 ++ .../handler/nei/ShredderRecipeHandler.java | 17 +- com/hbm/inventory/CentrifugeRecipes.java | 267 +++ com/hbm/inventory/CrystallizerRecipes.java | 37 +- com/hbm/inventory/MachineRecipes.java | 445 +---- com/hbm/inventory/RecipesCommon.java | 50 + com/hbm/inventory/ShredderRecipes.java | 224 +++ .../container/ContainerCrystallizer.java | 11 +- com/hbm/inventory/gui/GUICrystallizer.java | 20 +- com/hbm/items/ModItems.java | 73 + com/hbm/items/special/ItemSyringe.java | 11 + com/hbm/items/tool/WeaponSpecial.java | 36 + com/hbm/lib/Library.java | 14 +- com/hbm/lib/RefStrings.java | 2 +- com/hbm/main/ClientProxy.java | 85 +- com/hbm/main/CraftingManager.java | 27 + com/hbm/main/MainRegistry.java | 76 +- com/hbm/main/ModEventHandler.java | 45 +- com/hbm/main/NEIConfig.java | 2 + com/hbm/main/ResourceManager.java | 6 + .../entity/projectile/RenderGrenade.java | 35 + com/hbm/render/item/ItemRenderShim.java | 15 +- .../satellites/SatelliteHorizons.java | 5 + .../tileentity/machine/TileEntityBarrel.java | 4 + .../machine/TileEntityMachineCentrifuge.java | 6 +- .../TileEntityMachineCrystallizer.java | 194 +- .../machine/TileEntityMachineShredder.java | 6 +- .../machine/TileEntityMachineTurbine.java | 1 + 92 files changed, 3381 insertions(+), 704 deletions(-) create mode 100644 assets/hbm/models/weapons/grenade_frag.obj create mode 100644 assets/hbm/models/weapons/pch.obj create mode 100644 assets/hbm/sounds/tool/vice.ogg create mode 100644 assets/hbm/sounds/weapon/bodysplat.ogg create mode 100644 assets/hbm/textures/blocks/machine_crystallizer_side.png create mode 100644 assets/hbm/textures/blocks/machine_crystallizer_top.png create mode 100644 assets/hbm/textures/items/cbt_device.png create mode 100644 assets/hbm/textures/items/crystal_fluorite.png create mode 100644 assets/hbm/textures/items/crystal_lithium.png create mode 100644 assets/hbm/textures/items/crystal_niter.png create mode 100644 assets/hbm/textures/items/crystal_phosphorus.png create mode 100644 assets/hbm/textures/items/crystal_plutonium.png create mode 100644 assets/hbm/textures/items/crystal_starmetal.png create mode 100644 assets/hbm/textures/items/crystal_trixite.png create mode 100644 assets/hbm/textures/items/pch.png create mode 100644 assets/hbm/textures/models/weapons/grenade.png create mode 100644 assets/hbm/textures/models/weapons/grenade_mk2.png create mode 100644 assets/hbm/textures/models/weapons/pch.png create mode 100644 com/hbm/handler/VersionChecker.java create mode 100644 com/hbm/handler/nei/CrystallizerRecipeHandler.java create mode 100644 com/hbm/inventory/CentrifugeRecipes.java create mode 100644 com/hbm/inventory/ShredderRecipes.java create mode 100644 com/hbm/render/entity/projectile/RenderGrenade.java diff --git a/assets/hbm/lang/de_DE.lang b/assets/hbm/lang/de_DE.lang index d8d5ed1a7..fe54fafb9 100644 --- a/assets/hbm/lang/de_DE.lang +++ b/assets/hbm/lang/de_DE.lang @@ -432,6 +432,8 @@ tile.compact_launcher.name=Kompakt-Startrampe container.compactLauncher=Kompakt-Startrampe tile.launch_table.name=Große Startrampe container.launchTable=Große Startrampe +tile.soyuz_launcher.name=Soyuz-Startplatform +container.soyuzLauncher=Soyuz-Startplatform tile.machine_missile_assembly.name=Raketenmontagestation container.missileAssembly=Raketenmontagestation tile.sat_dock.name=Frachtlandeplattform @@ -501,6 +503,8 @@ tile.machine_controller.name=Reaktorfernsteuerung container.reactorControl=Reaktorfernsteuerung tile.soyuz_capsule.name=Landekapsel container.soyuzCapsule=Landekapsel +tile.machine_crystallizer.name=Erzauflöser +container.crystallizer=Erzauflöser tile.barrel_plastic.name=Sicheres Fass™ tile.barrel_corroded.name=Verrostetes Fass @@ -738,6 +742,28 @@ item.wire_red_copper.name=Roter Kupferdraht item.neutron_reflector.name=Neutronenreflektor item.nugget_beryllium.name=Berylliumnugget +item.crystal_iron.name=Eisenkristalle +item.crystal_gold.name=Goldkristalle +item.crystal_redstone.name=Redstonekristalle +item.crystal_uranium.name=Urankristalle +item.crystal_thorium.name=Thoriumkristalle +item.crystal_plutonium.name=Plutoniumkristalle +item.crystal_titanium.name=Titankristalle +item.crystal_sulfur.name=Schwefelkristalle +item.crystal_niter.name=Salpeterkristalle +item.crystal_copper.name=Kupferkristalle +item.crystal_tungsten.name=Wolframkristalle +item.crystal_aluminium.name=Aluminiumkristalle +item.crystal_fluorite.name=Fluoritkristalle +item.crystal_beryllium.name=Berylliumkristalle +item.crystal_lead.name=Bleikristalle +item.crystal_schrabidium.name=Schrabidiumkristalle +item.crystal_rare.name=Seltenerdenkristalle +item.crystal_phosphorus.name=Phosphorkristalle +item.crystal_lithium.name=Lithiumkristalle +item.crystal_starmetal.name=Sternenmetallkristalle +item.crystal_trixite.name=Trixitkristalle + item.wire_aluminium.name=Aluminiumdraht item.wire_copper.name=Kupferdraht item.wire_gold.name=Golddraht @@ -2200,6 +2226,7 @@ item.shimmer_axe.name=Shimmer Axe item.euphemium_stopper.name=Stopper item.matchstick.name=Streichholz item.remote.name=Kaputte Fernbedienung +item.pch.name=Horse Nut Hammer item.shimmer_head.name=Schwerer Hammerkopf item.shimmer_axe_head.name=Schwerer Axtkopf @@ -2272,6 +2299,7 @@ item.bottle2_korl_special.name=Das erste Korl item.bottle2_fritz_special.name=Die erste Fritz-Kola item.bottle2_sunset.name=Sunset Sarsaparilla item.chocolate_milk.name=Schokomilch +item.cbt_device.name=CBT-Gerät item.cap_nuka.name=Nuka-Cola Kronkorken item.cap_quantum.name=Nuka Cola Quantum Kronkorken item.cap_sparkle.name=S~Cola Kronkorken diff --git a/assets/hbm/lang/en_US.lang b/assets/hbm/lang/en_US.lang index 2046499f5..403707f08 100644 --- a/assets/hbm/lang/en_US.lang +++ b/assets/hbm/lang/en_US.lang @@ -432,6 +432,8 @@ tile.compact_launcher.name=Compact Launch Pad container.compactLauncher=Compact Launch Pad tile.launch_table.name=Large Launch Pad container.launchTable=Large Launch Pad +tile.soyuz_launcher.name=Soyuz Launch Platform +container.soyuzLauncher=Soyuz Launch Platform tile.machine_missile_assembly.name=Missile Assembly Station container.missileAssembly=Missile Assembly Station tile.sat_dock.name=Cargo Landing Pad @@ -501,6 +503,8 @@ tile.machine_controller.name=Reactor Remote Control Block container.reactorControl=Reactor Remote Control Block tile.soyuz_capsule.name=Cargo Landing Capsule container.soyuzCapsule=Cargo Landing Capsule +tile.machine_crystallizer.name=Ore Acidizer +container.crystallizer=Ore Acidizer tile.barrel_plastic.name=Safe Barrel™ tile.barrel_corroded.name=Corroded Barrel @@ -738,6 +742,28 @@ item.wire_red_copper.name=Red Copper Wire item.neutron_reflector.name=Neutron Reflector item.nugget_beryllium.name=Beryllium Nugget +item.crystal_iron.name=Iron Crystals +item.crystal_gold.name=Gold Crystals +item.crystal_redstone.name=Redstone Crystals +item.crystal_uranium.name=Uranium Crystals +item.crystal_thorium.name=Thorium Crystals +item.crystal_plutonium.name=Plutonium Crystals +item.crystal_titanium.name=Titanium Crystals +item.crystal_sulfur.name=Sulfur Crystals +item.crystal_niter.name=Niter Crystals +item.crystal_copper.name=Copper Crystals +item.crystal_tungsten.name=Tungsten Crystals +item.crystal_aluminium.name=Aluminium Crystals +item.crystal_fluorite.name=Fluorite Crystals +item.crystal_beryllium.name=Beryllium Crystals +item.crystal_lead.name=Lead Crystals +item.crystal_schrabidium.name=Schrabidium Crystals +item.crystal_rare.name=Rare Earth Crystals +item.crystal_phosphorus.name=Phosphorus Crystals +item.crystal_lithium.name=Lithium Crystals +item.crystal_starmetal.name=Starmetal Crystals +item.crystal_trixite.name=Trixite Crystals + item.wire_aluminium.name=Aluminium Wire item.wire_copper.name=Copper Wire item.wire_gold.name=Gold Wire @@ -2200,6 +2226,7 @@ item.shimmer_axe.name=Shimmer Axe item.euphemium_stopper.name=Stopper item.matchstick.name=Matchstick item.remote.name=Broken Remote +item.pch.name=Horse Nut Hammer item.shimmer_head.name=Heavy Hammer Head item.shimmer_axe_head.name=Heavy Axe Head @@ -2272,6 +2299,7 @@ item.bottle2_korl_special.name=The First Korl item.bottle2_fritz_special.name=The First Fritz Cola item.bottle2_sunset.name=Sunset Sarsaparilla item.chocolate_milk.name=Chocolate Milk +item.cbt_device.name=CBT Device item.cap_nuka.name=Nuka Cola Bottle Cap item.cap_quantum.name=Nuka Cola Quantum Bottle Cap item.cap_sparkle.name=S~Cola Bottle Cap diff --git a/assets/hbm/models/weapons/grenade_frag.obj b/assets/hbm/models/weapons/grenade_frag.obj new file mode 100644 index 000000000..31fc56c00 --- /dev/null +++ b/assets/hbm/models/weapons/grenade_frag.obj @@ -0,0 +1,1664 @@ +# Blender v2.76 (sub 0) OBJ File: 'grenade_smooth_base.blend' +# www.blender.org +o Sphere_Sphere.002 +v -0.015157 -1.305031 -0.096303 +v 0.253283 0.416750 -0.812925 +v 0.156537 1.093344 -0.502415 +v 0.386773 1.093344 -0.356836 +v 0.625812 0.416750 -0.577372 +v 0.161016 -1.064837 -0.516791 +v 0.253283 -0.419567 -0.812925 +v 0.625812 -0.419567 -0.577372 +v 0.397840 -1.064837 -0.367046 +v 0.513373 1.093344 -0.115642 +v 0.673669 0.517794 -0.526962 +v 0.816348 0.517794 -0.255134 +v 0.502415 1.093344 0.156537 +v 0.090979 -1.305031 0.035025 +v 0.830655 0.416750 -0.187113 +v 0.812925 0.416750 0.253283 +v 0.367046 -1.064837 0.397840 +v 0.577372 -0.419567 0.625812 +v 0.187113 -0.419567 0.830655 +v 0.118951 -1.064837 0.528062 +v 0.830655 -0.419567 -0.187113 +v 0.812925 -0.419567 0.253283 +v 0.356836 1.093344 0.386773 +v 0.528062 -1.064837 -0.118951 +v 0.516791 -1.064837 0.161016 +v 0.577372 0.416750 0.625812 +v 0.096303 -1.305031 -0.015157 +v 0.115642 1.093344 0.513373 +v 0.061279 -1.305031 0.075822 +v 0.187113 0.416750 0.830655 +v -0.253283 -0.419567 0.812925 +v -0.161016 -1.064837 0.516791 +v -0.156537 1.093344 0.502415 +v 0.015157 -1.305031 0.096303 +v -0.253283 0.416750 0.812925 +v -0.625812 -0.419567 0.577372 +v -0.397840 -1.064837 0.367046 +v -0.386773 1.093344 0.356836 +v -0.035025 -1.305031 0.090980 +v -0.625812 0.416750 0.577373 +v -0.830655 -0.419567 0.187113 +v -0.528062 -1.064837 0.118951 +v -0.513373 1.093344 0.115642 +v -0.075822 -1.305031 0.061279 +v -0.830655 0.416750 0.187113 +v -0.812925 -0.419567 -0.253283 +v -0.516791 -1.064837 -0.161016 +v -0.502415 1.093344 -0.156537 +v -0.096303 -1.305031 0.015157 +v -0.812925 0.416750 -0.253283 +v -0.577372 -0.419567 -0.625812 +v -0.367046 -1.064837 -0.397839 +v -0.356836 1.093344 -0.386773 +v -0.090979 -1.305031 -0.035025 +v -0.577372 0.416750 -0.625812 +v -0.187113 -0.419567 -0.830655 +v -0.118951 -1.064837 -0.528062 +v -0.115642 1.093344 -0.513373 +v -0.061279 -1.305031 -0.075822 +v -0.187113 0.416750 -0.830655 +v 0.075822 -1.305031 -0.061279 +v 0.484783 1.052430 -0.352697 +v 0.565636 1.052430 -0.198658 +v 0.157736 1.356032 -0.102703 +v 0.070858 1.356032 -0.136714 +v -0.117509 1.356032 -0.123319 +v 0.064551 1.356032 0.126723 +v 0.157080 1.356032 0.091697 +v 0.035025 -1.305031 -0.090979 +v -0.672237 1.106469 0.099518 +v -0.661279 1.106469 -0.172662 +v -0.991233 1.265939 0.091997 +v -0.954809 1.384980 0.093446 +v -0.503880 1.538507 0.109063 +v -0.678405 1.535840 0.102037 +v -0.980275 1.265939 -0.180183 +v -0.943852 1.384980 -0.178734 +v -0.667447 1.535840 -0.170143 +v -0.492922 1.538507 -0.163116 +v -0.868682 1.468514 -0.177086 +v -0.779976 1.525033 -0.174224 +v -1.005016 1.143014 -0.178684 +v -1.015974 1.143014 0.093496 +v -0.661279 1.106469 -0.172662 +v -0.944349 1.139410 -0.176962 +v -0.944373 1.139467 -0.176959 +v -0.973722 0.362552 -0.185868 +v -0.984680 0.362552 0.086312 +v -0.942765 -0.448797 0.099371 +v -0.931808 -0.448797 -0.172809 +v -1.138628 0.387387 -0.174099 +v -1.149585 0.387387 0.098081 +v -0.955330 1.139467 0.095220 +v -1.107671 -0.423962 0.111140 +v -0.761808 -1.063573 0.118517 +v -0.596903 -1.088408 0.106748 +v -1.096713 -0.423962 -0.161040 +v -0.750850 -1.063573 -0.153663 +v -0.585945 -1.088408 -0.165432 +v -0.672237 1.106469 0.099518 +v -0.973722 0.362552 -0.185868 +v -0.984680 0.362552 0.086312 +v -0.955306 1.139410 0.095218 +v -0.172196 0.945769 -0.675148 +v -0.598098 0.696206 -0.520634 +v -0.600565 0.815693 -0.541050 +v -0.276299 1.005701 -0.658691 +v -0.540166 0.771744 -0.445549 +v -0.215899 0.961752 -0.563190 +v -0.863396 1.011347 -0.207821 +v -0.802553 1.055630 -0.302885 +v -0.742153 1.011681 -0.207384 +v -0.601456 1.455677 -0.169004 +v -0.603122 1.393927 -0.273331 +v -0.542722 1.349978 -0.177831 +v -0.174271 1.415148 -0.457829 +v -0.277879 1.363069 -0.493232 +v -0.217479 1.319120 -0.397731 +v -0.879640 1.468514 0.095094 +v -0.790934 1.525033 0.097956 +v -0.500514 1.336506 0.109076 +v -0.513625 1.538150 0.118138 +v -0.501906 1.538150 -0.172945 +v -0.504203 1.557921 0.109050 +v -0.514030 1.557561 0.118037 +v -0.493245 1.557921 -0.163129 +v -0.502317 1.557561 -0.172877 +v -0.493793 1.590824 -0.163151 +v -0.504751 1.590824 0.109028 +v 0.479715 1.607449 0.148662 +v 0.490673 1.607449 -0.123517 +v 0.480586 1.555132 0.148697 +v 0.494910 1.353131 -0.123469 +v 0.489658 1.555492 0.158445 +v -0.489556 1.336506 -0.163103 +v 0.491544 1.555132 -0.123482 +v 0.491221 1.574546 -0.123495 +v 0.480263 1.574546 0.148684 +v 0.489246 1.574903 0.158513 +v 0.500965 1.574903 -0.132570 +v 0.501370 1.555492 -0.132469 +v 0.483952 1.353131 0.148710 +v 0.319933 0.517794 -0.793197 +v 0.579412 0.517794 -0.629126 +v 0.243486 1.052430 -0.547836 +v 0.390526 1.052430 -0.454861 +v -0.119528 0.517794 -0.846895 +v 0.187222 0.517794 -0.834545 +v -0.063053 1.052430 -0.596183 +v 0.110775 1.052430 -0.589185 +v -0.526962 0.517794 -0.673669 +v -0.255134 0.517794 -0.816348 +v -0.352697 1.052430 -0.484783 +v -0.198658 1.052430 -0.565636 +v -0.793196 0.517794 -0.319933 +v -0.629126 0.517794 -0.579412 +v -0.547836 1.052430 -0.243486 +v -0.454861 1.052430 -0.390526 +v -0.846895 0.517794 0.119528 +v -0.834545 0.517794 -0.187222 +v -0.596183 1.052430 0.063053 +v -0.589185 1.052430 -0.110775 +v -0.673669 0.517794 0.526962 +v -0.816348 0.517794 0.255134 +v -0.484783 1.052430 0.352697 +v -0.565636 1.052430 0.198658 +v -0.319933 0.517794 0.793196 +v -0.579412 0.517794 0.629126 +v -0.243486 1.052430 0.547836 +v -0.390526 1.052430 0.454861 +v 0.119528 0.517794 0.846895 +v -0.187222 0.517794 0.834545 +v 0.063053 1.052430 0.596183 +v -0.110775 1.052430 0.589185 +v 0.526962 0.517794 0.673668 +v 0.255134 0.517794 0.816348 +v 0.352697 1.052430 0.484783 +v 0.198658 1.052430 0.565636 +v 0.793196 0.517794 0.319933 +v 0.629126 0.517794 0.579411 +v 0.547836 1.052430 0.243486 +v 0.454861 1.052430 0.390526 +v 0.846895 0.517794 -0.119528 +v 0.834545 0.517794 0.187222 +v 0.596183 1.052430 -0.063053 +v 0.589185 1.052430 0.110775 +v 0.347741 0.330036 -0.855079 +v 0.347741 -0.332853 -0.855079 +v 0.623301 0.330036 -0.680867 +v 0.623300 -0.332853 -0.680867 +v -0.126450 0.330036 -0.914381 +v -0.126450 -0.332853 -0.914381 +v 0.199299 0.330036 -0.901312 +v 0.199299 -0.332853 -0.901312 +v -0.566750 0.330036 -0.728614 +v -0.566750 -0.332853 -0.728614 +v -0.278118 0.330036 -0.880189 +v -0.278118 -0.332853 -0.880189 +v -0.855150 0.330036 -0.347564 +v -0.855150 -0.332853 -0.347564 +v -0.680995 0.330036 -0.623160 +v -0.680995 -0.332853 -0.623160 +v -0.914355 0.330036 0.126639 +v -0.914355 -0.332853 0.126639 +v -0.901353 0.330036 -0.199113 +v -0.901353 -0.332853 -0.199113 +v -0.728497 0.330036 0.566900 +v -0.728497 -0.332853 0.566900 +v -0.880132 0.330036 0.278300 +v -0.880132 -0.332853 0.278300 +v -0.347388 0.330036 0.855222 +v -0.347388 -0.332853 0.855222 +v -0.623020 0.330036 0.681124 +v -0.623020 -0.332853 0.681124 +v 0.126827 0.330036 0.914329 +v 0.126827 -0.332853 0.914329 +v -0.198927 0.330036 0.901394 +v -0.198927 -0.332853 0.901394 +v 0.567050 0.330036 0.728380 +v 0.567050 -0.332853 0.728380 +v 0.278482 0.330036 0.880075 +v 0.278482 -0.332853 0.880075 +v 0.855294 0.330036 0.347212 +v 0.855294 -0.332853 0.347212 +v 0.681252 0.330036 0.622879 +v 0.681252 -0.332853 0.622879 +v 0.914303 0.330036 -0.127016 +v 0.914303 -0.332853 -0.127016 +v 0.901435 0.330036 0.198741 +v 0.901435 -0.332853 0.198741 +v 0.728263 0.330036 -0.567200 +v 0.728263 -0.332853 -0.567200 +v 0.880017 0.330036 -0.278663 +v 0.880017 -0.332853 -0.278663 +v 0.829860 -0.517895 0.187033 +v 0.842210 -0.517895 -0.119717 +v 0.591498 -1.052531 -0.063241 +v 0.584499 -1.052531 0.110586 +v 0.625163 -0.517895 0.576906 +v 0.789233 -0.517895 0.317427 +v 0.543872 -1.052531 0.240980 +v 0.450898 -1.052531 0.388020 +v 0.252955 -0.517895 0.812197 +v 0.524783 -0.517895 0.669517 +v 0.350517 -1.052531 0.480631 +v 0.196479 -1.052531 0.561484 +v -0.187033 -0.517895 0.829860 +v 0.119717 -0.517895 0.842210 +v 0.063241 -1.052531 0.591498 +v -0.110586 -1.052531 0.584499 +v -0.576906 -0.517895 0.625163 +v -0.317427 -0.517895 0.789233 +v -0.240980 -1.052531 0.543872 +v -0.388020 -1.052531 0.450898 +v -0.812197 -0.517895 0.252955 +v -0.669517 -0.517895 0.524782 +v -0.480631 -1.052531 0.350517 +v -0.561484 -1.052531 0.196479 +v -0.829860 -0.517895 -0.187033 +v -0.842210 -0.517895 0.119717 +v -0.591497 -1.052531 0.063241 +v -0.584499 -1.052531 -0.110586 +v -0.625163 -0.517895 -0.576906 +v -0.789233 -0.517895 -0.317427 +v -0.543872 -1.052531 -0.240980 +v -0.450898 -1.052531 -0.388020 +v -0.252954 -0.517895 -0.812197 +v -0.524782 -0.517895 -0.669517 +v -0.350517 -1.052531 -0.480631 +v -0.196479 -1.052531 -0.561484 +v 0.187033 -0.517895 -0.829860 +v -0.119717 -0.517895 -0.842210 +v -0.063241 -1.052531 -0.591497 +v 0.110586 -1.052531 -0.584499 +v 0.576906 -0.517895 -0.625163 +v 0.317427 -0.517895 -0.789233 +v 0.240980 -1.052531 -0.543872 +v 0.388020 -1.052531 -0.450898 +v 0.812196 -0.517895 -0.252954 +v 0.669517 -0.517895 -0.524782 +v 0.480631 -1.052531 -0.350517 +v 0.561484 -1.052531 -0.196479 +v -0.175000 1.393109 -0.000000 +v -0.303109 1.265000 -0.000000 +v -0.350000 1.090000 -0.000000 +v -0.123744 1.393109 -0.123744 +v -0.214330 1.265000 -0.214330 +v -0.247487 1.090000 -0.247487 +v -0.000000 1.393109 -0.175000 +v -0.000000 1.265000 -0.303109 +v -0.000000 1.090000 -0.350000 +v -0.000000 1.440000 0.000000 +v 0.123743 1.393109 -0.123744 +v 0.214330 1.265000 -0.214330 +v 0.247487 1.090000 -0.247487 +v 0.175000 1.393109 -0.000000 +v 0.303109 1.265000 -0.000000 +v 0.350000 1.090000 -0.000000 +v 0.123743 1.393109 0.123744 +v 0.214330 1.265000 0.214330 +v 0.247487 1.090000 0.247487 +v -0.000000 1.393109 0.175000 +v -0.000000 1.265000 0.303109 +v -0.000000 1.090000 0.350000 +v -0.123744 1.393109 0.123744 +v -0.214330 1.265000 0.214330 +v -0.247487 1.090000 0.247487 +vt 0.321713 0.865051 +vt 0.272866 0.866378 +vt 0.272866 0.815293 +vt 0.003230 0.610962 +vt 0.121164 0.406695 +vt 0.325431 0.524629 +vt 0.500000 0.400000 +vt 0.483333 0.383333 +vt 0.483333 0.283333 +vt 0.500000 0.266667 +vt 0.433333 0.283333 +vt 0.400000 0.383333 +vt 0.350000 0.383333 +vt 0.350000 0.283333 +vt 0.766745 0.871688 +vt 0.767246 0.884932 +vt 0.719817 0.852168 +vt 0.830319 0.882049 +vt 0.830820 0.895292 +vt 0.830051 0.868798 +vt 0.767186 0.882828 +vt 0.766919 0.869578 +vt 0.000225 0.954649 +vt 0.027608 0.951618 +vt 0.027608 0.996508 +vt 0.721737 0.918287 +vt 0.721470 0.905037 +vt 0.221630 0.809098 +vt 0.221632 0.815269 +vt 0.036831 0.815269 +vt 0.035033 0.879478 +vt 0.224869 0.879505 +vt 0.223059 0.882787 +vt 0.221631 0.866355 +vt 0.036830 0.866354 +vt 0.220073 0.798888 +vt 0.223383 0.802171 +vt 0.033533 0.802143 +vt 0.030659 0.866354 +vt 0.028884 0.868112 +vt 0.028884 0.813510 +vt 0.221630 0.872526 +vt 0.036829 0.872526 +vt 0.030659 0.815268 +vt 0.025243 0.868128 +vt 0.025243 0.813494 +vt 0.223369 0.805842 +vt 0.036829 0.809097 +vt 0.224856 0.875834 +vt 0.929599 0.888360 +vt 0.947552 0.964500 +vt 0.931941 0.968177 +vt 0.035019 0.875808 +vt 0.894890 0.895193 +vt 0.913962 0.891962 +vt 0.227803 0.815269 +vt 0.229562 0.813495 +vt 0.229562 0.868129 +vt 0.227803 0.866355 +vt 0.233203 0.868113 +vt 0.234978 0.815270 +vt 0.234978 0.866355 +vt 0.923524 0.776627 +vt 0.939369 0.778971 +vt 0.927922 0.856251 +vt 0.433333 0.383333 +vt 0.566667 0.283333 +vt 0.566667 0.383333 +vt 0.516667 0.383333 +vt 0.650000 0.383333 +vt 0.600000 0.383333 +vt 0.600000 0.283333 +vt 0.733333 0.283333 +vt 0.733333 0.383333 +vt 0.683333 0.383333 +vt 0.816667 0.283333 +vt 0.816667 0.383333 +vt 0.766667 0.383333 +vt 0.900000 0.383333 +vt 0.850000 0.383333 +vt 0.850000 0.283333 +vt 0.983333 0.283333 +vt 0.983333 0.383333 +vt 0.933333 0.383333 +vt 0.066667 0.283333 +vt 0.066667 0.383333 +vt 0.016667 0.383333 +vt 0.150000 0.383333 +vt 0.100000 0.383333 +vt 0.100000 0.283333 +vt 0.233333 0.383333 +vt 0.183333 0.383333 +vt 0.183333 0.283333 +vt 0.316667 0.383333 +vt 0.266667 0.383333 +vt 0.266667 0.283333 +vt 0.483333 0.250000 +vt 0.433333 0.250000 +vt 0.433333 0.150000 +vt 0.566667 0.250000 +vt 0.516667 0.250000 +vt 0.516667 0.150000 +vt 0.650000 0.250000 +vt 0.600000 0.250000 +vt 0.600000 0.150000 +vt 0.733333 0.250000 +vt 0.683333 0.250000 +vt 0.683333 0.150000 +vt 0.816667 0.150000 +vt 0.816667 0.250000 +vt 0.766667 0.250000 +vt 0.900000 0.250000 +vt 0.850000 0.250000 +vt 0.850000 0.150000 +vt 0.983333 0.250000 +vt 0.933333 0.250000 +vt 0.933333 0.150000 +vt 0.066667 0.250000 +vt 0.016667 0.250000 +vt 0.016667 0.150000 +vt 0.150000 0.250000 +vt 0.100000 0.250000 +vt 0.100000 0.150000 +vt 0.233333 0.250000 +vt 0.183333 0.250000 +vt 0.183333 0.150000 +vt 0.316667 0.250000 +vt 0.266667 0.250000 +vt 0.266667 0.150000 +vt 0.400000 0.250000 +vt 0.350000 0.250000 +vt 0.350000 0.150000 +vt 0.316667 0.016667 +vt 0.316667 0.116667 +vt 0.266667 0.116667 +vt 0.233333 0.116667 +vt 0.183333 0.116667 +vt 0.183333 0.016667 +vt 0.150000 0.016667 +vt 0.150000 0.116667 +vt 0.100000 0.116667 +vt 0.066667 0.016667 +vt 0.066667 0.116667 +vt 0.016667 0.116667 +vt 0.983333 0.116667 +vt 0.933333 0.116667 +vt 0.933333 0.016667 +vt 0.900000 0.116667 +vt 0.850000 0.116667 +vt 0.850000 0.016667 +vt 0.816667 0.016667 +vt 0.816667 0.116667 +vt 0.766667 0.116667 +vt 0.733333 0.116667 +vt 0.683333 0.116667 +vt 0.683333 0.016667 +vt 0.650000 0.116667 +vt 0.600000 0.116667 +vt 0.600000 0.016667 +vt 0.566667 0.016667 +vt 0.566667 0.116667 +vt 0.516667 0.116667 +vt 0.483333 0.116667 +vt 0.433333 0.116667 +vt 0.433333 0.016667 +vt 0.400000 0.116667 +vt 0.350000 0.116667 +vt 0.350000 0.016667 +vt 0.416667 0.400000 +vt 0.416667 0.266667 +vt 0.400000 0.283333 +vt 0.333333 0.400000 +vt 0.333333 0.266667 +vt 0.316667 0.283333 +vt 0.250000 0.400000 +vt 0.250000 0.266667 +vt 0.233333 0.283333 +vt 0.166667 0.400000 +vt 0.166667 0.266667 +vt 0.150000 0.283333 +vt 0.083333 0.400000 +vt 0.083333 0.266667 +vt -0.000000 0.400000 +vt 0.000000 0.266667 +vt 0.016667 0.283333 +vt 1.000000 0.400000 +vt 0.316667 0.150000 +vt 0.400000 0.150000 +vt 0.483333 0.150000 +vt 0.500000 0.133333 +vt 0.333333 0.133333 +vt 0.416667 0.133333 +vt 0.233333 0.150000 +vt 0.833333 0.400000 +vt 0.833333 0.266667 +vt 0.916667 0.400000 +vt 0.900000 0.283333 +vt 0.916667 0.266667 +vt 0.933333 0.283333 +vt 1.000000 0.266667 +vt 0.750000 0.400000 +vt 0.750000 0.266667 +vt 0.766667 0.283333 +vt 0.666667 0.400000 +vt 0.666667 0.266667 +vt 0.683333 0.283333 +vt 0.650000 0.283333 +vt 0.583333 0.400000 +vt 0.583333 0.266667 +vt 0.516667 0.283333 +vt 0.650000 0.150000 +vt 0.566667 0.150000 +vt 0.583333 0.133333 +vt 0.666667 0.133333 +vt 0.733333 0.150000 +vt 0.766667 0.150000 +vt 0.900000 0.150000 +vt 0.983333 0.150000 +vt 0.066667 0.150000 +vt 0.750000 0.133333 +vt 0.833333 0.133333 +vt 0.916667 0.133333 +vt 1.000000 0.133333 +vt 0.083333 0.133333 +vt 0.150000 0.150000 +vt 0.166667 0.133333 +vt 0.250000 0.133333 +vt 0.333333 0.000000 +vt 0.416667 -0.000000 +vt 0.400000 0.016667 +vt 0.500000 0.000000 +vt 0.483333 0.016667 +vt 0.583333 -0.000000 +vt 0.666667 -0.000000 +vt 0.650000 0.016667 +vt 0.516667 0.016667 +vt 0.750000 0.000000 +vt 0.733333 0.016667 +vt 0.833333 -0.000000 +vt 0.766667 0.016667 +vt 0.000000 0.133333 +vt 0.916667 0.000000 +vt 0.900000 0.016667 +vt 1.000000 -0.000000 +vt 0.983333 0.016667 +vt 0.083333 -0.000000 +vt 0.016667 0.016667 +vt 0.000000 0.000000 +vt 0.166667 0.000000 +vt 0.250000 0.000000 +vt 0.233333 0.016667 +vt 0.100000 0.016667 +vt 0.266667 0.016667 +vt 0.890611 0.854835 +vt 0.892843 0.882151 +vt 0.891586 0.892476 +vt 0.892231 0.865077 +vt 0.892824 0.852392 +vt 0.912077 0.853912 +vt 0.893154 0.882642 +vt 0.926547 0.874884 +vt 0.903288 0.772477 +vt 0.023484 0.866354 +vt 0.735650 0.779825 +vt 0.715669 0.780707 +vt 0.715864 0.768944 +vt 0.736394 0.779449 +vt 0.756030 0.778583 +vt 0.756045 0.778926 +vt 0.830550 0.882042 +vt 0.830283 0.868792 +vt 0.869536 0.868030 +vt 0.918571 0.885092 +vt 0.911235 0.890147 +vt 0.923892 0.866319 +vt 0.893319 0.882281 +vt 0.918074 0.860342 +vt 0.321713 0.813965 +vt 0.325431 0.610962 +vt 0.207497 0.728896 +vt 0.282264 0.685729 +vt 0.121164 0.728896 +vt 0.046397 0.685729 +vt 0.003230 0.524628 +vt 0.046397 0.449861 +vt 0.207497 0.406695 +vt 0.282264 0.449862 +vt 0.719316 0.838924 +vt 0.829784 0.855548 +vt 0.000225 0.999539 +vt 0.038258 0.882786 +vt 0.035271 0.798887 +vt 0.033518 0.805814 +vt 0.912104 0.974033 +vt 0.233203 0.813511 +vt 0.925922 0.869951 +vt 0.023484 0.815269 +vt 0.735846 0.768063 +vt 0.736409 0.779792 +vt 0.869804 0.881281 +vt 0.923921 0.878693 +vt 0.901504 0.891795 +vt 0.900551 0.854944 +vt 0.910378 0.855853 +vt 0.520066 0.586264 +vt 0.485718 0.545207 +vt 0.523226 0.548717 +vt 0.790810 0.883398 +vt 0.790543 0.870148 +vt 0.171471 0.882836 +vt 0.172153 0.935364 +vt 0.024166 0.935364 +vt 0.281324 0.952413 +vt 0.281324 0.997303 +vt 0.147436 0.995430 +vt 0.755434 0.883793 +vt 0.419486 0.826440 +vt 0.436995 0.836066 +vt 0.439032 0.900933 +vt 0.456965 0.835439 +vt 0.404653 0.902012 +vt 0.402616 0.837146 +vt 0.492856 0.783050 +vt 0.492856 0.803030 +vt 0.503027 0.820228 +vt 0.447166 0.853264 +vt 0.419486 0.806460 +vt 0.475347 0.773424 +vt 0.566226 0.826440 +vt 0.548717 0.836066 +vt 0.538547 0.853264 +vt 0.482685 0.820228 +vt 0.510365 0.773424 +vt 0.566226 0.806460 +vt 0.563550 0.911638 +vt 0.546680 0.900933 +vt 0.526709 0.900306 +vt 0.528747 0.835439 +vt 0.583096 0.837146 +vt 0.581059 0.902012 +vt 0.487602 0.950339 +vt 0.488856 0.930398 +vt 0.479784 0.912596 +vt 0.562296 0.931579 +vt 0.504472 0.961044 +vt 0.467467 0.954694 +vt 0.467467 0.999584 +vt 0.448947 0.999357 +vt 0.484806 0.954811 +vt 0.484806 0.999701 +vt 0.503448 0.954885 +vt 0.503448 0.999775 +vt 0.407770 0.998944 +vt 0.407770 0.954054 +vt 0.428431 0.954465 +vt 0.428431 0.999355 +vt 0.448948 0.954468 +vt 0.794911 0.586838 +vt 0.820944 0.608785 +vt 0.801234 0.655843 +vt 0.747699 0.606176 +vt 0.768439 0.725680 +vt 0.874210 0.653109 +vt 0.854872 0.605896 +vt 0.923878 0.599573 +vt 0.993715 0.632368 +vt 0.876819 0.579863 +vt 0.921143 0.526597 +vt 0.993715 0.500405 +vt 0.873930 0.545936 +vt 0.867607 0.476930 +vt 0.847897 0.523988 +vt 0.813970 0.526877 +vt 0.794632 0.479665 +vt 0.768439 0.407093 +vt 0.792022 0.552910 +vt 0.744964 0.533200 +vt 0.675127 0.500405 +vt 0.834421 0.566387 +vt 0.664794 0.522393 +vt 0.529145 0.561228 +vt 0.511992 0.540683 +vt 0.546511 0.403773 +vt 0.621597 0.447350 +vt 0.498251 0.539401 +vt 0.459602 0.403548 +vt 0.477780 0.556531 +vt 0.340570 0.522122 +vt 0.384193 0.446857 +vt 0.476574 0.570325 +vt 0.482424 0.582884 +vt 0.383962 0.684503 +vt 0.340481 0.609133 +vt 0.493758 0.590845 +vt 0.507538 0.592079 +vt 0.546273 0.727891 +vt 0.459317 0.727975 +vt 0.527982 0.574979 +vt 0.664794 0.609105 +vt 0.621460 0.684337 +vt 0.532235 0.954885 +vt 0.532235 0.999775 +vt 0.023484 0.882836 +vt 0.147436 0.950540 +vt 0.755167 0.870543 +vt 0.422162 0.911638 +vt 0.459003 0.900305 +vt 0.537609 0.883130 +vt 0.675127 0.632368 +vt 0.900402 0.725680 +vt 0.900403 0.407093 +vn 0.996600 0.072000 0.040100 +vn 0.000000 1.000000 0.000000 +vn -0.290700 0.364500 -0.884700 +vn 0.525300 -0.184300 -0.830700 +vn 0.803100 0.421100 -0.421500 +vn 0.079200 0.054300 0.995400 +vn 0.074200 0.019900 0.997000 +vn -0.074200 -0.019900 -0.997000 +vn -0.149300 -0.988800 -0.006000 +vn -0.079200 -0.054300 -0.995400 +vn -0.040200 -0.000000 0.999200 +vn 0.018100 -0.999600 -0.020300 +vn -0.016900 0.999900 -0.000700 +vn 0.016400 -0.999600 0.021600 +vn -0.038000 0.999300 -0.001500 +vn 0.040200 0.000000 -0.999200 +vn -0.999100 -0.016700 -0.040200 +vn -0.999000 -0.021000 -0.040200 +vn -0.016000 0.999600 -0.021700 +vn 0.040400 -0.004400 -0.999200 +vn 0.040200 0.000600 -0.999200 +vn -0.016400 0.999600 -0.021700 +vn -0.040100 -0.004400 0.999200 +vn 0.040700 -0.029100 -0.998700 +vn -0.038100 0.999300 -0.001500 +vn 0.999100 0.016700 0.040200 +vn 0.999000 0.021100 0.040200 +vn 0.038000 -0.999300 0.001500 +vn -0.040200 -0.000600 0.999200 +vn 0.484700 0.421100 -0.766600 +vn 0.036500 0.421100 -0.906300 +vn -0.421500 0.421100 -0.803100 +vn -0.766600 0.421100 -0.484700 +vn -0.906300 0.421100 -0.036500 +vn -0.803100 0.421100 0.421500 +vn -0.484700 0.421100 0.766600 +vn -0.036500 0.421100 0.906300 +vn 0.421500 0.421100 0.803100 +vn 0.766600 0.421100 0.484700 +vn 0.906300 0.421100 0.036500 +vn 0.534400 -0.000000 -0.845200 +vn 0.040100 0.000000 -0.999200 +vn -0.464900 0.000000 -0.885300 +vn -0.845400 0.000000 -0.534200 +vn -0.999200 0.000000 -0.039900 +vn -0.885200 0.000000 0.465100 +vn -0.534000 0.000000 0.845500 +vn -0.039700 0.000000 0.999200 +vn 0.465300 0.000000 0.885100 +vn 0.845600 0.000000 0.533900 +vn 0.999200 -0.000000 0.039500 +vn 0.885100 0.000000 -0.465500 +vn 0.906300 -0.421100 0.036500 +vn 0.766600 -0.421100 0.484700 +vn 0.421500 -0.421100 0.803100 +vn -0.036500 -0.421100 0.906300 +vn -0.484700 -0.421100 0.766600 +vn -0.803100 -0.421100 0.421500 +vn -0.906300 -0.421100 -0.036500 +vn -0.766600 -0.421100 -0.484700 +vn -0.421500 -0.421100 -0.803100 +vn 0.036500 -0.421100 -0.906300 +vn 0.484700 -0.421100 -0.766600 +vn 0.803100 -0.421100 -0.421500 +vn 0.232100 0.900800 -0.367100 +vn 0.923900 0.364500 -0.116700 +vn 0.190600 0.364500 -0.911500 +vn 0.858500 0.364500 0.360800 +vn 0.620800 0.364500 -0.694100 +vn 0.563000 0.364500 0.741700 +vn 0.884700 0.364500 -0.290700 +vn 0.870300 -0.184300 -0.456800 +vn 0.982100 -0.184300 0.039500 +vn 0.116800 0.364500 0.923900 +vn 0.911500 0.364500 0.190600 +vn -0.360800 0.364500 0.858500 +vn 0.694100 0.364500 0.620800 +vn -0.741700 0.364500 0.563000 +vn 0.290700 0.364500 0.884700 +vn -0.017500 0.900800 0.433900 +vn 0.201800 0.900800 0.384500 +vn 0.367100 0.900800 0.232100 +vn 0.433900 0.900800 0.017500 +vn 0.384500 0.900800 -0.201800 +vn 0.628600 0.703900 -0.330600 +vn 0.379200 0.704600 -0.599800 +vn 0.709700 0.704000 0.028000 +vn 0.583500 0.000000 -0.812100 +vn 0.880200 0.000000 0.474600 +vn 0.098800 0.000000 -0.995100 +vn 0.999700 -0.000000 -0.024300 +vn -0.407500 0.000000 -0.913200 +vn 0.379200 -0.704600 -0.599800 +vn 0.627800 -0.705200 -0.329500 +vn 0.524600 0.000000 0.851300 +vn 0.911600 0.000000 -0.411200 +vn 0.600500 0.704100 0.379100 +vn 0.830700 -0.184300 0.525300 +vn 0.456800 -0.184300 0.870300 +vn -0.039500 -0.184300 0.982100 +vn -0.620800 0.364500 0.694100 +vn -0.858500 0.364500 -0.360800 +vn -0.190600 0.364500 0.911500 +vn -0.923900 0.364500 0.116700 +vn -0.525300 -0.184300 0.830700 +vn -0.232100 0.900800 0.367100 +vn -0.384500 0.900800 0.201800 +vn -0.563000 0.364500 -0.741700 +vn -0.884700 0.364500 0.290700 +vn -0.116700 0.364500 -0.923900 +vn -0.911500 0.364500 -0.190600 +vn 0.360800 0.364500 -0.858500 +vn -0.694100 0.364500 -0.620800 +vn 0.741700 0.364500 -0.563000 +vn 0.017500 0.900800 -0.433900 +vn -0.201800 0.900800 -0.384500 +vn -0.367100 0.900800 -0.232100 +vn -0.433900 0.900800 -0.017500 +vn -0.870300 -0.184300 0.456800 +vn -0.982100 -0.184300 -0.039500 +vn -0.830700 -0.184300 -0.525300 +vn -0.456800 -0.184300 -0.870300 +vn 0.039500 -0.184300 -0.982100 +vn 0.028400 0.704600 -0.709100 +vn 0.853400 0.000000 -0.521200 +vn -0.330000 0.704500 -0.628300 +vn -0.600000 0.704400 -0.379200 +vn -0.025600 0.000000 -0.999700 +vn -0.994700 0.000000 -0.102800 +vn 0.478100 0.000000 -0.878300 +vn -0.809800 0.000000 -0.586700 +vn 0.028400 -0.704600 -0.709100 +vn -0.330000 -0.704500 -0.628300 +vn -0.912600 0.000000 0.408700 +vn -0.522400 0.000000 -0.852700 +vn -0.585600 -0.000000 0.810600 +vn -0.879000 0.000000 -0.476900 +vn -0.101500 0.000000 0.994800 +vn -0.999600 0.000000 0.026900 +vn 0.410000 0.000000 0.912100 +vn -0.852000 0.000000 0.523500 +vn 0.811300 0.000000 0.584600 +vn -0.475800 0.000000 0.879600 +vn -0.028200 0.704200 0.709500 +vn -0.379100 0.704200 0.600200 +vn -0.628400 0.704300 0.330200 +vn -0.709300 0.704400 -0.028300 +vn -0.600000 -0.704400 -0.379200 +vn -0.709300 -0.704400 -0.028300 +vn -0.628400 -0.704300 0.330200 +vn -0.379100 -0.704200 0.600300 +vn -0.028200 -0.704200 0.709500 +vn 0.995000 0.000000 0.100100 +vn 0.028200 0.000000 0.999600 +vn 0.330400 0.704100 0.628500 +vn 0.330400 -0.704100 0.628500 +vn 0.600500 -0.704100 0.379100 +vn 0.709700 -0.704000 0.028000 +vn 0.163200 -0.982900 -0.085700 +vn 0.876300 0.143500 -0.459900 +vn 0.871400 -0.375200 0.316100 +vn 0.234800 -0.375200 -0.896700 +vn 0.528900 0.143500 -0.836500 +vn 0.098500 -0.982900 -0.155800 +vn 0.007400 -0.982900 -0.184200 +vn 0.039800 0.143500 -0.988900 +vn -0.085700 -0.982900 -0.163200 +vn -0.459900 0.143500 -0.876300 +vn 0.316100 -0.375200 -0.871400 +vn -0.659200 -0.375200 -0.651700 +vn 0.709400 -0.375200 -0.596600 +vn -0.245000 -0.375200 -0.894000 +vn -0.155800 -0.982900 -0.098500 +vn -0.184200 -0.982900 -0.007400 +vn -0.988900 0.143500 -0.039800 +vn -0.596600 -0.375200 -0.709400 +vn -0.836500 0.143500 -0.528900 +vn -0.161900 -0.375200 -0.912700 +vn -0.896700 -0.375200 -0.234800 +vn -0.894000 -0.375200 0.245000 +vn -0.876300 0.143500 0.459900 +vn -0.528900 0.143500 0.836500 +vn -0.039800 0.143500 0.988900 +vn -0.163200 -0.982900 0.085700 +vn -0.098500 -0.982900 0.155800 +vn -0.007400 -0.982900 0.184200 +vn -0.709400 -0.375200 0.596600 +vn 0.245000 -0.375200 0.894000 +vn -0.912700 -0.375200 0.162000 +vn -0.234800 -0.375200 0.896700 +vn -0.871400 -0.375200 -0.316100 +vn -0.651700 -0.375200 0.659200 +vn 0.459900 0.143500 0.876300 +vn 0.836500 0.143500 0.528900 +vn 0.155800 -0.982900 0.098500 +vn 0.085700 -0.982900 0.163200 +vn -0.316100 -0.375200 0.871400 +vn 0.659200 -0.375200 0.651700 +vn 0.896700 -0.375200 0.234800 +vn 0.162000 -0.375200 0.912700 +vn 0.988900 0.143500 0.039800 +vn 0.184200 -0.982900 0.007400 +vn 0.596600 -0.375200 0.709400 +vn 0.894000 -0.375200 -0.245000 +vn 0.651700 -0.375200 -0.659200 +vn 0.912700 -0.375200 -0.162000 +vn 0.018600 0.009900 -0.999800 +vn 0.070200 -0.006400 0.997500 +vn -0.098300 0.032100 0.994600 +vn 0.046900 0.006500 -0.998900 +vn -0.040200 0.027200 0.998800 +vn -0.082000 -0.996600 -0.003300 +vn -0.080900 -0.996700 -0.002000 +vn 0.000000 0.000000 1.000000 +vn 0.921100 -0.387500 0.037100 +vn -0.021700 -0.000200 0.999800 +vn 0.029300 0.004600 -0.999600 +vn 0.016000 -0.999600 0.021700 +vn 0.017700 -0.999600 -0.020300 +vn -0.018100 0.999600 0.020300 +vn 0.040100 0.004300 -0.999200 +vn -0.017700 0.999600 0.020400 +vn -0.040400 0.004400 0.999200 +vn 0.040200 -0.027200 -0.998800 +vn 0.116700 0.364500 0.923900 +vn 0.627800 0.705200 -0.329500 +vn 0.379200 0.704700 -0.599700 +vn 0.708400 0.705200 0.028500 +vn 0.379200 -0.704700 -0.599700 +vn 0.628600 -0.703900 -0.330600 +vn 0.599300 0.705100 0.379000 +vn 0.028500 0.704800 -0.708900 +vn -0.329700 0.704800 -0.628100 +vn -0.599500 0.704900 -0.379100 +vn 0.028500 -0.704800 -0.708900 +vn -0.329700 -0.704800 -0.628100 +vn -0.028500 0.705000 0.708600 +vn -0.379000 0.705000 0.599400 +vn -0.628000 0.705000 0.329600 +vn -0.708700 0.704900 -0.028500 +vn -0.599500 -0.704900 -0.379100 +vn -0.708700 -0.704900 -0.028500 +vn -0.628000 -0.705000 0.329600 +vn -0.379000 -0.705000 0.599400 +vn -0.028500 -0.705000 0.708600 +vn 0.329600 0.705100 0.627900 +vn 0.329600 -0.705100 0.627900 +vn 0.599300 -0.705100 0.379000 +vn 0.708500 -0.705200 0.028500 +vn -0.912700 -0.375200 0.161900 +vn 0.161900 -0.375200 0.912700 +vn 0.912700 -0.375200 -0.161900 +vn 0.999100 0.016600 0.040200 +vn -0.070200 0.006400 -0.997500 +vn -0.018600 -0.009900 0.999800 +vn -0.046800 -0.006500 0.998900 +vn 0.098300 -0.032100 -0.994600 +vn 0.097200 -0.030800 -0.994800 +vn -0.040700 0.029100 0.998700 +vn -0.035600 -0.006400 0.999300 +vn -0.029300 -0.004600 0.999600 +vn -0.025700 -0.004300 0.999700 +vn -0.015900 0.015400 0.999800 +vn 0.015900 -0.015400 -0.999800 +vn 0.021700 0.000200 -0.999800 +vn 0.035600 0.006400 -0.999300 +vn 0.025700 0.004300 -0.999700 +vn 0.261400 -0.959900 0.100900 +vn -0.261400 -0.959900 -0.100900 +vn 0.100900 -0.959900 -0.261400 +vn 0.694900 0.036300 0.718200 +vn 0.961800 0.270900 0.038700 +vn 0.962000 0.270200 0.038700 +vn -0.981900 0.185100 -0.039500 +vn -0.981900 0.185400 -0.039500 +vn -0.997300 0.062100 -0.040100 +vn -0.997400 0.060200 -0.040200 +vn -0.962000 -0.270200 -0.038700 +vn -0.878900 -0.475700 -0.035400 +vn 0.878900 0.475700 0.035400 +vn -0.264100 -0.928700 -0.260300 +vn -0.448700 0.508300 -0.735000 +vn -0.605700 0.416300 -0.678100 +vn 0.534400 -0.207100 0.819500 +vn 0.377400 -0.299100 0.876400 +vn -0.867100 -0.212500 0.450600 +vn -0.350900 0.392100 -0.850300 +vn 0.632200 -0.323200 0.704200 +vn -0.271800 0.797400 0.538800 +vn -0.447500 0.228400 -0.864600 +vn 0.535600 -0.487000 0.689900 +vn 0.699100 0.705300 -0.117600 +vn -0.605000 0.243300 -0.758200 +vn 0.378200 -0.472100 0.796300 +vn 0.703800 -0.361500 -0.611500 +vn -0.646300 0.762700 -0.026000 +vn -0.645000 0.763700 -0.026000 +vn -0.869200 0.493300 -0.035000 +vn -0.325900 0.945300 -0.013100 +vn -0.324300 0.945900 -0.013100 +vn -0.055500 0.998500 -0.002200 +vn -0.055400 0.998500 -0.002200 +vn -0.968800 0.244700 -0.039000 +vn -0.968600 0.245400 -0.039000 +vn -0.870000 0.491700 -0.035000 +vn -0.545200 0.838300 0.000000 +vn -0.385500 0.838300 -0.385500 +vn -0.622500 0.474400 -0.622500 +vn -0.880300 0.474400 0.000000 +vn -0.683000 0.258800 -0.683000 +vn 0.000000 0.474400 -0.880300 +vn 0.000000 0.838300 -0.545200 +vn 0.622500 0.474400 -0.622500 +vn 0.683000 0.258800 -0.683000 +vn 0.385500 0.838300 -0.385500 +vn 0.880300 0.474400 0.000000 +vn 0.965900 0.258800 0.000000 +vn 0.545200 0.838300 0.000000 +vn 0.622500 0.474400 0.622500 +vn 0.385500 0.838300 0.385500 +vn -0.000000 0.838300 0.545200 +vn -0.000000 0.474400 0.880300 +vn -0.000000 0.258800 0.965900 +vn -0.385500 0.838300 0.385500 +vn -0.622500 0.474400 0.622500 +vn -0.683000 0.258800 0.683000 +vn 0.350700 -0.878800 -0.323500 +vn 0.218100 -0.959900 -0.176000 +vn -0.043400 -0.959900 -0.276900 +vn -0.104900 -0.878800 -0.465500 +vn 0.141900 -0.878800 -0.455500 +vn -0.176000 -0.959900 -0.218100 +vn -0.323500 -0.878800 -0.350700 +vn -0.276900 -0.959900 0.043400 +vn -0.465500 -0.878800 0.104900 +vn -0.455500 -0.878800 -0.141900 +vn -0.218100 -0.959900 0.176000 +vn -0.100900 -0.959900 0.261400 +vn -0.141900 -0.878800 0.455500 +vn -0.350700 -0.878800 0.323500 +vn 0.043400 -0.959900 0.276900 +vn 0.176000 -0.959900 0.218100 +vn 0.323500 -0.878800 0.350700 +vn 0.104900 -0.878800 0.465500 +vn 0.276900 -0.959900 -0.043400 +vn 0.465500 -0.878800 -0.104900 +vn 0.455500 -0.878800 0.141900 +vn -0.015300 0.999900 -0.000600 +vn 0.688700 0.036000 0.724100 +vn -0.961800 -0.270900 -0.038700 +vn -0.965900 0.258800 0.000000 +vn -0.000000 0.258800 -0.965900 +vn 0.683000 0.258800 0.683000 +s off +f 10/1/1 133/2/1 142/3/1 +f 13/4/2 3/5/2 48/6/2 +f 3/7/3 145/8/3 143/9/3 +f 2/10/4 143/9/4 144/11/4 +f 62/12/5 63/13/5 12/14/5 +f 89/15/6 94/16/6 95/17/6 +f 88/18/7 92/19/7 94/16/7 +f 87/20/8 90/21/8 97/22/8 +f 96/23/9 95/24/9 98/25/9 +f 90/21/10 99/26/10 98/27/10 +f 138/28/11 130/29/11 129/30/11 +f 123/31/12 141/32/12 136/33/12 +f 130/29/13 131/34/13 128/35/13 +f 132/36/14 134/37/14 122/38/14 +f 126/39/15 127/40/15 125/41/15 +f 137/42/16 126/43/16 128/35/16 +f 124/44/17 129/30/17 128/35/17 +f 123/45/18 122/46/18 125/41/18 +f 139/47/19 138/28/19 124/48/19 +f 140/49/20 141/32/20 123/31/20 +f 79/50/21 136/51/21 133/52/21 +f 140/49/22 127/53/22 126/43/22 +f 122/38/23 134/37/23 139/47/23 +f 48/54/24 135/55/24 133/52/24 +f 138/56/25 139/57/25 140/58/25 +f 138/56/26 137/59/26 131/34/26 +f 141/60/27 140/58/27 139/57/27 +f 132/61/28 136/62/28 141/60/28 +f 142/63/29 132/64/29 74/65/29 +f 145/8/30 146/66/30 144/11/30 +f 147/67/31 149/68/31 150/69/31 +f 153/70/32 154/71/32 152/72/32 +f 155/73/33 157/74/33 158/75/33 +f 159/76/34 161/77/34 162/78/34 +f 165/79/35 166/80/35 164/81/35 +f 167/82/36 169/83/36 170/84/36 +f 171/85/37 173/86/37 174/87/37 +f 177/88/38 178/89/38 176/90/38 +f 181/91/39 182/92/39 180/93/39 +f 185/94/40 186/95/40 184/96/40 +f 187/97/41 189/98/41 190/99/41 +f 191/100/42 193/101/42 194/102/42 +f 195/103/43 197/104/43 198/105/43 +f 199/106/44 201/107/44 202/108/44 +f 204/109/45 203/110/45 205/111/45 +f 207/112/46 209/113/46 210/114/46 +f 211/115/47 213/116/47 214/117/47 +f 215/118/48 217/119/48 218/120/48 +f 219/121/49 221/122/49 222/123/49 +f 223/124/50 225/125/50 226/126/50 +f 227/127/51 229/128/51 230/129/51 +f 231/130/52 233/131/52 234/132/52 +f 237/133/53 236/134/53 235/135/53 +f 240/136/54 239/137/54 242/138/54 +f 245/139/55 244/140/55 243/141/55 +f 249/142/56 248/143/56 247/144/56 +f 252/145/57 251/146/57 254/147/57 +f 256/148/58 255/149/58 258/150/58 +f 261/151/59 260/152/59 259/153/59 +f 264/154/60 263/155/60 266/156/60 +f 268/157/61 267/158/61 270/159/61 +f 273/160/62 272/161/62 271/162/62 +f 276/163/63 275/164/63 278/165/63 +f 280/166/64 279/167/64 282/168/64 +f 3/7/65 4/169/65 146/66/65 +f 4/169/66 5/170/66 144/11/66 +f 4/169/67 62/12/67 11/171/67 +f 10/172/68 15/173/68 12/14/68 +f 10/172/69 185/94/69 183/174/69 +f 13/175/70 16/176/70 184/96/70 +f 13/175/71 181/91/71 179/177/71 +f 12/14/72 15/173/72 5/170/72 +f 15/173/73 183/174/73 184/96/73 +f 23/178/74 26/179/74 180/93/74 +f 23/178/75 177/88/75 175/180/75 +f 28/181/76 30/182/76 176/90/76 +f 28/181/77 173/86/77 171/85/77 +f 33/183/78 35/184/78 172/185/78 +f 33/186/79 169/83/79 167/82/79 +f 173/86/80 28/181/80 33/183/80 +f 23/178/81 28/181/81 178/89/81 +f 13/175/82 23/178/82 182/92/82 +f 10/172/83 13/175/83 186/95/83 +f 4/169/84 10/172/84 63/13/84 +f 233/131/85 231/130/85 5/170/85 +f 189/98/86 187/97/86 2/10/86 +f 229/128/87 227/127/87 15/173/87 +f 15/173/88 227/127/88 228/187/88 +f 234/132/89 233/131/89 15/173/89 +f 5/170/90 231/130/90 232/188/90 +f 190/99/91 189/98/91 5/170/91 +f 2/10/92 187/97/92 188/189/92 +f 7/190/93 188/189/93 190/99/93 +f 234/132/94 21/191/94 8/192/94 +f 230/129/95 229/128/95 16/176/95 +f 16/176/96 223/124/96 224/193/96 +f 225/125/97 223/124/97 16/176/97 +f 16/176/98 179/177/98 180/93/98 +f 26/179/99 175/180/99 176/90/99 +f 30/182/100 171/85/100 172/185/100 +f 43/194/101 161/77/101 159/76/101 +f 43/194/102 45/195/102 164/81/102 +f 38/196/103 165/79/103 163/197/103 +f 38/196/104 40/198/104 168/199/104 +f 40/198/105 35/200/105 167/82/105 +f 33/186/106 38/196/106 170/84/106 +f 38/196/107 43/194/107 166/80/107 +f 48/201/108 50/202/108 160/203/108 +f 48/201/109 157/74/109 155/73/109 +f 53/204/110 55/205/110 156/206/110 +f 53/204/111 153/70/111 151/207/111 +f 58/208/112 60/209/112 152/72/112 +f 58/208/113 149/68/113 147/67/113 +f 3/7/114 2/10/114 148/210/114 +f 3/7/115 150/69/115 149/68/115 +f 53/204/116 58/208/116 154/71/116 +f 48/201/117 53/204/117 158/75/117 +f 43/194/118 48/201/118 162/78/118 +f 40/198/119 163/197/119 164/81/119 +f 45/195/120 159/76/120 160/203/120 +f 55/205/121 50/202/121 155/73/121 +f 55/205/122 151/207/122 152/72/122 +f 60/209/123 147/67/123 148/210/123 +f 193/101/124 191/100/124 60/209/124 +f 194/102/125 193/101/125 2/10/125 +f 197/104/126 195/103/126 55/205/126 +f 201/107/127 199/106/127 50/202/127 +f 202/108/128 201/107/128 55/205/128 +f 55/205/129 195/103/129 196/211/129 +f 198/105/130 197/104/130 60/209/130 +f 60/209/131 191/100/131 192/212/131 +f 56/213/132 192/212/132 194/102/132 +f 51/214/133 196/211/133 198/105/133 +f 50/202/134 199/106/134 200/215/134 +f 206/216/135 205/111/135 50/202/135 +f 45/195/136 203/110/136 204/109/136 +f 210/114/137 209/113/137 45/195/137 +f 40/198/138 207/112/138 208/217/138 +f 214/117/139 213/116/139 40/198/139 +f 35/200/140 211/115/140 212/218/140 +f 218/120/141 217/119/141 35/184/141 +f 30/182/142 215/118/142 216/219/142 +f 222/123/143 221/122/143 30/182/143 +f 217/119/144 215/118/144 30/182/144 +f 213/116/145 211/115/145 35/200/145 +f 209/113/146 207/112/146 40/198/146 +f 205/111/147 203/110/147 45/195/147 +f 46/220/148 200/215/148 202/108/148 +f 41/221/149 204/109/149 206/216/149 +f 36/222/150 208/217/150 210/114/150 +f 31/223/151 212/218/151 214/117/151 +f 19/224/152 216/219/152 218/120/152 +f 26/179/153 219/121/153 220/225/153 +f 226/126/154 225/125/154 26/179/154 +f 221/122/155 219/121/155 26/179/155 +f 18/226/156 220/225/156 222/123/156 +f 22/227/157 224/193/157 226/126/157 +f 21/191/158 228/187/158 230/129/158 +f 24/228/159 9/229/159 281/230/159 +f 280/166/160 8/192/160 21/191/160 +f 24/228/161 282/168/161 279/167/161 +f 9/229/162 8/192/162 280/166/162 +f 7/190/163 8/192/163 275/164/163 +f 9/229/164 6/231/164 277/232/164 +f 6/231/165 57/233/165 273/160/165 +f 56/213/166 7/190/166 271/162/166 +f 57/233/167 52/234/167 269/235/167 +f 56/213/168 267/158/168 268/157/168 +f 57/233/169 270/159/169 267/158/169 +f 57/233/170 56/213/170 272/161/170 +f 6/231/171 274/236/171 271/162/171 +f 6/231/172 7/190/172 276/163/172 +f 52/234/173 47/237/173 265/238/173 +f 47/237/174 42/239/174 261/151/174 +f 41/221/175 46/220/175 259/153/175 +f 47/237/176 262/240/176 259/153/176 +f 51/214/177 263/155/177 264/154/177 +f 52/234/178 266/156/178 263/155/178 +f 52/234/179 51/214/179 268/157/179 +f 47/237/180 46/220/180 264/154/180 +f 41/221/181 255/149/181 256/148/181 +f 31/223/182 36/222/182 251/146/182 +f 19/224/183 31/241/183 247/144/183 +f 42/239/184 37/242/184 257/243/184 +f 37/242/185 32/244/185 253/245/185 +f 20/246/186 249/142/186 250/247/186 +f 32/248/187 250/247/187 247/144/187 +f 32/244/188 31/223/188 252/145/188 +f 37/242/189 254/147/189 251/146/189 +f 37/242/190 36/222/190 256/148/190 +f 42/239/191 258/150/191 255/149/191 +f 42/239/192 41/221/192 260/152/192 +f 18/226/193 19/224/193 243/141/193 +f 18/226/194 239/137/194 240/136/194 +f 17/249/195 25/250/195 241/251/195 +f 17/249/196 245/139/196 246/252/196 +f 20/246/197 246/252/197 243/141/197 +f 20/246/198 19/224/198 248/143/198 +f 17/249/199 18/226/199 244/140/199 +f 17/249/200 242/138/200 239/137/200 +f 21/191/201 22/227/201 235/135/201 +f 24/228/202 237/133/202 238/253/202 +f 25/250/203 238/253/203 235/135/203 +f 25/250/204 22/227/204 240/136/204 +f 24/228/205 21/191/205 236/134/205 +f 9/229/206 278/165/206 275/164/206 +f 142/3/26 133/2/26 136/62/26 +f 87/20/207 82/254/207 71/255/207 +f 83/256/208 92/19/208 88/18/208 +f 70/257/209 43/258/209 121/259/209 +f 71/260/210 78/261/210 135/55/210 +f 43/258/211 13/262/211 142/63/211 +f 122/46/28 123/45/28 79/263/28 +f 70/264/212 71/265/213 48/266/212 +f 71/267/214 70/268/214 100/269/214 +f 102/270/215 101/271/215 71/272/215 +f 119/273/216 73/274/216 70/257/216 +f 81/275/217 84/276/217 80/277/217 +f 13/278/1 10/1/1 142/3/1 +f 48/6/2 43/279/2 33/280/2 +f 38/281/2 33/280/2 43/279/2 +f 28/282/2 23/283/2 13/4/2 +f 13/4/2 10/284/2 3/5/2 +f 4/285/2 3/5/2 10/284/2 +f 58/286/2 53/287/2 48/6/2 +f 48/6/2 33/280/2 28/282/2 +f 28/282/2 13/4/2 48/6/2 +f 3/5/2 58/286/2 48/6/2 +f 2/10/3 3/7/3 143/9/3 +f 5/170/4 2/10/4 144/11/4 +f 11/171/5 62/12/5 12/14/5 +f 96/288/6 89/15/6 95/17/6 +f 89/15/7 88/18/7 94/16/7 +f 91/289/8 87/20/8 97/22/8 +f 99/290/9 96/23/9 98/25/9 +f 97/22/10 90/21/10 98/27/10 +f 124/48/11 138/28/11 129/30/11 +f 79/291/218 123/31/218 136/33/218 +f 129/30/13 130/29/13 128/35/13 +f 74/292/219 132/36/219 122/38/219 +f 124/44/15 126/39/15 125/41/15 +f 131/34/16 137/42/16 128/35/16 +f 126/39/17 124/44/17 128/35/17 +f 127/40/18 123/45/18 125/41/18 +f 125/293/220 139/47/220 124/48/220 +f 127/53/221 140/49/221 123/31/221 +f 135/55/21 79/50/21 133/52/21 +f 137/42/222 140/49/222 126/43/222 +f 125/293/223 122/38/223 139/47/223 +f 10/294/224 48/54/224 133/52/224 +f 137/59/25 138/56/25 140/58/25 +f 130/29/26 138/56/26 131/34/26 +f 134/295/27 141/60/27 139/57/27 +f 134/295/28 132/61/28 141/60/28 +f 121/259/29 142/63/29 74/65/29 +f 143/9/30 145/8/30 144/11/30 +f 148/210/31 147/67/31 150/69/31 +f 151/207/32 153/70/32 152/72/32 +f 156/206/33 155/73/33 158/75/33 +f 160/203/34 159/76/34 162/78/34 +f 163/197/35 165/79/35 164/81/35 +f 168/199/36 167/82/36 170/84/36 +f 172/185/37 171/85/37 174/87/37 +f 175/180/38 177/88/38 176/90/38 +f 179/177/39 181/91/39 180/93/39 +f 183/174/40 185/94/40 184/96/40 +f 188/189/41 187/97/41 190/99/41 +f 192/212/42 191/100/42 194/102/42 +f 196/211/43 195/103/43 198/105/43 +f 200/215/44 199/106/44 202/108/44 +f 206/216/45 204/109/45 205/111/45 +f 208/217/46 207/112/46 210/114/46 +f 212/218/47 211/115/47 214/117/47 +f 216/219/48 215/118/48 218/120/48 +f 220/225/49 219/121/49 222/123/49 +f 224/193/50 223/124/50 226/126/50 +f 228/187/51 227/127/51 230/129/51 +f 232/188/52 231/130/52 234/132/52 +f 238/253/53 237/133/53 235/135/53 +f 241/251/54 240/136/54 242/138/54 +f 246/252/55 245/139/55 243/141/55 +f 250/247/56 249/142/56 247/144/56 +f 253/245/57 252/145/57 254/147/57 +f 257/243/58 256/148/58 258/150/58 +f 262/240/59 261/151/59 259/153/59 +f 265/238/60 264/154/60 266/156/60 +f 269/235/61 268/157/61 270/159/61 +f 274/236/62 273/160/62 271/162/62 +f 277/232/63 276/163/63 278/165/63 +f 281/230/64 280/166/64 282/168/64 +f 145/8/65 3/7/65 146/66/65 +f 146/66/66 4/169/66 144/11/66 +f 5/170/67 4/169/67 11/171/67 +f 63/13/68 10/172/68 12/14/68 +f 15/173/69 10/172/69 183/174/69 +f 186/95/70 13/175/70 184/96/70 +f 16/176/71 13/175/71 179/177/71 +f 11/171/72 12/14/72 5/170/72 +f 16/176/73 15/173/73 184/96/73 +f 182/92/225 23/178/225 180/93/225 +f 26/179/75 23/178/75 175/180/75 +f 178/89/76 28/181/76 176/90/76 +f 30/182/77 28/181/77 171/85/77 +f 174/87/78 33/183/78 172/185/78 +f 35/200/79 33/186/79 167/82/79 +f 174/87/80 173/86/80 33/183/80 +f 177/88/81 23/178/81 178/89/81 +f 181/91/82 13/175/82 182/92/82 +f 185/94/83 10/172/83 186/95/83 +f 62/12/84 4/169/84 63/13/84 +f 15/173/226 233/131/226 5/170/226 +f 5/170/227 189/98/227 2/10/227 +f 16/176/228 229/128/228 15/173/228 +f 21/191/88 15/173/88 228/187/88 +f 21/191/89 234/132/89 15/173/89 +f 8/192/90 5/170/90 232/188/90 +f 8/192/91 190/99/91 5/170/91 +f 7/190/92 2/10/92 188/189/92 +f 8/192/229 7/190/229 190/99/229 +f 232/188/230 234/132/230 8/192/230 +f 22/227/95 230/129/95 16/176/95 +f 22/227/96 16/176/96 224/193/96 +f 26/179/231 225/125/231 16/176/231 +f 26/179/98 16/176/98 180/93/98 +f 30/182/99 26/179/99 176/90/99 +f 35/184/100 30/182/100 172/185/100 +f 45/195/101 43/194/101 159/76/101 +f 166/80/102 43/194/102 164/81/102 +f 40/198/103 38/196/103 163/197/103 +f 170/84/104 38/196/104 168/199/104 +f 168/199/105 40/198/105 167/82/105 +f 169/83/106 33/186/106 170/84/106 +f 165/79/107 38/196/107 166/80/107 +f 162/78/108 48/201/108 160/203/108 +f 50/202/109 48/201/109 155/73/109 +f 158/75/110 53/204/110 156/206/110 +f 55/205/111 53/204/111 151/207/111 +f 154/71/112 58/208/112 152/72/112 +f 60/209/113 58/208/113 147/67/113 +f 150/69/114 3/7/114 148/210/114 +f 58/208/115 3/7/115 149/68/115 +f 153/70/116 53/204/116 154/71/116 +f 157/74/117 48/201/117 158/75/117 +f 161/77/118 43/194/118 162/78/118 +f 45/195/119 40/198/119 164/81/119 +f 50/202/120 45/195/120 160/203/120 +f 156/206/121 55/205/121 155/73/121 +f 60/209/122 55/205/122 152/72/122 +f 2/10/123 60/209/123 148/210/123 +f 2/10/232 193/101/232 60/209/232 +f 7/190/125 194/102/125 2/10/125 +f 60/209/233 197/104/233 55/205/233 +f 55/205/234 201/107/234 50/202/234 +f 51/214/128 202/108/128 55/205/128 +f 51/214/129 55/205/129 196/211/129 +f 56/213/130 198/105/130 60/209/130 +f 56/213/131 60/209/131 192/212/131 +f 7/190/235 56/213/235 194/102/235 +f 56/213/236 51/214/236 198/105/236 +f 46/220/134 50/202/134 200/215/134 +f 46/220/135 206/216/135 50/202/135 +f 41/221/136 45/195/136 204/109/136 +f 41/221/137 210/114/137 45/195/137 +f 36/222/138 40/198/138 208/217/138 +f 36/222/139 214/117/139 40/198/139 +f 31/223/140 35/200/140 212/218/140 +f 31/241/141 218/120/141 35/184/141 +f 19/224/142 30/182/142 216/219/142 +f 19/224/143 222/123/143 30/182/143 +f 35/184/237 217/119/237 30/182/237 +f 40/198/238 213/116/238 35/200/238 +f 45/195/239 209/113/239 40/198/239 +f 50/202/240 205/111/240 45/195/240 +f 51/214/241 46/220/241 202/108/241 +f 46/220/242 41/221/242 206/216/242 +f 41/221/243 36/222/243 210/114/243 +f 36/222/244 31/223/244 214/117/244 +f 31/241/245 19/224/245 218/120/245 +f 18/226/153 26/179/153 220/225/153 +f 18/226/154 226/126/154 26/179/154 +f 30/182/246 221/122/246 26/179/246 +f 19/224/247 18/226/247 222/123/247 +f 18/226/248 22/227/248 226/126/248 +f 22/227/249 21/191/249 230/129/249 +f 282/168/159 24/228/159 281/230/159 +f 279/167/160 280/166/160 21/191/160 +f 21/191/161 24/228/161 279/167/161 +f 281/230/162 9/229/162 280/166/162 +f 276/163/163 7/190/163 275/164/163 +f 278/165/164 9/229/164 277/232/164 +f 274/236/165 6/231/165 273/160/165 +f 272/161/166 56/213/166 271/162/166 +f 270/159/167 57/233/167 269/235/167 +f 51/214/168 56/213/168 268/157/168 +f 56/213/169 57/233/169 267/158/169 +f 273/160/170 57/233/170 272/161/170 +f 7/190/171 6/231/171 271/162/171 +f 277/232/172 6/231/172 276/163/172 +f 266/156/173 52/234/173 265/238/173 +f 262/240/174 47/237/174 261/151/174 +f 260/152/175 41/221/175 259/153/175 +f 46/220/176 47/237/176 259/153/176 +f 46/220/177 51/214/177 264/154/177 +f 51/214/178 52/234/178 263/155/178 +f 269/235/179 52/234/179 268/157/179 +f 265/238/180 47/237/180 264/154/180 +f 36/222/181 41/221/181 256/148/181 +f 252/145/182 31/223/182 251/146/182 +f 248/143/183 19/224/183 247/144/183 +f 258/150/184 42/239/184 257/243/184 +f 254/147/185 37/242/185 253/245/185 +f 32/248/186 20/246/186 250/247/186 +f 31/241/187 32/248/187 247/144/187 +f 253/245/188 32/244/188 252/145/188 +f 36/222/250 37/242/250 251/146/250 +f 257/243/190 37/242/190 256/148/190 +f 41/221/191 42/239/191 255/149/191 +f 261/151/192 42/239/192 260/152/192 +f 244/140/193 18/226/193 243/141/193 +f 22/227/194 18/226/194 240/136/194 +f 242/138/195 17/249/195 241/251/195 +f 20/246/196 17/249/196 246/252/196 +f 19/224/197 20/246/197 243/141/197 +f 249/142/198 20/246/198 248/143/198 +f 245/139/199 17/249/199 244/140/199 +f 18/226/251 17/249/251 239/137/251 +f 236/134/201 21/191/201 235/135/201 +f 25/250/202 24/228/202 238/253/202 +f 22/227/203 25/250/203 235/135/203 +f 241/251/204 25/250/204 240/136/204 +f 237/133/205 24/228/205 236/134/205 +f 8/192/252 9/229/252 275/164/252 +f 132/61/253 142/3/253 136/62/253 +f 71/255/214 101/271/214 87/20/214 +f 87/20/254 91/289/254 82/254/254 +f 88/18/214 102/270/214 70/257/214 +f 70/257/255 83/256/255 88/18/255 +f 121/259/29 74/65/29 75/296/29 +f 75/296/256 70/257/256 121/259/256 +f 135/55/257 48/54/258 71/260/257 +f 71/260/214 84/276/214 78/261/214 +f 78/261/21 79/50/21 135/55/21 +f 121/259/259 43/258/259 142/63/259 +f 74/297/28 122/46/28 79/263/28 +f 43/298/212 70/264/212 48/266/212 +f 84/299/214 71/267/214 100/269/214 +f 70/300/215 102/270/215 71/272/215 +f 70/257/260 75/296/260 120/301/260 +f 120/301/261 119/273/261 70/257/261 +f 73/274/262 72/302/262 70/257/262 +f 83/256/263 70/257/263 72/302/263 +f 82/254/264 76/303/264 84/276/264 +f 77/304/265 80/277/265 84/276/265 +f 81/275/266 78/261/266 84/276/266 +f 84/276/214 71/255/214 82/254/214 +f 76/303/267 77/304/267 84/276/267 +s 1 +f 14/305/268 54/306/269 69/307/270 +f 88/18/271 89/308/272 90/309/273 +f 83/310/274 82/311/275 91/312/276 +f 92/313/277 91/314/276 97/315/278 +f 97/315/278 98/25/279 95/24/279 +f 90/309/273 89/308/272 96/316/280 +f 101/271/214 102/270/214 88/18/271 +f 105/317/281 106/318/282 107/319/283 +f 107/319/283 106/318/282 108/320/284 +f 109/321/285 108/322/284 105/317/281 +f 105/317/281 110/323/286 111/324/287 +f 111/324/287 112/325/288 108/326/284 +f 108/327/284 112/328/288 110/323/286 +f 110/323/286 113/329/289 114/330/290 +f 114/330/290 115/331/291 112/332/288 +f 112/333/288 115/334/291 113/329/289 +f 113/329/289 116/335/292 117/336/293 +f 117/336/293 118/337/294 115/338/291 +f 115/339/291 118/340/294 116/335/292 +f 104/341/295 107/342/283 117/336/293 +f 117/336/293 107/342/283 109/343/285 +f 118/344/294 109/345/285 104/341/295 +f 119/346/296 80/347/297 77/348/298 +f 120/349/299 81/350/300 80/347/297 +f 75/351/301 78/352/302 81/350/300 +f 82/353/275 83/354/274 72/355/303 +f 76/356/304 72/355/303 73/357/305 +f 283/358/306 286/359/307 287/360/308 +f 284/361/309 287/360/308 288/362/310 +f 288/362/310 287/360/308 290/363/311 +f 286/359/307 289/364/312 290/363/311 +f 290/363/311 294/365/313 295/366/314 +f 289/364/312 293/367/315 294/365/313 +f 294/365/313 297/368/316 298/369/317 +f 293/367/315 296/370/318 297/368/316 +f 298/369/317 297/368/316 300/371/319 +f 296/370/318 299/372/320 300/371/319 +f 299/372/320 302/373/321 303/374/322 +f 300/371/319 303/374/322 304/375/323 +f 302/373/321 305/376/324 306/377/325 +f 303/374/322 306/377/325 307/378/326 +f 283/358/306 292/379/2 286/359/307 +f 286/359/307 292/379/2 289/364/312 +f 289/364/312 292/379/2 293/367/315 +f 293/367/315 292/379/2 296/370/318 +f 296/370/318 292/379/2 299/372/320 +f 299/372/320 292/379/2 302/373/321 +f 302/373/321 292/379/2 305/376/324 +f 305/376/324 283/358/306 284/361/309 +f 307/378/326 306/377/325 284/361/309 +f 305/376/324 292/379/2 283/358/306 +f 9/380/327 61/381/328 69/307/270 +f 1/382/329 57/383/330 6/384/331 +f 59/385/332 52/386/333 57/383/330 +f 52/386/333 59/385/332 54/306/269 +f 49/387/334 42/388/335 47/389/336 +f 42/388/335 49/387/334 44/390/337 +f 39/391/338 32/392/339 37/393/340 +f 32/392/339 39/391/338 34/394/341 +f 29/395/342 17/396/343 20/397/344 +f 17/396/343 29/395/342 14/305/268 +f 27/398/345 24/399/346 25/400/347 +f 61/381/328 9/380/327 24/399/346 +f 75/351/301 74/401/348 79/402/348 +f 59/385/332 1/382/329 69/307/270 +f 69/307/270 61/381/328 27/398/345 +f 27/398/345 14/305/268 69/307/270 +f 29/395/342 34/394/341 39/391/338 +f 39/391/338 44/390/337 54/306/269 +f 49/387/334 54/306/269 44/390/337 +f 59/385/332 69/307/270 54/306/269 +f 14/305/268 29/395/342 39/391/338 +f 39/391/338 54/306/269 14/305/268 +f 87/20/349 88/18/271 90/309/273 +f 92/403/277 83/310/274 91/312/276 +f 94/404/350 92/313/277 97/315/278 +f 94/404/350 97/315/278 95/24/279 +f 99/405/280 90/309/273 96/316/280 +f 87/20/349 101/271/214 88/18/271 +f 104/406/295 105/317/281 107/319/283 +f 109/407/285 107/319/283 108/320/284 +f 104/406/295 109/321/285 105/317/281 +f 106/318/282 105/317/281 111/324/287 +f 106/318/282 111/324/287 108/326/284 +f 105/317/281 108/327/284 110/323/286 +f 111/324/287 110/323/286 114/330/290 +f 111/324/287 114/330/290 112/332/288 +f 110/323/286 112/333/288 113/329/289 +f 114/330/290 113/329/289 117/336/293 +f 114/330/290 117/336/293 115/338/291 +f 113/329/289 115/339/291 116/335/292 +f 116/335/292 104/341/295 117/336/293 +f 118/408/294 117/336/293 109/343/285 +f 116/335/292 118/344/294 104/341/295 +f 73/357/305 119/346/296 77/348/298 +f 119/346/296 120/349/299 80/347/297 +f 120/349/299 75/351/301 81/350/300 +f 76/356/304 82/353/275 72/355/303 +f 77/348/298 76/356/304 73/357/305 +f 284/361/309 283/358/306 287/360/308 +f 285/409/351 284/361/309 288/362/310 +f 291/410/352 288/362/310 290/363/311 +f 287/360/308 286/359/307 290/363/311 +f 291/410/352 290/363/311 295/366/314 +f 290/363/311 289/364/312 294/365/313 +f 295/366/314 294/365/313 298/369/317 +f 294/365/313 293/367/315 297/368/316 +f 301/411/353 298/369/317 300/371/319 +f 297/368/316 296/370/318 300/371/319 +f 300/371/319 299/372/320 303/374/322 +f 301/411/353 300/371/319 304/375/323 +f 303/374/322 302/373/321 306/377/325 +f 304/375/323 303/374/322 307/378/326 +f 306/377/325 305/376/324 284/361/309 +f 285/409/351 307/378/326 284/361/309 +f 6/384/331 9/380/327 69/307/270 +f 69/307/270 1/382/329 6/384/331 +f 1/382/329 59/385/332 57/383/330 +f 47/389/336 52/386/333 54/306/269 +f 54/306/269 49/387/334 47/389/336 +f 37/393/340 42/388/335 44/390/337 +f 44/390/337 39/391/338 37/393/340 +f 20/397/344 32/392/339 34/394/341 +f 34/394/341 29/395/342 20/397/344 +f 25/400/347 17/396/343 14/305/268 +f 14/305/268 27/398/345 25/400/347 +f 27/398/345 61/381/328 24/399/346 +f 78/352/302 75/351/301 79/402/348 +l 93 103 +l 67 68 +l 64 65 +l 85 86 diff --git a/assets/hbm/models/weapons/pch.obj b/assets/hbm/models/weapons/pch.obj new file mode 100644 index 000000000..e3634a298 --- /dev/null +++ b/assets/hbm/models/weapons/pch.obj @@ -0,0 +1,245 @@ +# Blender v2.76 (sub 0) OBJ File: 'pch.blend' +# www.blender.org +o ponycum_Cylinder.003 +v 0.000000 -0.457474 -0.076488 +v 0.000000 0.498621 -0.076488 +v 0.063454 0.498621 -0.038244 +v 0.063454 -0.457474 -0.038244 +v 0.063454 0.498621 0.038244 +v 0.063454 -0.457474 0.038244 +v 0.000000 0.498621 0.076488 +v 0.000000 -0.457474 0.076488 +v -0.063454 0.498621 0.038244 +v -0.063454 -0.457474 0.038244 +v -0.063454 0.498621 -0.038244 +v -0.063454 -0.457474 -0.038244 +v 0.244563 0.705111 -0.261231 +v -0.244563 0.705111 -0.261231 +v -0.244563 0.821944 -0.260374 +v 0.244563 0.821944 -0.260374 +v 0.244661 0.821816 0.260308 +v -0.244661 0.821816 0.260308 +v -0.244661 0.704698 0.259606 +v 0.244661 0.704698 0.259606 +v 0.300312 0.880010 -0.277019 +v 0.300312 0.650163 -0.277880 +v 0.244563 0.705233 -0.277878 +v 0.244563 0.822066 -0.277021 +v -0.300312 0.880010 -0.277019 +v -0.300312 1.041927 -0.113884 +v 0.300312 1.041927 -0.113884 +v -0.300312 1.041066 0.115963 +v 0.300312 1.041066 0.115963 +v -0.300312 0.877932 0.277880 +v 0.300312 0.877931 0.277880 +v -0.300312 0.648084 0.277019 +v 0.300312 0.648084 0.277019 +v 0.244662 0.704449 0.277099 +v -0.244662 0.704449 0.277099 +v -0.300312 0.486167 0.113884 +v 0.300312 0.486167 0.113884 +v -0.300312 0.650163 -0.277880 +v -0.300312 0.487028 -0.115963 +v 0.300312 0.487028 -0.115963 +v -0.244662 0.821567 0.277801 +v -0.244662 0.704698 0.259606 +v -0.244662 0.821816 0.260308 +v 0.244662 0.821567 0.277801 +v 0.244662 0.821816 0.260308 +v 0.244662 0.704698 0.259606 +v -0.244563 0.705233 -0.277878 +v -0.244563 0.705111 -0.261231 +v 0.244563 0.705111 -0.261231 +v -0.244563 0.822066 -0.277021 +v 0.244563 0.821944 -0.260374 +v -0.244563 0.821944 -0.260374 +vt 0.625000 0.687500 +vt 0.625000 0.593750 +vt 1.000000 0.593750 +vt 0.625000 0.500000 +vt 1.000000 0.500000 +vt 1.000000 0.687500 +vt 0.500000 0.250000 +vt 0.437500 0.312500 +vt 0.437500 0.250000 +vt 0.687500 0.781250 +vt 1.000000 0.781250 +vt 1.000000 0.906250 +vt 0.687500 0.906250 +vt 0.468750 1.000000 +vt 0.375000 0.781250 +vt 0.437500 0.218750 +vt 0.500000 0.218750 +vt 0.718750 0.218750 +vt 0.781250 0.250000 +vt 0.781250 0.218750 +vt 1.000000 0.218750 +vt 0.718750 0.250000 +vt 1.000000 0.187500 +vt 0.718750 0.187500 +vt 0.781250 0.187500 +vt 0.500000 0.187500 +vt 0.468750 0.250000 +vt 0.500000 0.312500 +vt 0.468750 0.312500 +vt 0.906250 1.000000 +vt 0.781250 1.000000 +vt 0.781250 0.687500 +vt 0.906250 0.687500 +vt 0.468750 0.687500 +vt 0.593750 0.687500 +vt 0.593750 1.000000 +vt 0.375000 0.906250 +vt 1.000000 0.250000 +vt 0.437500 0.187500 +vt 0.437500 0.093750 +vt 1.000000 0.093750 +vt 1.000000 0.125000 +vt 1.000000 0.156250 +vt 0.437500 0.156250 +vt 1.000000 -0.000000 +vt 1.000000 0.031250 +vt 0.437500 0.031250 +vt 1.000000 0.062500 +vt 0.437500 0.062500 +vt 0.375000 0.875000 +vt 0.343750 0.843750 +vt 0.343750 0.781250 +vt 0.000000 0.750000 +vt 0.000000 0.625000 +vt 0.375000 0.625000 +vt 0.000000 0.500000 +vt 0.375000 0.500000 +vt 0.000000 0.375000 +vt -0.000000 0.250000 +vt 0.375000 0.250000 +vt 0.343750 0.281250 +vt -0.000000 0.125000 +vt 0.375000 0.125000 +vt 0.000000 0.000000 +vt 0.375000 0.000000 +vt 0.000203 0.999797 +vt 0.000000 0.875000 +vt 0.375000 0.375000 +vt 0.343750 0.343750 +vt 0.031250 0.281250 +vt 0.031250 0.343750 +vt 0.375000 0.750000 +vt 0.031250 0.781250 +vt 0.031250 0.843750 +vt 0.437500 0.125000 +vt 0.437500 0.000000 +vt 0.375000 1.000000 +vn 0.000000 0.007300 -1.000000 +vn 0.000000 -0.006000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn -1.000000 -0.000000 0.000000 +vn 1.000000 -0.000000 0.000000 +vn 0.000000 -0.999900 -0.014300 +vn 0.000000 0.999900 0.014300 +vn 0.000000 1.000000 0.007300 +vn -0.000000 -1.000000 -0.007300 +vn 0.000000 0.000000 -1.000000 +vn 0.870700 0.000000 -0.491800 +vn 0.870700 -0.000000 0.491800 +vn -0.000000 -0.000000 1.000000 +vn -0.870700 -0.000000 0.491800 +vn -0.870700 0.000000 -0.491800 +vn 0.000800 -0.379600 -0.925200 +vn 0.003600 0.003700 -1.000000 +vn -0.001200 0.002100 -1.000000 +vn 0.001000 0.385300 -0.922800 +vn 0.000000 0.925300 -0.379200 +vn 0.000000 0.922400 0.386100 +vn -0.000500 0.379500 0.925200 +vn 0.000600 -0.385600 0.922700 +vn -0.000600 -0.385600 0.922700 +vn -0.000700 -0.002700 1.000000 +vn 0.000000 -0.925300 0.379200 +vn 0.000000 -0.922400 -0.386100 +vn -0.000800 -0.379600 -0.925200 +vn 0.000500 0.379500 0.925200 +vn 0.002300 -0.003700 1.000000 +vn 0.000700 -0.002700 1.000000 +vn -0.002300 -0.003700 1.000000 +vn -0.001000 0.385300 -0.922800 +vn 0.001200 0.002100 -1.000000 +vn -0.003600 0.003700 -1.000000 +s off +f 14/1/1 15/2/1 16/3/1 +f 18/2/2 19/4/2 20/5/2 +f 13/6/1 14/1/1 16/3/1 +f 17/3/2 18/2/2 20/5/2 +f 4/7/3 10/8/3 12/9/3 +f 36/10/4 28/11/4 26/12/4 +f 29/13/5 33/14/5 40/15/5 +f 41/7/5 35/9/5 42/16/5 +f 41/7/6 43/17/6 45/18/6 +f 34/19/7 46/20/7 42/21/7 +f 44/22/4 45/18/4 46/20/4 +f 47/23/8 48/21/8 49/20/8 +f 24/24/4 23/25/4 49/20/4 +f 24/24/9 51/18/9 52/17/9 +f 50/26/5 52/17/5 48/16/5 +f 12/9/3 1/27/3 4/7/3 +f 4/7/3 6/28/3 10/8/3 +f 8/29/3 10/8/3 6/28/3 +f 26/12/4 25/30/4 38/31/4 +f 38/31/4 39/13/4 26/12/4 +f 36/10/4 32/32/4 30/33/4 +f 30/33/4 28/11/4 36/10/4 +f 26/12/4 39/13/4 36/10/4 +f 40/15/5 22/34/5 29/13/5 +f 21/35/5 27/10/5 29/13/5 +f 29/13/5 31/36/5 33/14/5 +f 33/14/5 37/37/5 40/15/5 +f 22/34/5 21/35/5 29/13/5 +f 43/17/5 41/7/5 42/16/5 +f 44/22/6 41/7/6 45/18/6 +f 35/38/7 34/19/7 42/21/7 +f 34/19/4 44/22/4 46/20/4 +f 23/25/8 47/23/8 49/20/8 +f 51/18/4 24/24/4 49/20/4 +f 50/26/9 24/24/9 52/17/9 +f 47/39/5 50/26/5 48/16/5 +s 1 +f 1/40/10 2/41/10 3/42/11 +f 3/42/11 5/43/12 6/44/12 +f 5/43/12 7/23/13 8/39/13 +f 7/45/13 9/46/14 10/47/14 +f 9/46/14 11/48/15 12/49/15 +f 11/48/15 2/41/10 1/40/10 +f 22/50/16 23/51/17 24/52/18 +f 25/53/19 26/54/20 27/55/20 +f 26/54/20 28/56/21 29/57/21 +f 29/57/21 28/56/21 30/58/22 +f 32/59/23 33/60/24 34/61/25 +f 32/59/23 36/62/26 37/63/26 +f 36/62/26 39/64/27 40/65/27 +f 39/66/27 38/67/28 22/50/16 +f 31/68/29 44/69/30 34/61/25 +f 30/58/22 32/59/23 35/70/31 +f 30/58/22 41/71/32 44/69/30 +f 21/72/33 24/52/18 50/73/34 +f 38/67/28 25/53/19 50/73/34 +f 22/50/16 38/67/28 47/74/35 +f 4/75/11 1/40/10 3/42/11 +f 4/75/11 3/42/11 6/44/12 +f 6/44/12 5/43/12 8/39/13 +f 8/76/13 7/45/13 10/47/14 +f 10/47/14 9/46/14 12/49/15 +f 12/49/15 11/48/15 1/40/10 +f 21/72/33 22/50/16 24/52/18 +f 21/72/33 25/53/19 27/55/20 +f 27/55/20 26/54/20 29/57/21 +f 31/68/29 29/57/21 30/58/22 +f 35/70/31 32/59/23 34/61/25 +f 33/60/24 32/59/23 37/63/26 +f 37/63/26 36/62/26 40/65/27 +f 40/77/27 39/66/27 22/50/16 +f 33/60/24 31/68/29 34/61/25 +f 41/71/32 30/58/22 35/70/31 +f 31/68/29 30/58/22 44/69/30 +f 25/53/19 21/72/33 50/73/34 +f 47/74/35 38/67/28 50/73/34 +f 23/51/17 22/50/16 47/74/35 diff --git a/assets/hbm/sounds.json b/assets/hbm/sounds.json index 9aa9eee37..ac54ce962 100644 --- a/assets/hbm/sounds.json +++ b/assets/hbm/sounds.json @@ -51,6 +51,7 @@ "item.radaway": {"category": "player", "sounds": [{"name": "tool/radaway", "stream": false}]}, "item.spray": {"category": "player", "sounds": [{"name": "tool/spray", "stream": false}]}, "item.repair": {"category": "player", "sounds": ["tool/repair1", "tool/repair2", "tool/repair3", "tool/repair4", "tool/repair5", "tool/repair6", "tool/repair7"]}, + "item.vice": {"category": "player", "sounds": [{"name": "tool/vice", "stream": false}]}, "music.recordLambdaCore": {"category": "record", "sounds": [{"name": "music/recordLambdaCore", "stream": true}]}, "music.recordSectorSweep": {"category": "record", "sounds": [{"name": "music/recordSectorSweep", "stream": true}]}, @@ -126,6 +127,7 @@ "weapon.bonk": {"category": "player", "sounds": [{"name": "weapon/bonk", "stream": false}]}, "weapon.hksShoot": {"category": "player", "sounds": ["weapon/hksShoot1", "weapon/hksShoot2", "weapon/hksShoot3"]}, "weapon.glauncher": {"category": "player", "sounds": ["weapon/glauncher1", "weapon/glauncher2"]}, + "weapon.bodysplat": {"category": "player", "sounds": [{"name": "weapon/bodysplat", "stream": false}]}, "weapon.reloadTurret": {"category": "player", "sounds": [{"name": "weapon/reloadTurret", "stream": false}]}, "weapon.switchmode1": {"category": "player", "sounds": [{"name": "weapon/switchmode1", "stream": false}]}, diff --git a/assets/hbm/sounds/tool/vice.ogg b/assets/hbm/sounds/tool/vice.ogg new file mode 100644 index 0000000000000000000000000000000000000000..225d20b3c68c57c38b43261b1504b8d111a57904 GIT binary patch literal 10271 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 WUZps5bTpOg5^(OUckR#d=zjs+Bwz>t literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/blocks/brick_obsidian.png b/assets/hbm/textures/blocks/brick_obsidian.png index 279923addd8d4d3ee737fc80715100f875f3c880..797224b19976d505891ae318525cce0847f282ad 100644 GIT binary patch delta 519 zcmV+i0{H#b1G)r|83+OZ005AYXf}}{D1X8L01mbS=0<{GC&;bx4%M#G-*{x^D^g@`GLpHzw_>LxzMN1YJ0F|*Y4W3O{%0?<^`luxzFSI zbUu+8vgr@Eltghb2=A<;OW*hsOn*u-ydsgeMF29>$zD--IVITtLkMidh&jGOvb=rs zo&bdDx(!(ONtF8ORn>wA#|->F-IpUGJR_YhYf4q0pP#o2Oq-cc1QH zgHtCOqDq+(s?rwW!%{}JtN}r*nuwUvHX;zwWWy{n;tGm^CxhWL3_}&So^-Ml&e8yd z6z2+c`wmZdMaL?^c0lTM%j~vk8fRM|8X_rFwBwD9P_bkq3hIvMk!JXxE|b|e*EJ(N zq`11i$}!_WPJps}9JZnHG+q3+In?tq4V=qov$s8X!C8Ww^FKUY{kPg9b7=qo002ov JPDHLkV1iFF2(bVF delta 419 zcmV;U0bKsN1l9wP83+ad001BJ|6!3KD1XBM01m?e$8V@)0003_NklFW1KVZ~S@CL(bSW&@tF8vLL;icx^>DE0@rMt>f) zJ}2eVM2qR2t{!gnPz23uCeq1`aXB3upQ`L%u6llKCZKMDIyn(zZETmXY9>+!7*fE1 z*X-j2CbkAlw)ymynyHr#1KYHofSLgKkll}>X7368@URKICXNhXGTcrN0PhKMm?FLd z;4{2L&4mAq>ttqm?g62B;IAsT?thkWe((TX=LL*K55nl`>>YT(pJTafJgVOgJ+ZGq zO(La^PV>iI1ZS==xor=0gwz+<2&FR_t>uzYv5zP&Kf`mbS2|!&HuhX z8J_S>wEq{tCd~C0L_@9Dj1B@i00000NkvXXu0mjf0000HbVXQnO>bmnY!CoXbZBLA NFGFZ$b9B+cCtww{zFq(T diff --git a/assets/hbm/textures/blocks/machine_crystallizer_side.png b/assets/hbm/textures/blocks/machine_crystallizer_side.png new file mode 100644 index 0000000000000000000000000000000000000000..fb4b599175f90f774663b810dc88813385c38552 GIT binary patch literal 354 zcmV-o0iFJdP)Zt~6hvPl#1@E#ZPLLJRvdzYiW|76+mq}~asUoMxuT&r zU78?EV5D`E6p1YsSh7{7`WpQi&-b@qilX@97fLDeJZBGeUAtN-g=Y%@V+_+Y?HVlm zJxdy6$g<2eNh$9{Ns<6?I-O{m#+i6*KuU>}60J2s5Ufn*c(sK+-HOA$rz}f^5QKeC z+qT4U>{3{4CeT_V&S$!=1K^mZ42zLg3Fdga-Bw)K_s<&)QMBSd4u|IrwAL$bewlw7 z{Obr0xA1RaF5$kEJY2hA2WxN!zvzQG^h}t+i>I{RCatA%s|Q zyCe9%PgPa!MLrVD{{eufl)@O}h;bY@g%->HZ-kDI=x^uNFaQ7m07*qoM6N<$f_&|e A!2kdN literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/blocks/machine_crystallizer_top.png b/assets/hbm/textures/blocks/machine_crystallizer_top.png new file mode 100644 index 0000000000000000000000000000000000000000..6fd2f0c053e14a687a89efd98bc4d9ee14d7f165 GIT binary patch literal 400 zcmV;B0dM|^P)+Y1^*+Jzc=XJIrC7*q+p-%5zP4MGQdST}5m}Z|*Y(pNNfKMOWYbz(kx~k+ zwKY!Dl&Qs!Q-Fz^X;$-8ik}En|CQ_MZmN_9lLvWnZxlUSX zNs(y}Gw@YfmXL_!t3<_8!8H0?7FtO8LJ>uW*4%a1{dQL$?)mcDXRm$s`JKJ@+2{O@ z+v}yT`;9IDK;OsPGXMZcEkan6^szqhlp zdMlAc_RZ~ydMD-=2?T;xcmBQo71wX+ro*tjA&Dj}Emgc9Zd15fRZ^8795sE%?ex-C zOQuEy6K|R_zqcHhCgu&W(^CFLr7kGs)YA)V{d?GtzJ;4dnwpw6DWMEm0!J~?W-;7T z>Mxj(7TG?Ur3?!$KG6XgMJ;nO)jOLspYC%dSJMz$rQ7ZxM(IL4#0!uIfwF_7(9Ix( z1$RKZEkQ`FCRB`|l_<%|jm5g)@@5Zk7Z8~%4`>If&CRwW$K|@|YCTJ8OdPW2Ei(b= z;CjSbhf!%DxEGjb3oYTG_?O3>^5CJ5A2$o7^4Fr0lqwE~Q$AoiSuVWy`c4oM6B8#yMbu9eaf?jGs49w$eO)`HSgTfhsa}%uKEj7) z1mg|(EwrV(;PUO{!036c7=v-jSuQu_Gqa(0&wS2fj@a(QeBq^MCNvDKT&}M$wvH6X zSjSQ7A6el0kQ53noIv=gc`&qwL-0d6A-n15Kqw;OsZp9;*d=Vee_x&KhKi+4qO6Bu z*sHnVR3b;r<}p|JIc(Qg(qf8#~gB%3{+ zot^zfHR)DRP*A1O@PREXkR{A3RqAPWVYoMIzfO`mXh~IwkaDKiaQk@-O<6u;X^GQc zJT@dks<;U(QP4pgqMW|5j2OeL{v#Id1U z3YAi!lw2;7_8)heP$*m`ZMX0Iq($Gz0p8?5ch7L^ZuHWI)=ZwdNMe?GHcREQ&3cuU zm9HP*J9X$9qZf#HoC&sdAQHwSJz*3!jAfXWMutAMia9IRVRnv z&)!JJx#0I9dH0dRZVb(ClQQWKd|}PSq0PJ&*@=az_i$Q!Bk}iYecCG_H0{$TQa)*8 z3V%d*L^{gQa7mzE)!?Qq;X91tRbwY8ALjoE zc-Rxuf#Nkk`;(Nv2dE>TR}pj4b+V}1y;LZ#Ner?ME5fr9QdCmTg*B?Xd>e4eo@@Xv zM;bvm*zj-{W#()bger62>6mETe#0N#WQAD&R_Zy3njbT(HXwE_qHZRy`lkWKikhuM z!+fWD;ZLdV{L`vc(Zh5-pI6FYoGeS%`ZoE`i_w9=(XUd|iP0&I#!?Pns56_Y_x1

Mp#dGUW#l4f@uB60?2f8pYe{ zp}53E=j6iKZok7}1ut8# z5;@`lxad~98(>S;N$jTyG>T=ns7-lMR4ba+KfU~d_ji17)Zm__#+Eb8OISD>OI|(^ z`zTwUVy5m-6$NVxD7SBE0w%4Y^q`*n89%AhW0M9l^qYqq_j(0bDJ@?jGr^;;+~dgI-^ zbu59Cm8F>efNw5<4;tjFe6d6~1kkks#l-&s!c=D>%PXR^zuwFBeeLkX&=jV9xDh|L z`gY-|!CwkKp1y{_HfjRn-Qa5=XEG^Hb~JOl+|B$|4tC(#jY3Hd)_leF9JBNXc@)@GTwCe%1LZ_>;4F>Z^c*h_Rhdpy!6A??Z7ArNhSmP7ZAs zvz_`PX^l}?-!b{Z+*Fi>o$(zO_}Rkkv`e%XQEwG3dYe0MBySqg`VYmIui5`)xa?d) Y(yc~D%o)AczHH#LYp-YJkHla90_&lj^Z)<= literal 2412 zcmcImX;2eL7VaECK&}CCg$)X;$biwoV^{$V2v|T+R6tN9291JT;t-B8AtC6pC=STz zfRV$X7#F&r_62SyeH4yQxJU~wc6LO=q6gpiH1J2g9hwsxy_-=Ejjuiy85{Z&`J zzH%tY&&0^a2moLb;O`p@07SQh0EE6SMJ888>k^#c9T1ApMF!&ZWdIB}1o-X^{kBv# zwD+9wm5ss7Pd;h$4j;Chl0xNR+M(6bu6|Yh7BAL`=bXRdmCjgJJbRyaPPBjS>YVPk zBDulpJlKU@VY@RaNRymeMUVZn?R7Pt$Q9ZGiKUkNV4N5-p-@?0&kV*m4Gj%FaOX}~ zE`1u&=Dc{e7-Jn)+h^bB9aSR}9#<(>(3+y)!IdR33E?~AV7-ib)08CY76=X$nZM(( z8JW}a%#}6`nOHI?xtI~V($>+@;h=(Ck}1^+wVYeY=krl9Op%TD+Ncj$yX>owGd#}k z<%Rq7a@)pakd>PHUqjmhNHscLTT0e)w*T7#C(F8b>oYT!WV6))>Z_3$5s z6&hL%S|Wult5og`#ccl+bKrW8QMsK@=L}(@20lryVJ04wg?~+x!j_hn+!zY>`ypAH zoL`rJI5SbG+>vKg?vi*Zp83gxffIvCE3biJPY1Ybi9pRGQz${g_52nNhq8Y0fG`4= z#u`#9aX8#pX_PxVovGQyL|3NqEm&1o9NhxiH(akzA-`Q8UrEGT>GutI+nHH;eVmN> zh=g$hg-EZ|I#qcRWzS>Jd8t|~7UQ<2r?If{jF8MBB0ESr@1E#dqR`#pljA*|B)gW* z$x2Brym%}VGvYHmHa4~g9*mLGlfqA)Cy~^5%Ho1}NZ!*>pch|4?y@x}6F_QO7bG#hB5B}L$Jwgx8-@4IOC+D~WYj}8oR zDNG^_2}dBMctW(6Htwk3GO*FN68h!-xdiu=r~_X!EY?0+V522Xe$O{CR<0S|3esx; zf-L$RYFCPBd3F5EHA5$u`co)aM5Vm@9j%SPj8A_ zZp$VnTerb^GMTL0u+iq$C}Q+=q2l)2DPL8I6wa0ytF@Rs(v zrsXk{&aQQyAkvec^u)}EN7!asVRH?s7W>O!RK_u1(EI0?G{Uv!I|Lw}>^dZ{&BjP9 zI~pzn{|T|L5J`Gj_Rut{bEWj|15}Yy-_6nk)5|v|rKfYl zV5`h8Jii_r3ce0x{_=Frc#-knx0KBt9d!iV6H4e0Q>9lgqmD*wg%lK#$8(&}X8@9w zFSnWLhnNd0jj17B5@*O=Cs)wA?&kcwbU^7Tj+ohg+H|;7b1ROSI^WViqpo_0Y}4ma zxLTJ-*jso=XTc7wo0^cTp=eKv%iUDh<4w38wjGBR?ot5XpCUXlNY=olB2yM!)I$urN3& z`jekWAld9@)HVVrbh~Zll48m$8p?2WG~l(|9vDb3ecyCvK>%qUE9{co17}I*(ab)q z*r>=ATj(_haR_@jd+a+?DigO-3afaK=hh+Tq=LkQjuz02H8-58ZXL7s$tExD2_R7k z5Rjs29fbOF%oHDu?-iC2-aZjP6nkm{5e+Gh2cezwftl@l`@#)V=5;%#+eF5_VMpF< zQ{%Mtf#HQWDpaw|)~CG$$dxnSNI`LOX%_$eDwi0C2BB<9-gV4sJ;2VH5Y`gE;x(E} zq54Lc2X8oVpWDtyt4DVJ|AZ_WOeE2^9)mffb)k9(dY7Q;4*ck`;d^r~`r1z2-9u_M@eXn%MKZ2P!zY7_R>GVatpl}a5F%*l7v~H#7WKifb#w!X9 z1yD=f6aZ8n9Kbi}Mgs(78R`ZF@QV7aM3n2lnZG=RWGT-&p7U5|hNeH-y>2)E+}^<} z!hBY!c*NpALHQlQ6zZD6Kz`bnA@Y%DGQ_7&RKy|AjeENs(Q9aJX=yp@7iDZo sy|7cnd$ErQ8L?j0{cQd}k>Ra1Amz7~eX}N^>N7*Yz93(wchtqd1E6wA9smFU diff --git a/assets/hbm/textures/gui/gui_arc.png b/assets/hbm/textures/gui/gui_arc.png index 521fbb4dca8b60b6809b8064371fd9593a6ad970..0dc6c8c1c5a06776c67c72e95186cb314407aeba 100644 GIT binary patch delta 2392 zcmY*ac{tnI8vex^nnBGVc2x$gt<$tcQ_&$h86#8`4N9JwT3hAXYE3Y>sJ&`wYH4Vs zqNAg_sl+l()s_kp)Yg`0lG;L41idkH?;rR3=RDtY-t)faeCNF1A$~WcR&*Svn2B;a z>v@B)G(8xh&DNx^Ee;ep7C)GzM@%(X5!+rW2EwR7L*6}W-trU@ke-oU#WZR4((&!9 zvOe!Fr!O4+$sLR|=*s-&UCiJuRWqeU;sMmn`cHX;LyI4GzXIKlf2F|>ZrQ`5gE()w zCS-hABvQH7vLLl6w2Jw)Q4Y6Ah%uKrdGaJP;%SpLWI;?#p7kaUSHM?d?1EXE5V^$N z?KY~2qurXuR2eMHotT;$;J(V!ARDnGo~pfmw490)HGH^1iNw`r<*7aM zq0;|_sy9LzA>2R6P8JfVVm3{9C%h)Kf2(*U2dEXDM@H%J=SJ+uUMsIOgfuP$Q96|u zjHN|dE+ul<2Uw;DZfbP7&_88Qw8+u;Hua=5@E`=HMdl`LZ>)8Ar8}*KxM4R?X{T(zP zifKEpHKL^Lo(@Eq+4O}ux`0^$m?i=aLD_lZ)h=UKZ)mNo^yPmsLJh{iMB#%m0snHf zc>YMsvV`O`v~>&s;V}w58Ciw**523Dd)VFfix$9fxpc*zmX>3;6+rktzPXi43H?09 zsk+LgU+ZX*--Y4>N_!r5Uh|le@FSb$-_bn`Nu~t{bQ0ElWSlHyns3j;jRj*O;q?=O zI3XjLF^VSai3@4{wxsiuqsolx&^iARYXJ;RV2*C?>rX-^QaWxEz+KqA)qkOSUPeV8I+P7&kK-eKLh8Kr;(Ds-z-SIW_l+svCwf$25LQ|bl zj#~f7WoVeSUN~X<=Y?pn`v!og$YrFZ8@SVEy-BSUH0dzOsaiE*o9h{HgtXw3U9(ed zzq|Eo*I_F?$wA-E%&;~$pJesa;p#V5`#Ll7k_kqO%r}qrx`gTS4CQ5wITfJs@#{kU zcgr6jmJoclvVKr%T3g$RX==*p=)0FZQ+A$BaX6fTa>4YASUyu6;N|Tdu4`F71h81F zA38dT=L!`&-Zb()zE1Wxmf_tzkQO-8?E5rV??)^caENon1Ax*c2uKPC*w8WHNG+AJ z^7s)92Kt*EK7XZONqTPZ&M978yJC+!b*2AH$_cIfH|uCpG>4}BU)yed$a|ijuhQFPYMLlh z<|PLH&$F+hD5kl%?`Z*-E}d_mmXwXZ9cdsFr1Ga+QDzQM1gqSnrHH*wU7s0c2jH3)88!U9 zU2zF4VQ=Z_Ec)V?h5qvA1*Iw#s-U8rN}#CTnON5qSZfVo?4Cv@3u>IfzhM6|3{<}_ zg$smf-Q5zJW1*L~W;N0{HBz7=l%%wu;9rMBsp~^xeOs!!O2GT}kHObi>q@#IduCBu z)}@p3_?VW)`1wg8UvS2a&*vwubMjeiwxoYbUIQjlFa&mn11O6e6dX?y#F0a2LJUeFFdSn_0e4{TRFo zaa0|2oSXt&y?#ABDap6zy*qOZF{Tk^SHxj-Rq%m78&iO(=h383hj4@(4&#mealE-D z1c)0w%RMIDJKqhAkB`5l)1B{YR9x|%fXB7_`}+37H(&Bs$q4yY3aG`$CW?E=f#n|@ zJbm$GA$xj!-1MUE6O%g`>k;xC*6dO8;KR;@oac?EN)-XbkTG5&9bZLHtpTCwj6=XZQMyI?qfZM;m%foe*579KoEw~dNmy;s%~?v z-aaOQY-MkB59HyI9bNtVsIH+ZdbHwd-;r3e$iFdZxRzI>M7c5r{GTT*1_M<66bUF} zsoJZqF6-ssqoT@N_Q2otZz9zVNtFzg5jfIcbuL!P7*>yFk)J!5lP>O2V&i(Uc$#m-pF z)=g`?uxX*6A1>O&H#{g5NNzb4fv{)gjv{pe8ir3mkys#%zP~%8rKoTe<+Uensf$9GN DkCL&G delta 2252 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 XG+|>9zFnXU1k1|e;@OHbp1=JUAyZZ4 diff --git a/assets/hbm/textures/gui/processing/gui_crystallizer.png b/assets/hbm/textures/gui/processing/gui_crystallizer.png index 87b69828f3a9c18c4794399cb67255cdba69fcd7..160ba3017f7437222247453dc30cdc17b2c0ca0e 100644 GIT binary patch delta 1818 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 diff --git a/assets/hbm/textures/gui/weapon/fatManSchematic.png b/assets/hbm/textures/gui/weapon/fatManSchematic.png index bea1bf29d1d676d0a673fecac5bf666153af3b1c..8eb62ae2e858d58ca2c1c8b9467cb66e9bc88c7f 100644 GIT binary patch literal 10273 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 UQe9lSKGp}QDrvxr6iod73tVU|VgLXD literal 8916 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≠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 delta 233 zcmVFh8C~w}pWqA4Q6C;!h1}FxAG@F}SKzRrtBqYSJc=2Ke6%}QMJ9qA)7=qyikYaTF z?%g}EoS>i}m_`P013v-+)7!;1it$CEL~Him;CO=nXIf`5SWJXazgyjp=xV7uE= z>#JqN*)rpCQ55VYhCrI8BNCOP~a*y{%=0e#~&dIGwj!vdIu`aP54p69XG4^wT#oqXTFc_c}* z(WLoePEiz5l077*yaA{rEFV1-rfXww$WE zQE|N+{qiM%%~5pZxenX5DUM_E{SD>$We`y;AZae@y5^j=eSh#MC<0k_=0sgU1eoTM zM}aM%e9!a9aoql~N?8_^rY8!+12s)UmSyo8HiinY8Hu_OWb^n#gTOd(%3NiD1<)F( z&xMEw!FH%rU;%hRYo;eGKm`7iB;mFA$6VpnkA=jKno`9Aadv*k`YMIit=$iMFBkzy) zG5s;NnfS#;=zZqe$$z%6wjY`(x$%hQ@@tdMUWn>epL9;*WzWP2nQLpBZ@ilmJUz9M zX#qn-_EMeG*CW+FxD>5l<)g%~uC%vuo}q7WQKFIn1G90Gr@zW}j=bApM|~!-JUG}> z9GH-BO#R1O>6WfS_Bo{wI#W{E!i@6|c0S;k(^J55&TYfBQ|1Lq7EI|EP0sGK|985A ZDe}gmTOMrpMS%Wd@O1TaS?83{1OPXfaRLAU literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/items/crystal_fluorite.png b/assets/hbm/textures/items/crystal_fluorite.png new file mode 100644 index 0000000000000000000000000000000000000000..b111fedda80e0dfb5c69caf0858dc2ac856fb0ea GIT binary patch literal 432 zcmV;h0Z;ykP)Bocyw6xoFpLv(h>!*<9SW^xM;z02(5z3;v6``%huAv&!_EWh32jiuLU6|n8N zupKwCp89Kp1OosOVdM{&1}Fw{OY`X=P6B@h{_hO*xV$c_Aw=KvMaU6_v%~?40TF?S zAVQAgd_e(4$ib%*L?KtQbjc)jw_oZIizeC3r;|lKgV$$pizS>C&XXCG?(VHltBG;o zVJ;%#m*8dn(kL)9!pvf#5R0HD=)M!8Z|mol!fn>m2jXNtD|N+w5k z-td9sW+GBQ%UXKf0I^;d_UResB0@IjAe(cRJ@5w%M1+g0+a(qN;Pn}{ws(-;*u*&S zln*IgpFd!RUfqxVtPKG8cz*@!b(IeU0Od;6dh4_ekj(Xva&!}os6W=?`eQ9l%751W aExrJ+>DpzpbgBRV0000Ik{v2 literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/items/crystal_lithium.png b/assets/hbm/textures/items/crystal_lithium.png new file mode 100644 index 0000000000000000000000000000000000000000..090691af546a8690247b646c4a0b7d648f69d3c1 GIT binary patch literal 442 zcmV;r0Y(0aP)~C1GO$bETi{7_G&9d();i0+g%Si;8 zZnNzG&@9iOlmg2$lSBo>Fa%>PA}6v1A%saLBNiWDKj&HD9FyV5Y|164Tr44*&4P1o zXxk?-IXqyf)B^J-TuMqOl4g~uR4M}M4f;4aI)+jTe!+)d@Xfnn(CD;~P9#x(d|G1x z0GxAV_A=Pt*+m$J=FPM9H9D<`UV9$7Tn+&6@LWf4&^L2%0bnv5InDM<1VpiIB*z}2 kS>x}ewtU3m_}l;3H;)0-i0@Sg!vFvP07*qoM6N<$fVz>gg?aPavA*ncswRyF8vEQ&vWuTAI(pGo8Z9! zB0^o)9}Sd&pK>~#hB5H-`TUtd7>C0FVDLZy=Nw(vjW$pQB7%tEoFmIJ1v=+w+ZN}X z$_gc?Uia;G(;|PiZ3{rxby#cJ?RIRp+i?l!^Em;AEX(Nop5=0>MZRIvG%Oa2$joR9 zbzN(*56|NDdI4~~UMY$~Hx+GRwOV1VRoda{nHXatA5uSAMD%BwPNxy5EK4?<4SnBZ zjKLVAd1X*l6(YiZzyDwXV6A07pEH}yXqrZSn1uSOs*3c6eyrDP03MGAWm&2ZDL_#a w$^CwhK>i(umlK+(YyAE=1b5!v@45epFWMK#-(KaHX8-^I07*qoM6N<$g8VbC0ssI2 literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/items/crystal_phosphorus.png b/assets/hbm/textures/items/crystal_phosphorus.png new file mode 100644 index 0000000000000000000000000000000000000000..574b1cfd9d95fe6cbabb0d5977bba13f461f6599 GIT binary patch literal 435 zcmV;k0ZjghP)#c>^^)5Lig@3iPGylv#|E|LdsN-pKe&Ewtg_9$9 zWL0-$Rc9L+h`%P(@pMa800^W{I9uZXGypJ#;p{~ZP|hOxJ`M{Nx{DXLHXhcw)v>ec83LtGXsQi=QoFsuD{Cm-;{0G6B^=(5S?#eWQAy3Y+zJGqyU`r#)#Culr^y>D{SM? zpBEa_vgS=y!U1d4@$8>)&E!D(_9^#pa-=Sb69i*4O-eK=*}PTIPF@M5&$ZlIQUTB> zw^n0B6aRmoFkby3$sqv#2jk4x`wNZ d;>Fy*;Tz2jrbu6*6srIL002ovPDHLkV1lutw~PP) literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/items/crystal_plutonium.png b/assets/hbm/textures/items/crystal_plutonium.png new file mode 100644 index 0000000000000000000000000000000000000000..b7631383e25f7ff5ba8cc9564883517f2e2efc3f GIT binary patch literal 453 zcmV;$0XqJPP)%JjV3g@ywz&T&=?^lsf+K~0vZPIbnmCR7w}Zjb3l=1_S}pbt_cH~wY#Sj2X*&B| zf*J-8LeTIUyuH66gaBY1$0Q$#mX()kszOSc`MwXJhsSZuMx{cU&Im^#zVG9C9_@B} z@q(xOM+3+jUW3W!gq`heJ){Vu*9aj5QpzHMI!j8ahgFQ@7=YR-PhmP z@Aa{4oAa|X!choN*dC5Twl=r$Jdfx#(mt4Zef?g)pf~SFZMO!%Rp*M}A<#aQ0A7M; vV|X_#fK;6iC1=xQS(y#_8g zNfKzS(RBj=Kx>U*7_2SVYCuJrzFPu;wbo<{QcCRid+c@}o`Qgqx<0Y(b_*c{`o2e! zBo;&sg%Be<-YY1jESQ2++-^4jz-F^S+gA3atb#1dFrUvMrL?l$FDY3rm*D(h|A~M= zQN-+1P9_tNRF);y>oxkm2j?7|^YIRfqCylg9FND53ILE&Vm6y$I(>r>!rq0hzoMu- zzwSO3iv(^b literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/items/crystal_trixite.png b/assets/hbm/textures/items/crystal_trixite.png new file mode 100644 index 0000000000000000000000000000000000000000..7f2b750596d9a494b1d14b92c8b9975df9433f01 GIT binary patch literal 414 zcmV;P0b%}$P)>a~8l)4=Wg0R=v1GL1KUaYCM8( zy}Cdyxm<(koA>~62zr*vvZZ<^P&!JecO=Oq$02O)O84nI)H_t0E!6GR5(&ee10=>o|3(6w;c09Q=Ay?*uab}(U{~1{NKU`d2 z4G43buuNWLE{LLt^Jeo#>*tqAcVMt2@;r}oUDurFCj9wH)PHpy*Mj3XoM9v;7Q|_q zPM0CX1(`ZG34*{>M0uW*)?dU1m>S11m1W6InFL(dHPu!GAXMs%ilW#W_`c7LEX&wr ze-eO5udz5z=ZmC1+pe&_%I002ovPDHLkV1kUWm6!kk delta 256 zcmV+b0ssDs1Hl52Nq@rt01m?e$8V@)0002iNklRdxYMTbt9e{E~!D@G?@QfPtqN>cm}t2JwB*rg}3_d!A-O;aqB1c#zP zB^&Sc0z*=lFk&vBNL^ecB00~us8wxWjT7_O&Hy1woQ@?-fO&S!vdv(mD=DSy3b@GX z6(C$>N($)(2#QQe4y`q=>V_FD!jI_>#$=LcR~jVW8y)#mV2putZcgAVgb@h0lY=BX zHTXpsky4IId$j(@cX{bV4kS9Q{x!Eha8J0 zY_Lca$1&#`(=<7fkv0(rM-Azp_=v~ZViM8<-L+`aYPM7cbZ$CGk_2o(U0v5j@1@6+ zx)Wh-TPn*$1PQB^D!NZyY|@L#=Y%KQmu)s#B+?j$p|bQ0Xa}}!s}k@$Z?1@-uA1rB z6hRPV2K7cArE9GcPn0WVjD{l&h6An%>PYiiqeHig)j9YGKivxyX&p~6seS9 zgGYh<8lSJP_)M0GW*~zHdZzL8+>^We77wad88bULPHT4k1NqOiju-&G0iyB8n1Rl7 QDgXcg07*qoM6N<$f+OOt`~Uy| delta 262 zcmV+h0r~#21IGf8Nq@rt01m?e$8V@)0002oNkl2%f^X-Z{T z$`z2N$7g`3$UDiT6(EeflN42TLzZP2aAAJTKj@PwaaRt?m;7q!Q?P9tj^l_ENRn6x zMD3)YB&PzsFe7<>?v>W4^^vde_yG+g-gqd6eAL1Wd<6qPMP6m#4wqSocz(fKbpQYW M07*qoM6N<$f*&4riU0rr diff --git a/assets/hbm/textures/items/motor.png b/assets/hbm/textures/items/motor.png index de87f85eabc285fab14f11b5b8837a8b589430f6..cd9367bd2f6797a8ddf3eac57af609157171f3ee 100644 GIT binary patch delta 312 zcmV-80muHE0@DJJB!2{RLP=Bz2nYy#2xN!=009a~L_t(Ijm?rRj)pK4MNhv`2qdDZ zK;avL#&sWE0c+sf0^48-bvP0Po&?w6*Z_hN69|*xCzFhrtNLE^PVT!c{2N(oS8MJ1 z+qu_v@ZKY(WP=n%u@*(~2o%S{7_(+s#xzajc@BWqnlw$t>3{Um0f2K(bX|v(lBQ|) z{+*L=fXzYIb$IX5TGRJETI);5>#Uh&8A>VYy585gf_xl{aU9=45R^g)q?7>6^USg= zXsrQ=GZx^prw85kH?(j9#r85lP9bN@+X1@buyJR*x382Ao@Fyrz3 z6)8YLi4xa{lHmNblJdl&REC1Y%)Ao4ywnl}6Fmbx)6`a@RG^w3PZ!4!3;(6(FY+Ex z;9v=uUc}t~@pj^zv$+}TP6~F4nf%?Mux(F*(8P-Pn{oGC_?L<}-k9&kZ<)Swt5y-$ ztTeY{68TCgI~guT1+(mJpV1~=z_IoFySyYRCYKGI4E%g&Nq@os01m{?kUNGzwsX(ip(W$%)~@g$oSt-o0axl9B@Q zvAYDT0V*mgP!TM5K79B9W_x;yfN5la)qs8bPBBiHFlGU4``^ER84e#l%rML3 zE+bSL1>p1o2!L$={P{DOoqL&)Vf*$sU^X(qYXHdU-@bi=@~{J(27tT)(tP&pS%$Oe n0$80-6sWAk9(cnBFfafBVFVs74ihqxB(NCMgywk z;4=h=0SpZ0FC`e#q`xq{d-sk(N=gc+Ay^Gy6;ff~j?@CP-+#P$!|>t52ZrD8&N6s< zih#wC0agQkzuV3@VZsEk?SKFNW%&5yFvFd)zl>066oAtUAON!c^XJcCcJ5_HhV9$m zfZ50ZuK^(2zkT}#{QsPl5B`@n?flQcAod@ZN+w(qnVFdkH*el#*tc&V1HX(d11>{w8h{MGefvg? zGIRj(2ER-&d0t>(U|_g&=MF*JiShykKozg^M*#!?0Q$=#tPl=K~y+TV;BVt zj8GZ_Okwc*5297%RTw-T_Tf~A6@WB9^Ih=&fB&QZKjJt2-yvTFHVhkJg3=g3(#eV8 z=YkzxDxH()k0z-s`=_HW<5L3!8#P6I&Rc=_@r u!`X*t8N$o1kQR-|pt2Hs;0+tVzyJVo9!9+7$6)vX0000 delta 189 zcmV;u07Cz#0`38jB#|)~f4~3$4!{9w)`?^#A|1|No!)F8JTd zU{9JMU;}`fL56?~IHXxanjz>0?2s=48{p|F0#!i-02zX8`<*gjGX|0k0BI)6b`YT0 r01yBfLYDK9L1iTa`I?6UU|;|M@;O)D_G%cy00000NkvXXu0mjfV9!U< diff --git a/assets/hbm/textures/items/nugget_hes.png b/assets/hbm/textures/items/nugget_hes.png index e9cc511fd438d3c473e11e80d4675c632e9ab40c..9384390720b989867cfd92ebb9bbb234cebcd39a 100644 GIT binary patch delta 286 zcmV+(0pb4I0l5N@B!2;OQb$4nuFf3k00004XF*Lt006O%3;baP00009a7bBm000ib z000ib0l1NC?EnA(&PhZ;R5(v#7zGTBP#ObpdN}#pA(ip(f$%)~@g$oSd-@RktmXcz?Wq$}(13=D(f$wkLF#P=R zf#K!Zvkab|B2ZBTz-j=<&zmPq0Neim?_Y+ehYvH{vVDLx9B_I81VFa``urKp&b`dY zuzmX*FdG@*H2`G$pKsrwJnR6c0U&RDd-)RVcU;bggG~(o|HCj;2o5SM8L$Q(3c#k3 kSOE6|C5BL-nHPZp0H&W=D(#V|P5=M^07*qoM6N<$f(to$b^rhX delta 190 zcmV;v073t`0@?wPB!2{RLP=Bz2nYy#2xN!=005CmL_t(IjbmUK1&p{PI6a*H!`R<< z?8B)Jr)J$*Q~vk9eepl-&b9wcmd5{asb#_?kq{ihaP$2;hU5G8F-Y6mGT<@| z&$n+lC8PhdXx|o*q8T@bCCptZMPP;KQ9ecx@+W05`>e)58gG3@|W2!(bD` sf4Cw)21e529Nhp?0Xz&SF@z$`04WVPXuCU|*Z=?k07*qoM6N<$f}5vRNdN!< diff --git a/assets/hbm/textures/items/nugget_lead.png b/assets/hbm/textures/items/nugget_lead.png index 15a5e07916875173ef4f4ad6576a5fa25b037ba3..c77a0b593df287329bc47c72355b258782caa8d9 100644 GIT binary patch delta 222 zcmV<403rYF0iFVoBnkm@Qb$4nuFf3kks&C5vq?ljR5(v#7zMb2kdWMe5H>S&`VSSt z3YefY3IJ&g3JPMFGGz*bgM$MDK0~k?00K@3e*t<8 delta 175 zcmV;g08sy)0__2iB#|*Ce;9N{SaefwW^{L9a%BK;VQFr3E^cLXAT%y8E;VI^GGzb& z0BcD^K~y+TV;BXvfsl~ge;9@e5f4C`Qc?>3pFMl?e?UOYe`aQW(hLC^0MZOH1Z04N zgAZwjpc`Oj<^(pt(^CYhf(QUI1ljgGWx@<38vxQwmhB)wu>l|eB{GC8=Ocs4N(S;Z d4+X%$008zjK+y`8$rJzp002ovPDHLkV1f}mJ$V2C diff --git a/assets/hbm/textures/items/nugget_les.png b/assets/hbm/textures/items/nugget_les.png index 027f31e77b5e0232f72c6b76f3efa74185464734..abdc97264ef8c30caaf40a168703ade308438804 100644 GIT binary patch delta 293 zcmV+=0owlB0l)%~B!2;OQb$4nuFf3k00004XF*Lt006O%3;baP00009a7bBm000ib z000ib0l1NC?EnA()k#D_R5(v#7zMb2l!C~A5Vm!(_zxAr3YeiZ3IJ*J4+>()%FbqB z=ip#qVEWVW=-!h?s5A;-g3=hk$;pY~!i5VA@7}#*kd%^Qz<=cutOh8ns6bf^3~%4O zVfgsr1H<{VXBj*_MWCVxfYpG*drmM;nlJ%u``^ER8IB%4%y1!I}wEvfGo%_Ff%ZmRzf~@~>sb#_?k(rUfaP!tJhJE|?F<9H$GT<@| z+qZ8xC{;8%>V!Z07*qoM6N<$f|Z?B+yDRo diff --git a/assets/hbm/textures/items/nugget_mox_fuel.png b/assets/hbm/textures/items/nugget_mox_fuel.png index af702bf7e38230bfc5a65ec36b0b9a3a07d34e56..0f74404359e1b0b813b25641f7fbe091cd069075 100644 GIT binary patch delta 276 zcmV+v0qg$R0j~m(B!2;OQb$4nuFf3k00004XF*Lt006O%3;baP00009a7bBm000ib z000ib0l1NC?EnA(#7RU!R5(v#7zGTBP#OcM>Z<(*(Mn3n3_CY&$Egmh1W0p0Kmdb< zg$2W%J9ilN?c0yj5GE*%0brWnym`YQAui6~?(Ye95jwzX0Ds8YF!1)xTZYeHJ~Ldu zevQG?Qv@oC09XwGId|5q*GV`VGp%4saR(^2UpoFTsAt<$O5U#PI(=3`2$Bpt6zyYv7>(Y#NCLa4%3|2nCuM a7yyfYSElsqgbgA90000SrHowxLuLqI<{@SbrGxsYlrI@~#RZK+4Im3I85JDgM zOaK7H7?Dzfs=_&ELQKF@tu-_E9vz-NcOrs_Kvhv|9nN9;0yYtu-u@M^EN1Sr4FKmq r*wJs(2b;NbQ%}IJx@WKgSt>pNaiBGx8KWhYw)3r>6** zMg~|7IJNH-3e*`-ZW((>={jrVeU53l4~ z{w#I&w7>S%pWpnS(lq7&nLlU#7p_b_q`Gk3x^o4epZT(ZKy-98TTI&n69&ne-`{#A zQdc;5_`Rt2ay(VfF3-JTtn l+2R^CeU3B44$rjF6*2Ung9{}QQZIl diff --git a/assets/hbm/textures/items/nugget_plutonium.png b/assets/hbm/textures/items/nugget_plutonium.png index 1d8f82470f803a665937fd218045be775911f4a3..df2e3bdc00382f197943087c68e1395296c2654f 100644 GIT binary patch delta 211 zcmV;^04)FW0h9ueNq@os01mm51EfbW+05HvO-@av#l$2n=_R{`Bb+nD6N+0;Z7xRs%rJoj-p8l*hnu_Uu`P#U__Y^GpH=Alse`)W3cE8!#Ig z;57gQzJC1%Wnl+64FGxL`STYHH*Q>KI34o`tMiEhm6g~7Z`c3^1^`kSKXc0{AO8RV N002ovPDHLkV1nalRpI~u delta 178 zcmV;j08Rgt0`mcoNq@rt01m?e$8V@)0000ObVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-)@NWrZ?j0001FNkl!MbN_y=k^lez07*qoM6N<$f`KwU-v9sr diff --git a/assets/hbm/textures/items/nugget_plutonium_fuel.png b/assets/hbm/textures/items/nugget_plutonium_fuel.png index bbf0aa557c14e9cbee52033aea0ddeaad33c83ee..8bb580da68c425322d77381fa3d00f524ee51988 100644 GIT binary patch delta 298 zcmV+_0oDG{0mTB4B!2;OQb$4nuFf3k00004XF*Lt006O%3;baP00009a7bBm000ia z000ia0czHX2><{9+DSw~R5(v#7zMb2greMk5Vmx3_zxAr3K*d@3IJ*J_4Q>iH8o|p zckdpg#sDzQZ{NOUkd%~Qz~vIG1}G{jL4R2cU;{pV`owVK#&rfy zPZ6jn0$?=&P{8SwS%S1>#GG9$zG?Qg(rWPsNI zknLZ;euMI`0}KQH|A&MX$Q!R-y$1Uom-FFZ6Hprr!wi6d%1Q>TfrkQM8ey0e0QbUX wMuz{4jEoE*Od|?_8{qq&fss_(85kHC00cv5E8{_VWB>pF07*qoM6N<$g6NHU?EnA( delta 180 zcmV;l089VH0?+}FB!2{RLP=Bz2nYy#2xN!=004(cL_t(IjqQ=K4a6V}MPF_SdN0BN zmNF1yFiHdiFpdYH=9){CBIb0Wy;mXm`++|2XY&TCI?i*g)y=)UWf7s2f`|}f98Wn{ z0FZMgr363-!IijzJH2;zHtj$}Ff+`I*4krs`T{eX-u_jvj4i5;*$=>{gM)E}b~d*c im%HFst`1ftOUrND&@kSaTUs;#0000iH8o|p zckdpg#sDzQZ{NOUkd%~Qz~vIG1}G{jL4R2cU;{pV`owVK#&rfy zPZ6jn0$?=&P{8SwS%S1>#GG9$zG?Qg(rWPsNI zknLZ;euMI`1Dpncyz%PQYp~yOIUf%GXEFSTVWb2zgTR$Q0hFTxh;d?jK6uIFA@xSg=vd%@KZiF^)%9NY-rd~I+bklq)({bL&g&}Y z3IJ-Ylu`glDY+6?aAwZw&cY5v1T(|T7-L*!!yA}cc=}htHY}>Tq91@)2kXu!bUgfC hLe7$3*zREa2~TK@E;sl$TS))_002ovPDHLkV1lj)OXUCn diff --git a/assets/hbm/textures/items/nugget_pu239.png b/assets/hbm/textures/items/nugget_pu239.png index e8a719d76d9d841df6c34d9cf28c3a568b12c0df..6357bc64be5e71c6080ed0a984f15be683d20c35 100644 GIT binary patch delta 290 zcmV+-0p0%10lfl{B!2;OQb$4nuFf3k00004XF*Lt006O%3;baP00009a7bBm000ib z000ib0l1NC?EnA((n&-?R5(v#7zMb2greMk5Vmx3_zxAr3K*d@3IJ*J_4Q>iH8o|p zckdpg#sDzQZ{NOUkd%~Qz~vIG1}G{jL4R2cU;{pV`owVK#&rfy zPZ6jn0$?=&P{8SwS%S1>#GG9$zG?Qg(rWPsNI zknLZ;euMI`1Dpncyz%PQYp~yOIUf#u{xkfCVW(eEd#IN;CW4ODf#*S&W)_wY802(2|lgq-ub%eex8 zS}Ua#08&b>#1&kbbGoyz0};W@Ff+y&x7qLpW)`0QRj`e!t}5sU;MKu%@d>rV?N diff --git a/assets/hbm/textures/items/nugget_pu240.png b/assets/hbm/textures/items/nugget_pu240.png index aedab2a6940e6e8261a3f9f95acf14d964d1635f..e2e5b511bf6e5cb3692c89050ca2c7db91e06533 100644 GIT binary patch delta 288 zcmV+*0pI@80lNZ_B!2;OQb$4nuFf3k00004XF*Lt006O%3;baP00009a7bBm000ib z000ib0l1NC?EnA(&`Cr=R5(v#7zMb2greMk5Vmx3_zxAr3K*d@3IJ*J_4Q>iH8o|p zckdpg#sDzQZ{NOUkd%~Qz~vIG1}G{jL4R2cU;{pV`owVK#&rfy zPZ6jn0$?=&P{8SwS%S1>#GG9$zG?Qg(rWPsNI zknLZ;euMI`1Dpncyz%PQYp~yOIUfYT5^D7f@DRS$h#Iw(l?)6QE{I@tJ{oBE%TS zRn8Rvb1@Q+3jhEB07*qoM6N<$f&`{bQ~&?~ diff --git a/assets/hbm/textures/items/nugget_schrabidium.png b/assets/hbm/textures/items/nugget_schrabidium.png index 33406ce2f2a98fa224cf024ea641121d8c680c9e..b276060c58359e849ca0f60611dbe3672e839735 100644 GIT binary patch delta 218 zcmV<0044wO0h`uYsG48d*y z$k{OP<_!bGvu6wpj~+32dWt{=5dgaZKtG?Wu7=qD{W}B0*;BI&ccivs4F{ZF00WTi z@85%&xtAFkwr>aW(Exq}K(@br4dq}5xD5bB-K|?-zvFT~QJ}Jt0c+q58^FK-0Haeo UTVleIo&W#<07*qoM6N<$g84sN{{R30 delta 177 zcmV;i08am#0`dWnNq@rt01m?e$8V@)0000ObVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-)@NWrZ?j0001ENklNunX>2K4uX4e<07fhr&dK)nI8{Z5%M1L+2UG?QgJ2r5u)00@8#A#pA(ip(W$%)~@g$oSt-o0ZG7Z+#1WqSx#13=D(ftN2|GJO90 znc>{ovkab|B2ZBTz-j=<&l4t00NV}%M-CrmxMO?`YdGNa0t|p`2Z7wnj11eizX7w6 z0bT<@&j0r98tub$bicboCY9+ zH*ek$qYM?mypgbE9(i71U|?W)_wF4*+llf5*?=#|2e0!-0T%=S0N~dx_jK~1?*IS* M07*qoM6N<$f}gKP3IG5A diff --git a/assets/hbm/textures/items/nugget_u233.png b/assets/hbm/textures/items/nugget_u233.png index 79bfecc62ad3072d2094ba782536c4936a7e5c65..b10284e2b1b8046335d0f3c43125a994ac28901c 100644 GIT binary patch delta 293 zcmV+=0owl80l)%~B!2;OQb$4nuFf3k00004XF*Lt006O%3;baP00009a7bBm000ib z000ib0l1NC?EnA()k#D_R5(v#7zGTBP#OamTk8J@(aI{y467Ee!>JCd1W0pmNHBx7 zl{Lf7TQ?c@?Ae3U5GE*%0brWnym`YQBQ3)a78?Y15jwzX0Ds8YF!1K}8;18E-ZNai zdX>S`Qv@oC09XwGId|%`sbJgx{{72v>eMNQjV^CU^8yHfZ2$E66PTTQnUP`p_BUWQ zGQev9$o8*aze0J~0Zs!z-gy4vIoR*GoDT>8vl#xvFjNQ*Dk~YV1|ACd|NlSO5Ga=< rfHw??0bsu&+aAt14R`X!1PlxS!|zs;2fPP700000NkvXXu0mjfAXa$C delta 187 zcmV;s07U=50@neMB!2{RLP=Bz2nYy#2xN!=0053jL_t(IjqQ><4g(#!2ctnWDIZ2E52WgHTk p`oPC@Jnh|B>I(Tq+dbGW;RV8`GiHPCW?TRO002ovPDHLkV1l){P-y@F diff --git a/assets/hbm/textures/items/nugget_u235.png b/assets/hbm/textures/items/nugget_u235.png index 2026c787a7c86bdfb69cc507f981582711d0ed16..915f81807a9d87ebf61eb2a5eb8f7a467b7ed576 100644 GIT binary patch delta 293 zcmV+=0owlA0l)%~B!2;OQb$4nuFf3k00004XF*Lt006O%3;baP00009a7bBm000ib z000ib0l1NC?EnA()k#D_R5(v#7zGTBP#OamTk8J@(aI{y467Ee!>JCd1W0pmNHBx7 zl{Lf7TQ?c@?Ae3U5GE*%0brWnym`YQBQ3)a78?Y15jwzX0Ds8YF!1K}8;18E-ZNai zdX>S`Qv@oC09XwGId|%`sbJgx{{72v>eMNQjV^CU^8yHfZ2$E66PTTQnUP`p_BUWQ zGQev9$o8*aze0J~0Zs!z-gy4vIoR*GoDT;+{~7+nFjNQ*Dk~YV1|ACd|NlSO5Ga=< rfHw??0bsu&+aA7!5qI*&1PlxSQYls&hm>*L00000NkvXXu0mjf06lm~ delta 189 zcmV;u07C!30@(qOB!2{RLP=Bz2nYy#2xN!=0059lL_t(IjqQ@V5d$F%ME5-Ifm999 ziJKr-Mkx@H(1goU2E=l5_FRDQcu2jG1}zWt0scCy1T*V9&N-XDn{}CpkWzy89w7vs z`Ah%+#28UZL2C`pITK<6uIjy;x%=$!tXYW&B7!jnYOT{gEH-~2BFopm0=C7>x|#rR r?!iOxF+C4^HJCd1W0pmNHBx7 zl{Lf7TQ?c@?Ae3U5GE*%0brWnym`YQBQ3)a78?Y15jwzX0Ds8YF!1K}8;18E-ZNai zdX>S`Qv@oC09XwGId|%`sbJgx{{72v>eMNQjV^CU^8yHfZ2$E66PTTQnUP`p_BUWQ zGQev9$o8*aze0J~0Zs!z-gy4vIoR*GoDTwE3AK6#cnIHWM2*_YN(P1t7euf+9}fQi q|Bqq_DFAO65FG;udI3LRU;qI3KUDzKkM0000x5(6O&h2M7e4%nzV z4uy~70G*xz6oz~C3~_*_X4_do=rX`rUf8rRU>bq%|i3lMCSZm>& z>m#2E008ejQc5VLz!;-KRKQuaRyDVe4v(5U5kW-IT0_ox*f@vj4@6}8`cJ^Jn7Pj; t033U8f8c9+J@ws~>I}J}i-AP$|}kX zs}`@rsSc|INON#VFoU&~HN(wYHyQTq*@M#%CMb;oV4B~&dBY$hEyEBN8w7R{I>2fG z$k{OP=Jgwf_aELfT)ldg!P8R&DvAJD4FEZJ>a?j~+yDOk%UE#g)G3CIE^kQl0tkR? z|MdA2n4No>kzxDxH()k0z-s`=_OD;RLV4H$P6I&Rc>dx!*zdTUPZX%EWWXAD!v-)g Z0016#Ahz~Nr(^CYhf(QWf2F&(5Wx@<38vxQwmMrZcK(PTJ0Mkse^N~Si hB?I}IhXP<=008^UTyS&4ZM*;g002ovPDHLkV1ns8Kve($ diff --git a/assets/hbm/textures/items/nugget_uranium_fuel.png b/assets/hbm/textures/items/nugget_uranium_fuel.png index 37a25f26ea09479478e03ab1cc3a5a8356ec00a7..0e6ff17f836fbf520281313487f44c75aa95c52d 100644 GIT binary patch delta 299 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 literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/items/solinium_core.png b/assets/hbm/textures/items/solinium_core.png index 1415985e50e720dc2902d57f556974ab636fa1e8..bb9e751dffc69f973cf92b7698e82b98183f17ca 100644 GIT binary patch delta 354 zcmV-o0iFKL0{sGzB!2;OQb$4nuFf3k00004XF*Lt006O%3;baP00009a7bBm000iZ z000iZ0XPLyBme*b5=lfsR5(wil06E8KoEt;l!632g9i}Or;xO1%t=z^45`vsc>ymG zEK&*vv9a+2Ha3E-;SJ7a*B_ANgD{hI-$_ zpwFHp32$F2FI%+_lmRY-s;ammkSJnQ#|S#cTfl6%pjQ+TB0&4Y^R@mKfXpiB`IOm* zBpa5h5@m6Eb+Gy=Tc@M(U@8<=4YsnlgY6J~0Bnq^H6S65PXGV_07*qoM6N<$f`q-6 AmjD0& delta 305 zcmV-10nYyY0?Y!CB!2{RLP=Bz2nYy#2xN!=009F@L_t(Ijm1*EYQr!P{@MpHei9Ge z1BTGeUECLFz)Ln|X*LR1_HSgI0+0KK*tC0FVdQ&MBb@01UZR Awg3PC literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/models/weapons/grenade_mk2.png b/assets/hbm/textures/models/weapons/grenade_mk2.png new file mode 100644 index 0000000000000000000000000000000000000000..ac046b160a7da958b158fa5b06d6e0ef48241d15 GIT binary patch literal 2139 zcmV-h2&DIkP)_CaS+ zpLTrT>=sBvAaE>EYOO1QN-6J9TOpoO8fl@tXSJkz1TyU-Wqol&y1T2w@(v3MZtm-2DeOy4 z3O~=Y<(zFjMA%s=o%j>+= z%7@j;*S8H>k6%`hy1s3OI6bee+~sv1N}iq%tEbP^%vNJer!@-dwOg&LfYWIeR`Ws# zR*q{loxfd&0}fAX(Q^KF9Y#1kAFS4DFaLWT5pj50X|P_q&F9N_HpXagFPDKK(ZE8Cr`y0iET6IMVtOhM?s)_KiK2ycN#0G!dBLr%y%}=h0I7K;>J^9_avPme3Y4@T_Z>6Fso zs+5wYDGVOgI6RfXkqWc8$~*X45g_gxdGoxsp7XidY<2K(Yt7zXE+Y@8Qy$OCFp7$m zug!X2cCyG|<+#Z#XK3Er%Vo5`r{{xZ#(1sOrgYeOM*qvRnwxXkaW>~MU&WifZ&eX1 zF^1`_lTAL$l9RZ?bYkwx%ezw@wS&H>=K?Gp=(q?bCzP@>&)ztCu`mIJ^f20!cG1kmfjMW_l)w8V8i5Z?_Swl0r=m_p<_WgA! zlU|#7p7dT}2zpu}ILTv6c>g|_(K4_B`)tL{)?aH)UwRT0y>lpYq*Zu+MXNBBxPT8O zUtY5Fxuqy+%9onTJ$i^?uj_Oe4Z(9YR*zYT=3i`2r~J+X<(S@WBpzl_A`a&p3v#o7 z?D%EcDan25De*8psSZg7)V@+sSakfd8Fw@fn#4u@Z!zR8mW<3h_0d|G#-e9^*wT13 zl8j6lIG@*b6vd-o8Iq}$b6$D)^{?|-)dDnyLS@Ge@ z*PCZsYj*y29R?PMOBU@BW38gjE@G?s`3pDsDb+1;}*z{^mi})JE6q zbyw|pP~Z`bM^EP5t=v*>vcBcI^a^v`0}zJ?F-9Hf&CIsal8CHhSmu$ZADvB07zxQR z^yscM;m;j>N9H>!$w%a8390X1ULNsi-IUVC!&-zd(PRMM)o4Cnz3?Xv$I^JtfilT2md+EpYKCEnJ6leSN?p zhs_I9V^Hg@jeV!0d%C7i8cUxPn%sFS44GrP=esSh?5%2x&S7MgQg#Ohy>|=0{`O0k z2XFllO$vvw9<=K~U7^KSDtw;9hqrv}t1rtU-g^K5GXns^yR{ZtYaHuu1H4N3xpNNAIWRMb=mADVpp*h|!N9A8 zM$C+76V_S~eG4Qah)DcBFwZl*_we5TS^}*#lv4Zbfj=-%RTY4rC1{%F0m3;406R!@ z1I!F&-Wvxa$L7acbOUu=pPrKEB)= 180.0F) - { - this.prevRotationPitch += 360.0F; - } - while (this.rotationYaw - this.prevRotationYaw < -180.0F) { this.prevRotationYaw -= 360.0F; @@ -192,7 +183,6 @@ public abstract class EntityGrenadeBouncyBase extends Entity implements IProject this.prevRotationYaw += 360.0F; } - this.rotationPitch = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F; this.rotationYaw = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F; float f2 = 0.99F; float f3 = this.getGravityVelocity(); diff --git a/com/hbm/entity/projectile/EntityBulletBase.java b/com/hbm/entity/projectile/EntityBulletBase.java index ad1a86e2b..4e3e0d51b 100644 --- a/com/hbm/entity/projectile/EntityBulletBase.java +++ b/com/hbm/entity/projectile/EntityBulletBase.java @@ -94,9 +94,9 @@ public class EntityBulletBase extends Entity implements IProjectile { moX /= f2; moY /= f2; moZ /= f2; - moX += this.rand.nextGaussian() * /*(this.rand.nextBoolean() ? -1 : 1) **/ mult2; - moY += this.rand.nextGaussian() * /*(this.rand.nextBoolean() ? -1 : 1) **/ mult2; - moZ += this.rand.nextGaussian() * /*(this.rand.nextBoolean() ? -1 : 1) **/ mult2; + moX += this.rand.nextGaussian() * mult2; + moY += this.rand.nextGaussian() * mult2; + moZ += this.rand.nextGaussian() * mult2; moX *= mult1; moY *= mult1; moZ *= mult1; @@ -359,7 +359,7 @@ public class EntityBulletBase extends Entity implements IProjectile { double motion = Vec3.createVectorHelper(motionX, motionY, motionZ).lengthVector(); - for (i = 0; i < motion * 2; ++i) { + for (i = 0; i < motion * 3; ++i) { NBTTagCompound nbt = new NBTTagCompound(); nbt.setString("type", "vanillaExt"); diff --git a/com/hbm/handler/ToolAbility.java b/com/hbm/handler/ToolAbility.java index 457ee7d0c..8dac80b46 100644 --- a/com/hbm/handler/ToolAbility.java +++ b/com/hbm/handler/ToolAbility.java @@ -6,7 +6,8 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import com.hbm.inventory.MachineRecipes; +import com.hbm.inventory.CentrifugeRecipes; +import com.hbm.inventory.ShredderRecipes; import com.hbm.items.ModItems; import com.hbm.items.tool.ItemToolAbility; import com.hbm.main.MainRegistry; @@ -200,7 +201,7 @@ public abstract class ToolAbility { block = Blocks.redstone_ore; ItemStack stack = new ItemStack(block, 1, meta); - ItemStack result = MachineRecipes.getShredderResult(stack); + ItemStack result = ShredderRecipes.getShredderResult(stack); if(result != null && result.getItem() != ModItems.scrap) { world.setBlockToAir(x, y, z); @@ -229,7 +230,7 @@ public abstract class ToolAbility { block = Blocks.redstone_ore; ItemStack stack = new ItemStack(block, 1, meta); - ItemStack[] result = MachineRecipes.getCentrifugeProcessingResult(stack); + ItemStack[] result = CentrifugeRecipes.getOutput(stack); if(result != null) { world.setBlockToAir(x, y, z); diff --git a/com/hbm/handler/VersionChecker.java b/com/hbm/handler/VersionChecker.java new file mode 100644 index 000000000..1350ae95f --- /dev/null +++ b/com/hbm/handler/VersionChecker.java @@ -0,0 +1,50 @@ +package com.hbm.handler; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URL; + +import com.hbm.lib.RefStrings; +import com.hbm.main.MainRegistry; + +public class VersionChecker { + + public static boolean newVersion = false; + public static String versionNumber = ""; + + public static void checkVersion() { + + try { + + URL github = new URL("https://raw.githubusercontent.com/HbmMods/Hbm-s-Nuclear-Tech-GIT/master/com/hbm/lib/RefStrings.java"); + BufferedReader in = new BufferedReader(new InputStreamReader(github.openStream())); + + MainRegistry.logger.info("Searching for new versions..."); + String line; + + while ((line = in.readLine()) != null) { + + if(line.contains("String VERSION")) { + + int begin = line.indexOf('"'); + int end = line.lastIndexOf('"'); + + String sub = line.substring(begin + 1, end); + + newVersion = !RefStrings.VERSION.equals(sub); + versionNumber = sub; + MainRegistry.logger.info("Found version " + sub); + break; + } + } + + MainRegistry.logger.info("Version checker ended."); + in.close(); + + } catch (IOException e) { + MainRegistry.logger.warn("Version checker failed!"); + } + } + +} diff --git a/com/hbm/handler/guncfg/GunEnergyFactory.java b/com/hbm/handler/guncfg/GunEnergyFactory.java index 8ca7d934d..c1bbca871 100644 --- a/com/hbm/handler/guncfg/GunEnergyFactory.java +++ b/com/hbm/handler/guncfg/GunEnergyFactory.java @@ -69,7 +69,7 @@ public class GunEnergyFactory { config.reloadType = GunConfiguration.RELOAD_FULL; config.allowsInfinity = true; config.crosshair = Crosshair.L_CIRCLE; - config.firingSound = "hbm:weapon.immolatorShoot"; + config.firingSound = "hbm:weapon.flamethrowerShoot"; config.reloadSound = "hbm:weapon.flamerReload"; config.name = "Heavy Duty Flamer"; diff --git a/com/hbm/handler/nei/CentrifugeRecipeHandler.java b/com/hbm/handler/nei/CentrifugeRecipeHandler.java index e45ea5dc2..34c40ef2a 100644 --- a/com/hbm/handler/nei/CentrifugeRecipeHandler.java +++ b/com/hbm/handler/nei/CentrifugeRecipeHandler.java @@ -6,7 +6,9 @@ import java.util.Arrays; import java.util.List; import java.util.Map; +import com.hbm.inventory.CentrifugeRecipes; import com.hbm.inventory.MachineRecipes; +import com.hbm.inventory.RecipesCommon; import com.hbm.inventory.gui.GUIMachineCentrifuge; import codechicken.nei.NEIServerUtils; import codechicken.nei.PositionedStack; @@ -18,7 +20,7 @@ public class CentrifugeRecipeHandler extends TemplateRecipeHandler { public static ArrayList fuels; - public class SmeltingSet extends TemplateRecipeHandler.CachedRecipe + public class RecipeSet extends TemplateRecipeHandler.CachedRecipe { PositionedStack input; PositionedStack result1; @@ -26,18 +28,17 @@ public class CentrifugeRecipeHandler extends TemplateRecipeHandler { PositionedStack result3; PositionedStack result4; - public SmeltingSet(ItemStack input, ItemStack result1, ItemStack result2, ItemStack result3, ItemStack result4) { - input.stackSize = 1; + public RecipeSet(Object input, ItemStack[] results) { this.input = new PositionedStack(input, 21, 6); - this.result1 = new PositionedStack(result1, 129, 6); - this.result2 = new PositionedStack(result2, 147, 6); - this.result3 = new PositionedStack(result3, 129, 42); - this.result4 = new PositionedStack(result4, 147, 42); + this.result1 = new PositionedStack(results[0], 129, 6); + this.result2 = new PositionedStack(results[1], 147, 6); + this.result3 = new PositionedStack(results[2], 129, 42); + this.result4 = new PositionedStack(results[3], 147, 42); } @Override public List getIngredients() { - return getCycledIngredients(cycleticks / 48, Arrays.asList(new PositionedStack[] {input})); + return getCycledIngredients(cycleticks / 48, Arrays.asList(input)); } @Override @@ -94,11 +95,15 @@ public class CentrifugeRecipeHandler extends TemplateRecipeHandler { @Override public void loadCraftingRecipes(String outputId, Object... results) { + if ((outputId.equals("centrifugeprocessing")) && getClass() == CentrifugeRecipeHandler.class) { - Map recipes = MachineRecipes.instance().getCentrifugeRecipes(); + + Map recipes = CentrifugeRecipes.getRecipes(); + for (Map.Entry recipe : recipes.entrySet()) { - this.arecipes.add(new SmeltingSet((ItemStack)recipe.getKey(), (ItemStack)recipe.getValue()[0], (ItemStack)recipe.getValue()[1], (ItemStack)recipe.getValue()[2], (ItemStack)recipe.getValue()[3])); + this.arecipes.add(new RecipeSet(recipe.getKey(), RecipesCommon.objectToStackArray(recipe.getValue()))); } + } else { super.loadCraftingRecipes(outputId, results); } @@ -106,17 +111,26 @@ public class CentrifugeRecipeHandler extends TemplateRecipeHandler { @Override public void loadCraftingRecipes(ItemStack result) { - Map recipes = MachineRecipes.instance().getCentrifugeRecipes(); - for (Map.Entry recipe : recipes.entrySet()) { - if (NEIServerUtils.areStacksSameType((ItemStack)recipe.getValue()[0], result) || NEIServerUtils.areStacksSameType((ItemStack)recipe.getValue()[1], result) || NEIServerUtils.areStacksSameType((ItemStack)recipe.getValue()[2], result) || NEIServerUtils.areStacksSameType((ItemStack)recipe.getValue()[3], result)) - this.arecipes.add(new SmeltingSet((ItemStack)recipe.getKey(), (ItemStack)recipe.getValue()[0], (ItemStack)recipe.getValue()[1], (ItemStack)recipe.getValue()[2], (ItemStack)recipe.getValue()[3])); + + Map recipes = CentrifugeRecipes.getRecipes(); + + for(Map.Entry recipe : recipes.entrySet()) { + + if(NEIServerUtils.areStacksSameType((ItemStack)recipe.getValue()[0], result) || + NEIServerUtils.areStacksSameType((ItemStack)recipe.getValue()[1], result) || + NEIServerUtils.areStacksSameType((ItemStack)recipe.getValue()[2], result) || + NEIServerUtils.areStacksSameType((ItemStack)recipe.getValue()[3], result)) + this.arecipes.add(new RecipeSet(recipe.getKey(), RecipesCommon.objectToStackArray(recipe.getValue()))); } } @Override public void loadUsageRecipes(String inputId, Object... ingredients) { + if ((inputId.equals("centrifugeprocessing")) && getClass() == CentrifugeRecipeHandler.class) { + loadCraftingRecipes("centrifugeprocessing", new Object[0]); + } else { super.loadUsageRecipes(inputId, ingredients); } @@ -124,10 +138,25 @@ public class CentrifugeRecipeHandler extends TemplateRecipeHandler { @Override public void loadUsageRecipes(ItemStack ingredient) { - Map recipes = MachineRecipes.instance().getCentrifugeRecipes(); + + Map recipes = CentrifugeRecipes.getRecipes(); + for (Map.Entry recipe : recipes.entrySet()) { - if (NEIServerUtils.areStacksSameType(ingredient, (ItemStack)recipe.getKey())) - this.arecipes.add(new SmeltingSet((ItemStack)recipe.getKey(), (ItemStack)recipe.getValue()[0], (ItemStack)recipe.getValue()[1], (ItemStack)recipe.getValue()[2], (ItemStack)recipe.getValue()[3])); + + if(recipe.getKey() instanceof ItemStack) { + + if (NEIServerUtils.areStacksSameType(ingredient, (ItemStack)recipe.getKey())) + this.arecipes.add(new RecipeSet(recipe.getKey(), RecipesCommon.objectToStackArray(recipe.getValue()))); + + } else if (recipe.getKey() instanceof ArrayList) { + + for(Object o : (ArrayList)recipe.getKey()) { + ItemStack stack = (ItemStack)o; + + if (NEIServerUtils.areStacksSameType(ingredient, stack)) + this.arecipes.add(new RecipeSet(stack, RecipesCommon.objectToStackArray(recipe.getValue()))); + } + } } } diff --git a/com/hbm/handler/nei/ChemplantRecipeHandler.java b/com/hbm/handler/nei/ChemplantRecipeHandler.java index 993a39546..8a68fd72a 100644 --- a/com/hbm/handler/nei/ChemplantRecipeHandler.java +++ b/com/hbm/handler/nei/ChemplantRecipeHandler.java @@ -123,10 +123,10 @@ public class ChemplantRecipeHandler extends TemplateRecipeHandler { for (Map.Entry recipe : recipes.entrySet()) { if (compareFluidStacks(result, (ItemStack)recipe.getValue()[0]) || compareFluidStacks(result, (ItemStack)recipe.getValue()[1]) || - NEIServerUtils.areStacksSameType(result, (ItemStack)recipe.getValue()[2]) || - NEIServerUtils.areStacksSameType(result, (ItemStack)recipe.getValue()[3]) || - NEIServerUtils.areStacksSameType(result, (ItemStack)recipe.getValue()[4]) || - NEIServerUtils.areStacksSameType(result, (ItemStack)recipe.getValue()[5])) + NEIServerUtils.areStacksSameTypeCrafting(result, (ItemStack)recipe.getValue()[2]) || + NEIServerUtils.areStacksSameTypeCrafting(result, (ItemStack)recipe.getValue()[3]) || + NEIServerUtils.areStacksSameTypeCrafting(result, (ItemStack)recipe.getValue()[4]) || + NEIServerUtils.areStacksSameTypeCrafting(result, (ItemStack)recipe.getValue()[5])) this.arecipes.add(new SmeltingSet( (ItemStack)recipe.getKey()[0], (ItemStack)recipe.getKey()[1], @@ -159,11 +159,11 @@ public class ChemplantRecipeHandler extends TemplateRecipeHandler { for (Map.Entry recipe : recipes.entrySet()) { if (compareFluidStacks(ingredient, (ItemStack)recipe.getKey()[0]) || compareFluidStacks(ingredient, (ItemStack)recipe.getKey()[1]) || - NEIServerUtils.areStacksSameType(ingredient, (ItemStack)recipe.getKey()[2]) || - NEIServerUtils.areStacksSameType(ingredient, (ItemStack)recipe.getKey()[3]) || - NEIServerUtils.areStacksSameType(ingredient, (ItemStack)recipe.getKey()[4]) || - NEIServerUtils.areStacksSameType(ingredient, (ItemStack)recipe.getKey()[5]) || - NEIServerUtils.areStacksSameType(ingredient, (ItemStack)recipe.getKey()[6])) + NEIServerUtils.areStacksSameTypeCrafting(ingredient, (ItemStack)recipe.getKey()[2]) || + NEIServerUtils.areStacksSameTypeCrafting(ingredient, (ItemStack)recipe.getKey()[3]) || + NEIServerUtils.areStacksSameTypeCrafting(ingredient, (ItemStack)recipe.getKey()[4]) || + NEIServerUtils.areStacksSameTypeCrafting(ingredient, (ItemStack)recipe.getKey()[5]) || + NEIServerUtils.areStacksSameTypeCrafting(ingredient, (ItemStack)recipe.getKey()[6])) this.arecipes.add(new SmeltingSet( (ItemStack)recipe.getKey()[0], (ItemStack)recipe.getKey()[1], diff --git a/com/hbm/handler/nei/CrystallizerRecipeHandler.java b/com/hbm/handler/nei/CrystallizerRecipeHandler.java new file mode 100644 index 000000000..15111ec18 --- /dev/null +++ b/com/hbm/handler/nei/CrystallizerRecipeHandler.java @@ -0,0 +1,181 @@ +package com.hbm.handler.nei; + +import java.awt.Rectangle; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +import com.hbm.handler.FluidTypeHandler.FluidType; +import com.hbm.inventory.CrystallizerRecipes; +import com.hbm.inventory.MachineRecipes; +import com.hbm.inventory.gui.GUICrystallizer; +import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemFluidIcon; +import com.hbm.tileentity.machine.TileEntityMachineCrystallizer; + +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 CrystallizerRecipeHandler extends TemplateRecipeHandler { + + public static ArrayList batteries; + + public class RecipeSet extends TemplateRecipeHandler.CachedRecipe + { + PositionedStack input; + PositionedStack acid; + PositionedStack result; + + public RecipeSet(Object input, ItemStack result) { + this.input = new PositionedStack(input, 75, 24); + this.acid = new PositionedStack(ItemFluidIcon.addQuantity(new ItemStack(ModItems.fluid_icon, 1, FluidType.ACID.ordinal()), TileEntityMachineCrystallizer.acidRequired), 39, 24); + this.result = new PositionedStack(result, 135, 24); + } + + @Override + public List getIngredients() { + return getCycledIngredients(cycleticks / 48, Arrays.asList(input, acid)); + } + + @Override + public PositionedStack getOtherStack() { + return batteries.get((cycleticks / 48) % batteries.size()).stack; + } + + @Override + public PositionedStack getResult() { + return result; + } + } + + public static class Fuel + { + public Fuel(ItemStack ingred) { + + this.stack = new PositionedStack(ingred, 3, 42, false); + } + + public PositionedStack stack; + } + + @Override + public String getRecipeName() { + return "Ore Acidizer"; + } + + @Override + public String getGuiTexture() { + return GUICrystallizer.texture.toString(); + } + + @Override + public void loadCraftingRecipes(String outputId, Object... results) { + + if ((outputId.equals("hbm_crystallizer")) && getClass() == CrystallizerRecipeHandler.class) { + + Map recipes = CrystallizerRecipes.getRecipes(); + + for (Map.Entry recipe : recipes.entrySet()) { + this.arecipes.add(new RecipeSet(recipe.getKey(), (ItemStack)recipe.getValue())); + } + + } else { + super.loadCraftingRecipes(outputId, results); + } + } + + @Override + public void loadCraftingRecipes(ItemStack result) { + + Map recipes = CrystallizerRecipes.getRecipes(); + + for (Map.Entry recipe : recipes.entrySet()) { + + if (NEIServerUtils.areStacksSameTypeCrafting((ItemStack)recipe.getValue(), result)) + this.arecipes.add(new RecipeSet(recipe.getKey(), (ItemStack)recipe.getValue())); + } + } + + @Override + public void loadUsageRecipes(String inputId, Object... ingredients) { + + if ((inputId.equals("hbm_crystallizer")) && getClass() == CrystallizerRecipeHandler.class) { + + loadCraftingRecipes("hbm_crystallizer", new Object[0]); + + } else { + super.loadUsageRecipes(inputId, ingredients); + } + } + + @Override + public void loadUsageRecipes(ItemStack ingredient) { + + Map recipes = CrystallizerRecipes.getRecipes(); + + for (Map.Entry recipe : recipes.entrySet()) { + + if(NEIServerUtils.areStacksSameTypeCrafting(ingredient, ItemFluidIcon.addQuantity( + new ItemStack(ModItems.fluid_icon, 1, FluidType.ACID.ordinal()), TileEntityMachineCrystallizer.acidRequired))) { + + if(recipe.getKey() instanceof ItemStack) { + this.arecipes.add(new RecipeSet(recipe.getKey(), (ItemStack)recipe.getValue())); + + } else if (recipe.getKey() instanceof ArrayList) { + for(Object o : (ArrayList)recipe.getKey()) { + ItemStack stack = (ItemStack)o; + this.arecipes.add(new RecipeSet(stack, (ItemStack) recipe.getValue())); + } + } + + } else if(recipe.getKey() instanceof ItemStack) { + + if (NEIServerUtils.areStacksSameTypeCrafting(ingredient, (ItemStack)recipe.getKey())) + this.arecipes.add(new RecipeSet(recipe.getKey(), (ItemStack)recipe.getValue())); + + } else if (recipe.getKey() instanceof ArrayList) { + + for(Object o : (ArrayList)recipe.getKey()) { + ItemStack stack = (ItemStack)o; + + if (NEIServerUtils.areStacksSameTypeCrafting(ingredient, stack)) + this.arecipes.add(new RecipeSet(stack, (ItemStack) recipe.getValue())); + } + } + } + } + + @Override + public Class getGuiClass() { + return GUICrystallizer.class; + } + + @Override + public void loadTransferRects() { + transferRects.add(new RecipeTransferRect(new Rectangle(104 - 5, 34 - 11, 24, 18), "hbm_crystallizer")); + } + + @Override + public void drawExtras(int recipe) { + + drawProgressBar(99, 23, 192, 0, 22, 16, 600, 0); + drawProgressBar(3, 6, 176, 0, 16, 34, 60, 7); + } + + @Override + public TemplateRecipeHandler newInstance() { + + if (batteries == null) + batteries = new ArrayList(); + + for(ItemStack i : MachineRecipes.instance().getBatteries()) { + batteries.add(new Fuel(i)); + } + return super.newInstance(); + } + +} diff --git a/com/hbm/handler/nei/ShredderRecipeHandler.java b/com/hbm/handler/nei/ShredderRecipeHandler.java index 7563bba57..ff06d6673 100644 --- a/com/hbm/handler/nei/ShredderRecipeHandler.java +++ b/com/hbm/handler/nei/ShredderRecipeHandler.java @@ -8,7 +8,8 @@ import java.util.List; import java.util.Map; import com.hbm.inventory.MachineRecipes; -import com.hbm.inventory.MachineRecipes.StackWrapper; +import com.hbm.inventory.RecipesCommon.ComparableStack; +import com.hbm.inventory.ShredderRecipes; import com.hbm.inventory.gui.GUIMachineShredder; import com.hbm.lib.RefStrings; @@ -82,9 +83,9 @@ public class ShredderRecipeHandler extends TemplateRecipeHandler { @Override public void loadCraftingRecipes(String outputId, Object... results) { if ((outputId.equals("shredding")) && getClass() == ShredderRecipeHandler.class) { - Map recipes = MachineRecipes.instance().getShredderRecipes(); + Map recipes = ShredderRecipes.getShredderRecipes(); for (Map.Entry recipe : recipes.entrySet()) { - this.arecipes.add(new SmeltingSet(((StackWrapper)recipe.getKey()).getStack(), (ItemStack)recipe.getValue())); + this.arecipes.add(new SmeltingSet(((ComparableStack)recipe.getKey()).toStack(), (ItemStack)recipe.getValue())); } } else { super.loadCraftingRecipes(outputId, results); @@ -93,10 +94,10 @@ public class ShredderRecipeHandler extends TemplateRecipeHandler { @Override public void loadCraftingRecipes(ItemStack result) { - Map recipes = MachineRecipes.instance().getShredderRecipes(); + Map recipes = ShredderRecipes.getShredderRecipes(); for (Map.Entry recipe : recipes.entrySet()) { if (NEIServerUtils.areStacksSameType((ItemStack)recipe.getValue(), result)) - this.arecipes.add(new SmeltingSet(((StackWrapper)recipe.getKey()).getStack(), (ItemStack)recipe.getValue())); + this.arecipes.add(new SmeltingSet(((ComparableStack)recipe.getKey()).toStack(), (ItemStack)recipe.getValue())); } } @@ -111,10 +112,10 @@ public class ShredderRecipeHandler extends TemplateRecipeHandler { @Override public void loadUsageRecipes(ItemStack ingredient) { - Map recipes = MachineRecipes.instance().getShredderRecipes(); + Map recipes = ShredderRecipes.getShredderRecipes(); for (Map.Entry recipe : recipes.entrySet()) { - if (NEIServerUtils.areStacksSameType(ingredient, ((StackWrapper)recipe.getKey()).getStack())) - this.arecipes.add(new SmeltingSet(((StackWrapper)recipe.getKey()).getStack(), (ItemStack)recipe.getValue())); + if (NEIServerUtils.areStacksSameType(ingredient, ((ComparableStack)recipe.getKey()).toStack())) + this.arecipes.add(new SmeltingSet(((ComparableStack)recipe.getKey()).toStack(), (ItemStack)recipe.getValue())); } } diff --git a/com/hbm/inventory/CentrifugeRecipes.java b/com/hbm/inventory/CentrifugeRecipes.java new file mode 100644 index 000000000..82ee15a3f --- /dev/null +++ b/com/hbm/inventory/CentrifugeRecipes.java @@ -0,0 +1,267 @@ +package com.hbm.inventory; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import com.hbm.blocks.ModBlocks; +import com.hbm.inventory.RecipesCommon.ComparableStack; +import com.hbm.items.ModItems; + +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; + +public class CentrifugeRecipes { + + private static HashMap recipes = new HashMap(); + + public static void register() { + + recipes.put(new ComparableStack(ModItems.waste_uranium), new ItemStack[] { + new ItemStack(ModItems.nugget_u235, 1), + new ItemStack(ModItems.nugget_u238, 2), + new ItemStack(ModItems.nugget_pu239, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 2) }); + + recipes.put(new ComparableStack(ModItems.waste_plutonium), new ItemStack[] { + new ItemStack(ModItems.nugget_pu239, 1), + new ItemStack(ModItems.nugget_pu240, 1), new ItemStack(ModItems.nugget_lead, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 3) }); + + recipes.put(new ComparableStack(ModItems.waste_mox), new ItemStack[] { + new ItemStack(ModItems.nugget_pu239, 1), + new ItemStack(ModItems.nugget_neptunium, 1), new ItemStack(ModItems.nugget_u238, 2), + new ItemStack(ModItems.nuclear_waste_tiny, 2) }); + + recipes.put(new ComparableStack(ModItems.waste_schrabidium), new ItemStack[] { + new ItemStack(ModItems.nugget_beryllium, 1), + new ItemStack(ModItems.nugget_lead, 1), + new ItemStack(ModItems.nugget_solinium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 3) }); + + recipes.put(new ComparableStack(ModItems.waste_thorium), new ItemStack[] { + new ItemStack(ModItems.nugget_u238, 1), + new ItemStack(ModItems.nugget_th232, 1), + new ItemStack(ModItems.nugget_u233, 3), + new ItemStack(ModItems.nuclear_waste_tiny, 1) }); + + recipes.put(new ComparableStack(ModItems.powder_cloud), new ItemStack[] { + new ItemStack(ModItems.powder_copper, 1), + new ItemStack(ModItems.sulfur, 1), + new ItemStack(ModItems.dust, 1), + new ItemStack(ModItems.dust, 1) }); + + recipes.put("oreCoal", new ItemStack[] { + new ItemStack(ModItems.powder_coal, 2), + new ItemStack(ModItems.powder_coal, 2), + new ItemStack(ModItems.powder_coal, 2), + new ItemStack(Blocks.gravel, 1) }); + + recipes.put("oreLignite", new ItemStack[] { + new ItemStack(ModItems.powder_lignite, 2), + new ItemStack(ModItems.powder_lignite, 2), + new ItemStack(ModItems.powder_lignite, 2), + new ItemStack(Blocks.gravel, 1) }); + + recipes.put("oreIron", new ItemStack[] { + new ItemStack(ModItems.powder_iron, 1), + new ItemStack(ModItems.powder_iron, 1), + new ItemStack(ModItems.powder_iron, 1), + new ItemStack(Blocks.gravel, 1) }); + + recipes.put("oreGold", new ItemStack[] { + new ItemStack(ModItems.powder_gold, 1), + new ItemStack(ModItems.powder_gold, 1), + new ItemStack(ModItems.powder_gold, 1), + new ItemStack(Blocks.gravel, 1) }); + + recipes.put("oreDiamond", new ItemStack[] { + new ItemStack(ModItems.powder_diamond, 1), + new ItemStack(ModItems.powder_diamond, 1), + new ItemStack(ModItems.powder_diamond, 1), + new ItemStack(Blocks.gravel, 1) }); + + recipes.put("oreEmerald", new ItemStack[] { + new ItemStack(ModItems.powder_emerald, 1), + new ItemStack(ModItems.powder_emerald, 1), + new ItemStack(ModItems.powder_emerald, 1), + new ItemStack(Blocks.gravel, 1) }); + + recipes.put("oreTitanium", new ItemStack[] { + new ItemStack(ModItems.powder_titanium, 1), + new ItemStack(ModItems.powder_titanium, 1), + new ItemStack(ModItems.powder_iron, 1), + new ItemStack(Blocks.gravel, 1) }); + + recipes.put("oreQuartz", new ItemStack[] { + new ItemStack(ModItems.powder_quartz, 1), + new ItemStack(ModItems.powder_quartz, 1), + new ItemStack(ModItems.powder_lithium_tiny, 1), + new ItemStack(Blocks.netherrack, 1) }); + + recipes.put("oreTungsten", new ItemStack[] { + new ItemStack(ModItems.powder_tungsten, 1), + new ItemStack(ModItems.powder_tungsten, 1), + new ItemStack(ModItems.powder_iron, 1), + new ItemStack(Blocks.gravel, 1) }); + + recipes.put("oreCopper", new ItemStack[] { + new ItemStack(ModItems.powder_copper, 1), + new ItemStack(ModItems.powder_copper, 1), + new ItemStack(ModItems.powder_gold, 1), + new ItemStack(Blocks.gravel, 1) }); + + recipes.put("oreAluminum", new ItemStack[] { + new ItemStack(ModItems.powder_aluminium, 1), + new ItemStack(ModItems.powder_aluminium, 1), + new ItemStack(ModItems.powder_iron, 1), + new ItemStack(Blocks.gravel, 1) }); + + recipes.put("oreLead", new ItemStack[] { + new ItemStack(ModItems.powder_lead, 1), + new ItemStack(ModItems.powder_lead, 1), + new ItemStack(ModItems.powder_gold, 1), + new ItemStack(Blocks.gravel, 1) }); + + recipes.put("oreSchrabidium", new ItemStack[] { + new ItemStack(ModItems.powder_schrabidium, 1), + new ItemStack(ModItems.powder_schrabidium, 1), + new ItemStack(ModItems.nugget_solinium, 1), + new ItemStack(Blocks.gravel, 1) }); + + recipes.put(new ComparableStack(ModBlocks.ore_rare), new ItemStack[] { + new ItemStack(ModItems.powder_desh_mix, 1), + new ItemStack(ModItems.powder_actinium_tiny, 1), + new ItemStack(ModItems.powder_lanthanium_tiny, 1), + new ItemStack(Blocks.gravel, 1) }); + + recipes.put("orePlutonium", new ItemStack[] { + new ItemStack(ModItems.powder_plutonium, 1), + new ItemStack(ModItems.powder_plutonium, 1), + new ItemStack(ModItems.powder_uranium, 1), + new ItemStack(Blocks.gravel, 1) }); + + recipes.put("oreUranium", new ItemStack[] { + new ItemStack(ModItems.powder_uranium, 1), + new ItemStack(ModItems.powder_uranium, 1), + new ItemStack(ModItems.powder_thorium, 1), + new ItemStack(Blocks.gravel, 1) }); + + recipes.put("oreThorium", new ItemStack[] { + new ItemStack(ModItems.powder_thorium, 1), + new ItemStack(ModItems.powder_thorium, 1), + new ItemStack(ModItems.powder_uranium, 1), + new ItemStack(Blocks.gravel, 1) }); + + recipes.put("oreBeryllium", new ItemStack[] { + new ItemStack(ModItems.powder_beryllium, 1), + new ItemStack(ModItems.powder_beryllium, 1), + new ItemStack(ModItems.powder_emerald, 1), + new ItemStack(Blocks.gravel, 1) }); + + recipes.put("oreRedstone", new ItemStack[] { + new ItemStack(Items.redstone, 3), + new ItemStack(Items.redstone, 3), + new ItemStack(ModItems.nugget_mercury, 1), + new ItemStack(Blocks.gravel, 1) }); + + recipes.put(new ComparableStack(ModBlocks.ore_tikite), new ItemStack[] { + new ItemStack(ModItems.powder_plutonium, 2), + new ItemStack(ModItems.powder_cobalt, 2), + new ItemStack(ModItems.powder_nitan_mix, 1), + new ItemStack(Blocks.end_stone, 1) }); + + recipes.put("oreLapis", new ItemStack[] { + new ItemStack(ModItems.powder_lapis, 3), + new ItemStack(ModItems.powder_lapis, 3), + new ItemStack(ModItems.powder_cobalt_tiny, 1), + new ItemStack(Blocks.gravel, 1) }); + + recipes.put(new ComparableStack(ModBlocks.ore_meteor_starmetal), new ItemStack[] { + new ItemStack(ModItems.powder_dura_steel, 3), + new ItemStack(ModItems.powder_astatine, 1), + new ItemStack(ModItems.powder_cobalt, 2), + new ItemStack(Blocks.gravel, 1) }); + + recipes.put(new ComparableStack(ModBlocks.block_euphemium_cluster), new ItemStack[] { + new ItemStack(ModItems.nugget_euphemium, 7), + new ItemStack(ModItems.powder_schrabidium, 4), + new ItemStack(ModItems.ingot_starmetal, 2), + new ItemStack(ModItems.nugget_solinium, 2) }); + + recipes.put(new ComparableStack(ModBlocks.ore_nether_fire), new ItemStack[] { + new ItemStack(Items.blaze_powder, 2), + new ItemStack(ModItems.powder_fire, 2), + new ItemStack(ModItems.ingot_phosphorus), + new ItemStack(Blocks.netherrack) }); + + recipes.put(new ComparableStack(Items.blaze_rod), new ItemStack[] { + new ItemStack(Items.blaze_powder, 1), + new ItemStack(Items.blaze_powder, 1), + new ItemStack(ModItems.powder_fire, 1), + new ItemStack(ModItems.powder_fire, 1) }); + + recipes.put(new ComparableStack(ModItems.crystal_iron), new ItemStack[] { new ItemStack(ModItems.powder_iron, 2), new ItemStack(ModItems.powder_iron, 2), new ItemStack(ModItems.powder_titanium, 1), new ItemStack(ModItems.powder_lithium_tiny, 1) }); + recipes.put(new ComparableStack(ModItems.crystal_gold), new ItemStack[] { new ItemStack(ModItems.powder_gold, 2), new ItemStack(ModItems.powder_gold, 2), new ItemStack(ModItems.nugget_mercury, 1), new ItemStack(ModItems.powder_lithium_tiny, 1) }); + recipes.put(new ComparableStack(ModItems.crystal_redstone), new ItemStack[] { new ItemStack(Items.redstone, 3), new ItemStack(Items.redstone, 3), new ItemStack(Items.redstone, 3), new ItemStack(ModItems.nugget_mercury, 3) }); + recipes.put(new ComparableStack(ModItems.crystal_uranium), new ItemStack[] { new ItemStack(ModItems.powder_uranium, 2), new ItemStack(ModItems.powder_uranium, 2), new ItemStack(ModItems.powder_thorium, 1), new ItemStack(ModItems.powder_lithium_tiny, 1) }); + recipes.put(new ComparableStack(ModItems.crystal_thorium), new ItemStack[] { new ItemStack(ModItems.powder_thorium, 2), new ItemStack(ModItems.powder_thorium, 2), new ItemStack(ModItems.powder_uranium, 1), new ItemStack(ModItems.powder_lithium_tiny, 1) }); + recipes.put(new ComparableStack(ModItems.crystal_plutonium), new ItemStack[] { new ItemStack(ModItems.powder_plutonium, 2), new ItemStack(ModItems.powder_plutonium, 2), new ItemStack(ModItems.powder_uranium, 1), new ItemStack(ModItems.powder_lithium_tiny, 1) }); + recipes.put(new ComparableStack(ModItems.crystal_titanium), new ItemStack[] { new ItemStack(ModItems.powder_titanium, 2), new ItemStack(ModItems.powder_titanium, 2), new ItemStack(ModItems.powder_iron, 1), new ItemStack(ModItems.powder_lithium_tiny, 1) }); + recipes.put(new ComparableStack(ModItems.crystal_sulfur), new ItemStack[] { new ItemStack(ModItems.sulfur, 4), new ItemStack(ModItems.sulfur, 4), new ItemStack(ModItems.powder_iron, 1), new ItemStack(ModItems.nugget_mercury, 1) }); + recipes.put(new ComparableStack(ModItems.crystal_niter), new ItemStack[] { new ItemStack(ModItems.niter, 3), new ItemStack(ModItems.niter, 3), new ItemStack(ModItems.niter, 3), new ItemStack(ModItems.powder_lithium_tiny, 1) }); + recipes.put(new ComparableStack(ModItems.crystal_copper), new ItemStack[] { new ItemStack(ModItems.powder_copper, 2), new ItemStack(ModItems.powder_copper, 2), new ItemStack(ModItems.sulfur, 1), new ItemStack(ModItems.powder_lithium_tiny, 1) }); + recipes.put(new ComparableStack(ModItems.crystal_tungsten), new ItemStack[] { new ItemStack(ModItems.powder_tungsten, 2), new ItemStack(ModItems.powder_tungsten, 2), new ItemStack(ModItems.powder_iron, 1), new ItemStack(ModItems.powder_lithium_tiny, 1) }); + recipes.put(new ComparableStack(ModItems.crystal_aluminium), new ItemStack[] { new ItemStack(ModItems.powder_aluminium, 2), new ItemStack(ModItems.powder_aluminium, 2), new ItemStack(ModItems.powder_iron, 1), new ItemStack(ModItems.powder_lithium_tiny, 1) }); + recipes.put(new ComparableStack(ModItems.crystal_fluorite), new ItemStack[] { new ItemStack(ModItems.fluorite, 3), new ItemStack(ModItems.fluorite, 3), new ItemStack(ModItems.fluorite, 3), new ItemStack(ModItems.powder_lithium_tiny, 1) }); + recipes.put(new ComparableStack(ModItems.crystal_beryllium), new ItemStack[] { new ItemStack(ModItems.powder_beryllium, 2), new ItemStack(ModItems.powder_beryllium, 2), new ItemStack(ModItems.powder_quartz, 1), new ItemStack(ModItems.powder_lithium_tiny, 1) }); + recipes.put(new ComparableStack(ModItems.crystal_lead), new ItemStack[] { new ItemStack(ModItems.powder_lead, 2), new ItemStack(ModItems.powder_lead, 2), new ItemStack(ModItems.powder_gold, 1), new ItemStack(ModItems.powder_lithium_tiny, 1) }); + recipes.put(new ComparableStack(ModItems.crystal_schrabidium), new ItemStack[] { new ItemStack(ModItems.powder_schrabidium, 2), new ItemStack(ModItems.powder_schrabidium, 2), new ItemStack(ModItems.powder_plutonium, 1), new ItemStack(ModItems.powder_lithium_tiny, 1) }); + recipes.put(new ComparableStack(ModItems.crystal_rare), new ItemStack[] { new ItemStack(ModItems.powder_desh_mix, 1), new ItemStack(ModItems.powder_desh_mix, 1), new ItemStack(ModItems.powder_lanthanium_tiny, 3), new ItemStack(ModItems.powder_actinium_tiny, 3) }); + recipes.put(new ComparableStack(ModItems.crystal_phosphorus), new ItemStack[] { new ItemStack(ModItems.powder_fire, 3), new ItemStack(ModItems.powder_fire, 3), new ItemStack(ModItems.ingot_phosphorus, 2), new ItemStack(Items.blaze_powder, 2) }); + recipes.put(new ComparableStack(ModItems.crystal_trixite), new ItemStack[] { new ItemStack(ModItems.powder_plutonium, 3), new ItemStack(ModItems.powder_cobalt, 3), new ItemStack(ModItems.powder_spark_mix, 1), new ItemStack(ModItems.powder_nitan_mix, 2) }); + recipes.put(new ComparableStack(ModItems.crystal_lithium), new ItemStack[] { new ItemStack(ModItems.powder_lithium, 2), new ItemStack(ModItems.powder_lithium, 2), new ItemStack(ModItems.powder_quartz, 1), new ItemStack(ModItems.fluorite, 1) }); + recipes.put(new ComparableStack(ModItems.crystal_starmetal), new ItemStack[] { new ItemStack(ModItems.powder_dura_steel, 3), new ItemStack(ModItems.powder_cobalt, 3), new ItemStack(ModItems.powder_astatine, 2), new ItemStack(ModItems.nugget_mercury, 5) }); + } + + public static ItemStack[] getOutput(ItemStack stack) { + + if(stack == null || stack.getItem() == null) + return null; + + ComparableStack comp = new ComparableStack(stack.getItem(), 1, stack.getItemDamage()); + + if(recipes.containsKey(comp)) + return RecipesCommon.copyStackArray(recipes.get(comp)); + + String[] dictKeys = comp.getDictKeys(); + + for(String key : dictKeys) { + + if(recipes.containsKey(key)) + return RecipesCommon.copyStackArray(recipes.get(key)); + } + + return null; + } + + public static Map getRecipes() { + + Map recipes = new HashMap(); + + for(Entry entry : CentrifugeRecipes.recipes.entrySet()) { + + if(entry.getKey() instanceof String) { + List ingredients = OreDictionary.getOres((String)entry.getKey()); + recipes.put(ingredients, entry.getValue()); + } else { + recipes.put(((ComparableStack)entry.getKey()).toStack(), entry.getValue()); + } + } + + return recipes; + } +} diff --git a/com/hbm/inventory/CrystallizerRecipes.java b/com/hbm/inventory/CrystallizerRecipes.java index 1b0106d7e..82d0356cb 100644 --- a/com/hbm/inventory/CrystallizerRecipes.java +++ b/com/hbm/inventory/CrystallizerRecipes.java @@ -5,9 +5,10 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import com.hbm.blocks.ModBlocks; import com.hbm.inventory.RecipesCommon.ComparableStack; +import com.hbm.items.ModItems; -import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; @@ -15,12 +16,34 @@ import net.minecraftforge.oredict.OreDictionary; //...right? public class CrystallizerRecipes { - //'Object' is either a ComparableStack or the key for th ore dict + //'Object' is either a ComparableStack or the key for the ore dict private static HashMap recipes = new HashMap(); public static void register() { - - recipes.put("oreIron", new ItemStack(Items.iron_ingot)); + + recipes.put("oreIron", new ItemStack(ModItems.crystal_iron)); + recipes.put("oreGold", new ItemStack(ModItems.crystal_gold)); + recipes.put("oreRedstone", new ItemStack(ModItems.crystal_redstone)); + recipes.put("oreUranium", new ItemStack(ModItems.crystal_uranium)); + recipes.put("oreThorium", new ItemStack(ModItems.crystal_thorium)); + recipes.put("orePlutonium", new ItemStack(ModItems.crystal_plutonium)); + recipes.put("oreTitanium", new ItemStack(ModItems.crystal_titanium)); + recipes.put("oreSulfur", new ItemStack(ModItems.crystal_sulfur)); + recipes.put("oreNiter", new ItemStack(ModItems.crystal_niter)); + recipes.put("oreSalpeter", new ItemStack(ModItems.crystal_niter)); + recipes.put("oreCopper", new ItemStack(ModItems.crystal_copper)); + recipes.put("oreTungsten", new ItemStack(ModItems.crystal_tungsten)); + recipes.put("oreAluminum", new ItemStack(ModItems.crystal_aluminium)); + recipes.put("oreFluorite", new ItemStack(ModItems.crystal_fluorite)); + recipes.put("oreBeryllium", new ItemStack(ModItems.crystal_beryllium)); + recipes.put("oreLead", new ItemStack(ModItems.crystal_lead)); + recipes.put("oreSchrabidium", new ItemStack(ModItems.crystal_schrabidium)); + recipes.put(new ComparableStack(ModBlocks.ore_rare), new ItemStack(ModItems.crystal_rare)); + recipes.put(new ComparableStack(ModBlocks.ore_nether_fire), new ItemStack(ModItems.crystal_phosphorus)); + recipes.put(new ComparableStack(ModBlocks.ore_tikite), new ItemStack(ModItems.crystal_trixite)); + recipes.put("oreLithium", new ItemStack(ModItems.crystal_lithium)); + recipes.put("oreStarmetal", new ItemStack(ModItems.crystal_starmetal)); + recipes.put("sand", new ItemStack(ModItems.ingot_fiberglass)); } public static ItemStack getOutput(ItemStack stack) { @@ -31,20 +54,20 @@ public class CrystallizerRecipes { ComparableStack comp = new ComparableStack(stack.getItem(), 1, stack.getItemDamage()); if(recipes.containsKey(comp)) - return recipes.get(comp); + return recipes.get(comp).copy(); String[] dictKeys = comp.getDictKeys(); for(String key : dictKeys) { if(recipes.containsKey(key)) - return recipes.get(key); + return recipes.get(key).copy(); } return null; } - public Map getRecipes() { + public static Map getRecipes() { Map recipes = new HashMap(); diff --git a/com/hbm/inventory/MachineRecipes.java b/com/hbm/inventory/MachineRecipes.java index 162d01bff..fa6ab9009 100644 --- a/com/hbm/inventory/MachineRecipes.java +++ b/com/hbm/inventory/MachineRecipes.java @@ -115,262 +115,6 @@ public class MachineRecipes { return null; } - // Arrays! - - public static ItemStack[] getCentrifugeProcessingResult(ItemStack item) { - return getCentrifugeOutput(item); - } - - public static ItemStack[] getCentrifugeOutput(ItemStack item) { - - if(item == null || item.getItem() == null) - return null; - - ItemStack[] test = new ItemStack[] { new ItemStack(Items.apple, 3), new ItemStack(Items.leather, 1), - new ItemStack(Items.sugar, 3), new ItemStack(Items.blaze_powder, 2) }; - - ItemStack[] uranF = new ItemStack[] { new ItemStack(ModItems.nugget_u235, 1), - new ItemStack(ModItems.nugget_u238, 2), new ItemStack(ModItems.nugget_pu239, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 2) }; - ItemStack[] plutoniumF = new ItemStack[] { new ItemStack(ModItems.nugget_pu239, 1), - new ItemStack(ModItems.nugget_pu240, 1), new ItemStack(ModItems.nugget_lead, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 3) }; - ItemStack[] moxF = new ItemStack[] { new ItemStack(ModItems.nugget_pu239, 1), - new ItemStack(ModItems.nugget_neptunium, 1), new ItemStack(ModItems.nugget_u238, 2), - new ItemStack(ModItems.nuclear_waste_tiny, 2) }; - ItemStack[] schrabidiumF = new ItemStack[] { new ItemStack(ModItems.nugget_beryllium, 1), - new ItemStack(ModItems.nugget_lead, 1), new ItemStack(ModItems.nugget_solinium, 1), - new ItemStack(ModItems.nuclear_waste_tiny, 3) }; - ItemStack[] thoriumF = new ItemStack[] { new ItemStack(ModItems.nugget_u238, 1), - new ItemStack(ModItems.nugget_th232, 1), new ItemStack(ModItems.nugget_u233, 3), - new ItemStack(ModItems.nuclear_waste_tiny, 1) }; - - ItemStack[] cloud = new ItemStack[] { new ItemStack(ModItems.powder_copper, 1), - new ItemStack(ModItems.sulfur, 1), new ItemStack(ModItems.dust, 1), - new ItemStack(ModItems.dust, 1) }; - - ItemStack[] coal = new ItemStack[] { new ItemStack(ModItems.powder_coal, 2), - new ItemStack(ModItems.powder_coal, 2), new ItemStack(ModItems.powder_coal, 2), - new ItemStack(Blocks.gravel, 1) }; - ItemStack[] lignite = new ItemStack[] { new ItemStack(ModItems.powder_lignite, 2), - new ItemStack(ModItems.powder_lignite, 2), new ItemStack(ModItems.powder_lignite, 2), - new ItemStack(Blocks.gravel, 1) }; - ItemStack[] iron = new ItemStack[] { new ItemStack(ModItems.powder_iron, 1), - new ItemStack(ModItems.powder_iron, 1), new ItemStack(ModItems.powder_iron, 1), - new ItemStack(Blocks.gravel, 1) }; - ItemStack[] gold = new ItemStack[] { new ItemStack(ModItems.powder_gold, 1), - new ItemStack(ModItems.powder_gold, 1), new ItemStack(ModItems.powder_gold, 1), - new ItemStack(Blocks.gravel, 1) }; - ItemStack[] diamond = new ItemStack[] { new ItemStack(ModItems.powder_diamond, 1), - new ItemStack(ModItems.powder_diamond, 1), new ItemStack(ModItems.powder_diamond, 1), - new ItemStack(Blocks.gravel, 1) }; - ItemStack[] emerald = new ItemStack[] { new ItemStack(ModItems.powder_emerald, 1), - new ItemStack(ModItems.powder_emerald, 1), new ItemStack(ModItems.powder_emerald, 1), - new ItemStack(Blocks.gravel, 1) }; - ItemStack[] titanium = new ItemStack[] { new ItemStack(ModItems.powder_titanium, 1), - new ItemStack(ModItems.powder_titanium, 1), new ItemStack(ModItems.powder_iron, 1), - new ItemStack(Blocks.gravel, 1) }; - ItemStack[] quartz = new ItemStack[] { new ItemStack(ModItems.powder_quartz, 1), - new ItemStack(ModItems.powder_quartz, 1), new ItemStack(ModItems.powder_lithium_tiny, 1), - new ItemStack(Blocks.netherrack, 1) }; - ItemStack[] tungsten = new ItemStack[] { new ItemStack(ModItems.powder_tungsten, 1), - new ItemStack(ModItems.powder_tungsten, 1), new ItemStack(ModItems.powder_iron, 1), - new ItemStack(Blocks.gravel, 1) }; - ItemStack[] copper = new ItemStack[] { new ItemStack(ModItems.powder_copper, 1), - new ItemStack(ModItems.powder_copper, 1), new ItemStack(ModItems.powder_gold, 1), - new ItemStack(Blocks.gravel, 1) }; - ItemStack[] aluminium = new ItemStack[] { new ItemStack(ModItems.powder_aluminium, 1), - new ItemStack(ModItems.powder_aluminium, 1), new ItemStack(ModItems.powder_iron, 1), - new ItemStack(Blocks.gravel, 1) }; - ItemStack[] lead = new ItemStack[] { new ItemStack(ModItems.powder_lead, 1), - new ItemStack(ModItems.powder_lead, 1), new ItemStack(ModItems.powder_gold, 1), - new ItemStack(Blocks.gravel, 1) }; - ItemStack[] schrabidium = new ItemStack[] { new ItemStack(ModItems.powder_schrabidium, 1), - new ItemStack(ModItems.powder_schrabidium, 1), new ItemStack(ModItems.nugget_solinium, 1), - new ItemStack(Blocks.gravel, 1) }; - ItemStack[] rare = new ItemStack[] { new ItemStack(ModItems.powder_desh_mix, 1), - new ItemStack(ModItems.powder_actinium_tiny, 1), new ItemStack(ModItems.powder_lanthanium_tiny, 1), - new ItemStack(Blocks.gravel, 1) }; - ItemStack[] plutonium = new ItemStack[] { new ItemStack(ModItems.powder_plutonium, 1), - new ItemStack(ModItems.powder_plutonium, 1), new ItemStack(ModItems.powder_uranium, 1), - new ItemStack(Blocks.gravel, 1) }; - ItemStack[] uranium = new ItemStack[] { new ItemStack(ModItems.powder_uranium, 1), - new ItemStack(ModItems.powder_uranium, 1), new ItemStack(ModItems.powder_thorium, 1), - new ItemStack(Blocks.gravel, 1) }; - ItemStack[] thorium = new ItemStack[] { new ItemStack(ModItems.powder_thorium, 1), - new ItemStack(ModItems.powder_thorium, 1), new ItemStack(ModItems.powder_uranium, 1), - new ItemStack(Blocks.gravel, 1) }; - ItemStack[] beryllium = new ItemStack[] { new ItemStack(ModItems.powder_beryllium, 1), - new ItemStack(ModItems.powder_beryllium, 1), new ItemStack(ModItems.powder_emerald, 1), - new ItemStack(Blocks.gravel, 1) }; - ItemStack[] redstone = new ItemStack[] { new ItemStack(Items.redstone, 3), - new ItemStack(Items.redstone, 3), new ItemStack(ModItems.nugget_mercury, 1), - new ItemStack(Blocks.gravel, 1) }; - ItemStack[] tikite = new ItemStack[] { new ItemStack(ModItems.powder_plutonium, 2), - new ItemStack(ModItems.powder_cobalt, 2), new ItemStack(ModItems.powder_nitan_mix, 1), - new ItemStack(Blocks.end_stone, 1) }; - ItemStack[] lapis = new ItemStack[] { new ItemStack(ModItems.powder_lapis, 3), - new ItemStack(ModItems.powder_lapis, 3), new ItemStack(ModItems.powder_cobalt_tiny, 1), - new ItemStack(Blocks.gravel, 1) }; - ItemStack[] starmetal = new ItemStack[] { new ItemStack(ModItems.powder_dura_steel, 3), - new ItemStack(ModItems.powder_astatine, 1), new ItemStack(ModItems.powder_cobalt, 2), - new ItemStack(Blocks.gravel, 1) }; - - ItemStack[] euphCluster = new ItemStack[] { new ItemStack(ModItems.nugget_euphemium, 7), - new ItemStack(ModItems.powder_schrabidium, 4), new ItemStack(ModItems.ingot_starmetal, 2), - new ItemStack(ModItems.nugget_solinium, 2) }; - - if (MainRegistry.enableDebugMode) { - if (item.getItem() == Item.getItemFromBlock(ModBlocks.test_render)) { - return test; - } - } - - if (item.getItem() == ModItems.waste_uranium) { - return uranF; - } - - if (item.getItem() == ModItems.waste_thorium) { - return thoriumF; - } - - /*if (item.getItem() == ModItems.rod_dual_uranium_fuel_depleted) { - return uran2; - } - - if (item.getItem() == ModItems.rod_quad_uranium_fuel_depleted) { - return uran3; - }*/ - - if (item.getItem() == ModItems.waste_plutonium) { - return plutoniumF; - } - - if (item.getItem() == ModItems.waste_mox) { - return moxF; - } - - if (item.getItem() == ModItems.waste_schrabidium) { - return schrabidiumF; - } - - if (item.getItem() == ModItems.powder_cloud) { - return cloud; - } - - if (mODE(item, "oreCoal")) { - return coal; - } - - if (mODE(item, "oreLignite")) { - return lignite; - } - - if (mODE(item, "oreIron")) { - return iron; - } - - if (mODE(item, "oreGold")) { - return gold; - } - - if (mODE(item, "oreDiamond")) { - return diamond; - } - - if (mODE(item, "oreEmerald")) { - return emerald; - } - - if (mODE(item, "oreUranium")) { - return uranium; - } - - if (mODE(item, "oreThorium")) { - return thorium; - } - - if (mODE(item, "orePlutonium")) { - return plutonium; - } - - if (mODE(item, "oreTitanium")) { - return titanium; - } - - if (mODE(item, "oreTungsten")) { - return tungsten; - } - - if (mODE(item, "oreLead")) { - return lead; - } - - if (mODE(item, "oreBeryllium")) { - return beryllium; - } - - if (mODE(item, "oreAluminum")) { - return aluminium; - } - - if (mODE(item, "oreSchrabidium")) { - return schrabidium; - } - - if (mODE(item, "oreQuartz") || mODE(item, "oreNetherQuartz")) { - return quartz; - } - - if (item.getItem() == Item.getItemFromBlock(ModBlocks.ore_rare)) { - return rare; - } - - if (mODE(item, "oreCopper")) { - return copper; - } - - if (mODE(item, "oreRedstone") || item.getItem() == Item.getItemFromBlock(Blocks.lit_redstone_ore)) { - return redstone; - } - - if (item.getItem() == Item.getItemFromBlock(ModBlocks.ore_tikite)) { - return tikite; - } - - if (mODE(item, "oreLapis")) { - return lapis; - } - - if (mODE(item, "oreStarmetal")) { - return starmetal; - } - - if (item.getItem() == Item.getItemFromBlock(ModBlocks.block_euphemium_cluster)) { - return euphCluster; - } - - if (item.getItem() == Item.getItemFromBlock(ModBlocks.ore_nether_fire)) { - return new ItemStack[] { - new ItemStack(Items.blaze_powder, 2), - new ItemStack(ModItems.powder_fire, 2), - new ItemStack(ModItems.ingot_phosphorus), - new ItemStack(Blocks.netherrack) - }; - } - - if (item.getItem() == Items.blaze_rod) { - return new ItemStack[] { - new ItemStack(Items.blaze_powder, 1), - new ItemStack(Items.blaze_powder, 1), - new ItemStack(ModItems.powder_fire, 1), - new ItemStack(ModItems.powder_fire, 1) - }; - } - - return null; - } - //bro, i don't care @SuppressWarnings("incomplete-switch") public static List getGasCentOutput(FluidType fluid) { @@ -1227,75 +971,6 @@ public class MachineRecipes { return fuels; } - public Map getCentrifugeRecipes() { - Map recipes = new HashMap(); - if (MainRegistry.enableDebugMode) { - recipes.put(new ItemStack(Item.getItemFromBlock(ModBlocks.test_render)), - getCentrifugeOutput(new ItemStack(ModBlocks.test_render))); - } - recipes.put(new ItemStack(ModItems.powder_cloud), - getCentrifugeOutput(new ItemStack(ModItems.powder_cloud))); - recipes.put(new ItemStack(Blocks.coal_ore), - getCentrifugeOutput(new ItemStack(Blocks.coal_ore))); - recipes.put(new ItemStack(Blocks.iron_ore), - getCentrifugeOutput(new ItemStack(Blocks.iron_ore))); - recipes.put(new ItemStack(Blocks.gold_ore), - getCentrifugeOutput(new ItemStack(Blocks.gold_ore))); - recipes.put(new ItemStack(Blocks.diamond_ore), - getCentrifugeOutput(new ItemStack(Blocks.diamond_ore))); - recipes.put(new ItemStack(Blocks.emerald_ore), - getCentrifugeOutput(new ItemStack(Blocks.emerald_ore))); - recipes.put(new ItemStack(ModBlocks.ore_uranium), - getCentrifugeOutput(new ItemStack(ModBlocks.ore_uranium))); - recipes.put(new ItemStack(ModBlocks.ore_thorium), - getCentrifugeOutput(new ItemStack(ModBlocks.ore_thorium))); - recipes.put(new ItemStack(ModBlocks.ore_titanium), - getCentrifugeOutput(new ItemStack(ModBlocks.ore_titanium))); - recipes.put(new ItemStack(ModBlocks.ore_tungsten), - getCentrifugeOutput(new ItemStack(ModBlocks.ore_tungsten))); - recipes.put(new ItemStack(ModBlocks.ore_aluminium), - getCentrifugeOutput(new ItemStack(ModBlocks.ore_aluminium))); - recipes.put(new ItemStack(ModBlocks.ore_beryllium), - getCentrifugeOutput(new ItemStack(ModBlocks.ore_beryllium))); - recipes.put(new ItemStack(ModBlocks.ore_copper), - getCentrifugeOutput(new ItemStack(ModBlocks.ore_copper))); - recipes.put(new ItemStack(ModBlocks.ore_lead), - getCentrifugeOutput(new ItemStack(ModBlocks.ore_lead))); - recipes.put(new ItemStack(ModBlocks.ore_rare), - getCentrifugeOutput(new ItemStack(ModBlocks.ore_rare))); - recipes.put(new ItemStack(ModBlocks.ore_schrabidium), - getCentrifugeOutput(new ItemStack(ModBlocks.ore_schrabidium))); - recipes.put(new ItemStack(ModBlocks.ore_tikite), - getCentrifugeOutput(new ItemStack(ModBlocks.ore_tikite))); - recipes.put(new ItemStack(Blocks.redstone_ore), - getCentrifugeOutput(new ItemStack(Blocks.redstone_ore))); - recipes.put(new ItemStack(Blocks.lapis_ore), - getCentrifugeOutput(new ItemStack(Blocks.lapis_ore))); - recipes.put(new ItemStack(ModBlocks.ore_nether_plutonium), - getCentrifugeOutput(new ItemStack(ModBlocks.ore_nether_plutonium))); - recipes.put(new ItemStack(ModItems.waste_uranium), - getCentrifugeOutput(new ItemStack(ModItems.waste_uranium))); - recipes.put(new ItemStack(ModItems.waste_thorium), - getCentrifugeOutput(new ItemStack(ModItems.waste_thorium))); - recipes.put(new ItemStack(ModItems.waste_plutonium), - getCentrifugeOutput(new ItemStack(ModItems.waste_plutonium))); - recipes.put(new ItemStack(ModItems.waste_mox), - getCentrifugeOutput(new ItemStack(ModItems.waste_mox))); - recipes.put(new ItemStack(ModItems.waste_schrabidium), - getCentrifugeOutput(new ItemStack(ModItems.waste_schrabidium))); - recipes.put(new ItemStack(ModBlocks.ore_lignite), - getCentrifugeOutput(new ItemStack(ModBlocks.ore_lignite))); - recipes.put(new ItemStack(ModBlocks.ore_meteor_starmetal), - getCentrifugeOutput(new ItemStack(ModBlocks.ore_meteor_starmetal))); - recipes.put(new ItemStack(ModBlocks.block_euphemium_cluster), - getCentrifugeOutput(new ItemStack(ModBlocks.block_euphemium_cluster))); - recipes.put(new ItemStack(ModBlocks.ore_nether_fire), - getCentrifugeOutput(new ItemStack(ModBlocks.ore_nether_fire))); - recipes.put(new ItemStack(Items.blaze_rod), - getCentrifugeOutput(new ItemStack(Items.blaze_rod))); - return recipes; - } - public Map getGasCentrifugeRecipes() { Map recipes = new HashMap(); @@ -1976,116 +1651,6 @@ public class MachineRecipes { return recipes; }*/ - - //new and improved - public static HashMap shredderRecipes = new HashMap(); - public static HashMap neiShredderRecipes; - - public static void registerShredder() { - - String[] names = OreDictionary.getOreNames(); - - for(int i = 0; i < names.length; i++) { - - String name = names[i]; - - //if the dict contains invalid names, skip - if(name == null || name.isEmpty()) - continue; - - List matches = OreDictionary.getOres(name); - - //if the name isn't assigned to an ore, also skip - if(matches == null || matches.isEmpty()) - continue; - - if(name.length() > 5 && name.substring(0, 5).equals("ingot")) { - ItemStack dust = getDustByName(name.substring(5)); - - if(dust != null && dust.getItem() != ModItems.scrap) { - - for(ItemStack stack : matches) { - shredderRecipes.put(new StackWrapper(stack), dust); - } - } - } else if(name.length() > 3 && name.substring(0, 3).equals("ore")) { - ItemStack dust = getDustByName(name.substring(3)); - - if(dust != null && dust.getItem() != ModItems.scrap) { - - dust.stackSize = 2; - - for(ItemStack stack : matches) { - shredderRecipes.put(new StackWrapper(stack), dust); - } - } - } else if(name.length() > 5 && name.substring(0, 5).equals("block")) { - ItemStack dust = getDustByName(name.substring(5)); - - if(dust != null && dust.getItem() != ModItems.scrap) { - - dust.stackSize = 9; - - for(ItemStack stack : matches) { - shredderRecipes.put(new StackWrapper(stack), dust); - } - } - } else if(name.length() > 3 && name.substring(0, 3).equals("gem")) { - ItemStack dust = getDustByName(name.substring(3)); - - if(dust != null && dust.getItem() != ModItems.scrap) { - - for(ItemStack stack : matches) { - shredderRecipes.put(new StackWrapper(stack), dust); - } - } - } else if(name.length() > 3 && name.substring(0, 4).equals("dust")) { - - for(ItemStack stack : matches) { - shredderRecipes.put(new StackWrapper(stack), new ItemStack(ModItems.dust)); - } - } - } - } - - public static ItemStack getDustByName(String name) { - - List matches = OreDictionary.getOres("dust" + name); - - if(matches != null && !matches.isEmpty()) - return matches.get(0).copy(); - - return new ItemStack(ModItems.scrap); - } - - public static void overridePreSetRecipe(ItemStack in, ItemStack out) { - - shredderRecipes.put(new StackWrapper(in), out); - } - - public Map getShredderRecipes() { - - //convert the map only once to save on processing power (might be more ram intensive but that can't be THAT bad, right?) - if(neiShredderRecipes == null) - neiShredderRecipes = new HashMap(shredderRecipes); - - return neiShredderRecipes; - } - - public static ItemStack getShredderResult(ItemStack stack) { - - if(stack == null || stack.getItem() == null) - return new ItemStack(ModItems.scrap); - - ItemStack sta = shredderRecipes.get(new StackWrapper(stack)); - - /*if(sta != null) - System.out.println(stack.getDisplayName() + " resulted " + sta.getDisplayName()); - else - System.out.println(stack.getDisplayName() + " resulted null");*/ - - return sta == null ? new ItemStack(ModItems.scrap) : sta; - } public Map getCMBRecipes() { Map recipes = new HashMap(); @@ -5128,7 +4693,7 @@ public class MachineRecipes { input[0] = new FluidStack(1800, FluidType.COOLANT); break; case DESH: - input[0] = new FluidStack(800, FluidType.ACID); + input[0] = new FluidStack(200, FluidType.MERCURY); input[1] = new FluidStack(200, FluidType.LIGHTOIL); break; case PEROXIDE: @@ -5136,10 +4701,11 @@ public class MachineRecipes { break; case CIRCUIT_4: input[0] = new FluidStack(400, FluidType.ACID); + input[1] = new FluidStack(200, FluidType.PETROLEUM); break; case CIRCUIT_5: input[0] = new FluidStack(800, FluidType.ACID); - input[1] = new FluidStack(400, FluidType.PETROLEUM); + input[1] = new FluidStack(200, FluidType.MERCURY); break; case SF_OIL: input[0] = new FluidStack(350, FluidType.OIL); @@ -5212,6 +4778,7 @@ public class MachineRecipes { break; case NITAN: input[0] = new FluidStack(600, FluidType.KEROSENE); + input[1] = new FluidStack(200, FluidType.MERCURY); break; case OIL_SAND: input[0] = new FluidStack(400, FluidType.BITUMEN); @@ -5506,7 +5073,7 @@ public class MachineRecipes { return map; } - public static class StackWrapper { + /*public static class StackWrapper { public Item item; public int damage; @@ -5557,5 +5124,5 @@ public class MachineRecipes { return false; return true; } - } + }*/ } diff --git a/com/hbm/inventory/RecipesCommon.java b/com/hbm/inventory/RecipesCommon.java index 4c46719f7..2a649eca1 100644 --- a/com/hbm/inventory/RecipesCommon.java +++ b/com/hbm/inventory/RecipesCommon.java @@ -1,23 +1,73 @@ package com.hbm.inventory; +import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; public class RecipesCommon { + public static ItemStack[] copyStackArray(ItemStack[] array) { + + if(array == null) + return null; + + ItemStack[] clone = new ItemStack[array.length]; + + for(int i = 0; i < array.length; i++) { + + if(array[i] != null) + clone[i] = array[i].copy(); + } + + return clone; + } + + public static ItemStack[] objectToStackArray(Object[] array) { + + if(array == null) + return null; + + ItemStack[] clone = new ItemStack[array.length]; + + for(int i = 0; i < array.length; i++) { + + if(array[i] instanceof ItemStack) + clone[i] = (ItemStack)array[i]; + } + + return clone; + } + public static class ComparableStack { Item item; int stacksize; int meta; + public ComparableStack(ItemStack stack) { + this.item = stack.getItem(); + this.stacksize = stack.stackSize; + this.meta = stack.getItemDamage(); + } + + public ComparableStack makeSingular() { + stacksize = 1; + return this; + } + public ComparableStack(Item item) { this.item = item; this.stacksize = 1; this.meta = 0; } + public ComparableStack(Block item) { + this.item = Item.getItemFromBlock(item); + this.stacksize = 1; + this.meta = 0; + } + public ComparableStack(Item item, int stacksize) { this(item); this.stacksize = stacksize; diff --git a/com/hbm/inventory/ShredderRecipes.java b/com/hbm/inventory/ShredderRecipes.java new file mode 100644 index 000000000..e73e958db --- /dev/null +++ b/com/hbm/inventory/ShredderRecipes.java @@ -0,0 +1,224 @@ +package com.hbm.inventory; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.hbm.blocks.ModBlocks; +import com.hbm.inventory.RecipesCommon.ComparableStack; +import com.hbm.items.ModItems; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; + +public class ShredderRecipes { + + public static HashMap shredderRecipes = new HashMap(); + public static HashMap neiShredderRecipes; + + public static void registerShredder() { + + String[] names = OreDictionary.getOreNames(); + + for(int i = 0; i < names.length; i++) { + + String name = names[i]; + + //if the dict contains invalid names, skip + if(name == null || name.isEmpty()) + continue; + + List matches = OreDictionary.getOres(name); + + //if the name isn't assigned to an ore, also skip + if(matches == null || matches.isEmpty()) + continue; + + if(name.length() > 5 && name.substring(0, 5).equals("ingot")) { + ItemStack dust = getDustByName(name.substring(5)); + + if(dust != null && dust.getItem() != ModItems.scrap) { + + for(ItemStack stack : matches) { + shredderRecipes.put(new ComparableStack(stack), dust); + } + } + } else if(name.length() > 3 && name.substring(0, 3).equals("ore")) { + ItemStack dust = getDustByName(name.substring(3)); + + if(dust != null && dust.getItem() != ModItems.scrap) { + + dust.stackSize = 2; + + for(ItemStack stack : matches) { + shredderRecipes.put(new ComparableStack(stack), dust); + } + } + } else if(name.length() > 5 && name.substring(0, 5).equals("block")) { + ItemStack dust = getDustByName(name.substring(5)); + + if(dust != null && dust.getItem() != ModItems.scrap) { + + dust.stackSize = 9; + + for(ItemStack stack : matches) { + shredderRecipes.put(new ComparableStack(stack), dust); + } + } + } else if(name.length() > 3 && name.substring(0, 3).equals("gem")) { + ItemStack dust = getDustByName(name.substring(3)); + + if(dust != null && dust.getItem() != ModItems.scrap) { + + for(ItemStack stack : matches) { + shredderRecipes.put(new ComparableStack(stack), dust); + } + } + } else if(name.length() > 3 && name.substring(0, 4).equals("dust")) { + + for(ItemStack stack : matches) { + shredderRecipes.put(new ComparableStack(stack), new ItemStack(ModItems.dust)); + } + } + } + } + + public static void registerOverrides() { + + ShredderRecipes.setRecipe(ModItems.scrap, new ItemStack(ModItems.dust)); + ShredderRecipes.setRecipe(ModItems.dust, new ItemStack(ModItems.dust)); + ShredderRecipes.setRecipe(Blocks.glowstone, new ItemStack(Items.glowstone_dust, 4)); + ShredderRecipes.setRecipe(new ItemStack(Blocks.quartz_block, 1, 0), new ItemStack(ModItems.powder_quartz, 4)); + ShredderRecipes.setRecipe(new ItemStack(Blocks.quartz_block, 1, 1), new ItemStack(ModItems.powder_quartz, 4)); + ShredderRecipes.setRecipe(new ItemStack(Blocks.quartz_block, 1, 2), new ItemStack(ModItems.powder_quartz, 4)); + ShredderRecipes.setRecipe(Blocks.quartz_stairs, new ItemStack(ModItems.powder_quartz, 3)); + ShredderRecipes.setRecipe(new ItemStack(Blocks.stone_slab, 1, 7), new ItemStack(ModItems.powder_quartz, 2)); + ShredderRecipes.setRecipe(Items.quartz, new ItemStack(ModItems.powder_quartz)); + ShredderRecipes.setRecipe(Blocks.quartz_ore, new ItemStack(ModItems.powder_quartz, 2)); + ShredderRecipes.setRecipe(ModBlocks.ore_nether_fire, new ItemStack(ModItems.powder_fire, 6)); + ShredderRecipes.setRecipe(Blocks.packed_ice, new ItemStack(ModItems.powder_ice, 1)); + ShredderRecipes.setRecipe(ModBlocks.brick_light, new ItemStack(Items.clay_ball, 4)); + ShredderRecipes.setRecipe(ModBlocks.concrete, new ItemStack(Blocks.gravel, 1)); + ShredderRecipes.setRecipe(ModBlocks.concrete_smooth, new ItemStack(Blocks.gravel, 1)); + ShredderRecipes.setRecipe(ModBlocks.brick_concrete, new ItemStack(Blocks.gravel, 1)); + ShredderRecipes.setRecipe(ModBlocks.brick_concrete_mossy, new ItemStack(Blocks.gravel, 1)); + ShredderRecipes.setRecipe(ModBlocks.brick_concrete_cracked, new ItemStack(Blocks.gravel, 1)); + ShredderRecipes.setRecipe(ModBlocks.brick_concrete_broken, new ItemStack(Blocks.gravel, 1)); + ShredderRecipes.setRecipe(ModBlocks.brick_obsidian, new ItemStack(ModBlocks.gravel_obsidian, 1)); + ShredderRecipes.setRecipe(Blocks.obsidian, new ItemStack(ModBlocks.gravel_obsidian, 1)); + ShredderRecipes.setRecipe(Blocks.stone, new ItemStack(Blocks.gravel, 1)); + ShredderRecipes.setRecipe(Blocks.cobblestone, new ItemStack(Blocks.gravel, 1)); + ShredderRecipes.setRecipe(Blocks.stonebrick, new ItemStack(Blocks.gravel, 1)); + ShredderRecipes.setRecipe(Blocks.gravel, new ItemStack(Blocks.sand, 1)); + ShredderRecipes.setRecipe(Blocks.sand, new ItemStack(ModItems.dust, 2)); + ShredderRecipes.setRecipe(Blocks.brick_block, new ItemStack(Items.clay_ball, 4)); + ShredderRecipes.setRecipe(Blocks.brick_stairs, new ItemStack(Items.clay_ball, 3)); + ShredderRecipes.setRecipe(Items.flower_pot, new ItemStack(Items.clay_ball, 3)); + ShredderRecipes.setRecipe(Items.brick, new ItemStack(Items.clay_ball, 1)); + ShredderRecipes.setRecipe(Blocks.sandstone, new ItemStack(Blocks.sand, 4)); + ShredderRecipes.setRecipe(Blocks.sandstone_stairs, new ItemStack(Blocks.sand, 6)); + ShredderRecipes.setRecipe(Blocks.clay, new ItemStack(Items.clay_ball, 4)); + ShredderRecipes.setRecipe(Blocks.hardened_clay, new ItemStack(Items.clay_ball, 4)); + ShredderRecipes.setRecipe(Blocks.tnt, new ItemStack(Items.gunpowder, 5)); + ShredderRecipes.setRecipe(ModItems.powder_quartz, new ItemStack(ModItems.powder_lithium_tiny, 1)); + ShredderRecipes.setRecipe(ModItems.powder_lapis, new ItemStack(ModItems.powder_cobalt_tiny, 1)); + ShredderRecipes.setRecipe(ModItems.fragment_neodymium, new ItemStack(ModItems.powder_neodymium_tiny, 1)); + ShredderRecipes.setRecipe(ModItems.fragment_cobalt, new ItemStack(ModItems.powder_cobalt_tiny, 1)); + ShredderRecipes.setRecipe(ModItems.fragment_niobium, new ItemStack(ModItems.powder_niobium_tiny, 1)); + ShredderRecipes.setRecipe(ModItems.fragment_cerium, new ItemStack(ModItems.powder_cerium_tiny, 1)); + ShredderRecipes.setRecipe(ModItems.fragment_lanthanium, new ItemStack(ModItems.powder_lanthanium_tiny, 1)); + ShredderRecipes.setRecipe(ModItems.fragment_actinium, new ItemStack(ModItems.powder_actinium_tiny, 1)); + ShredderRecipes.setRecipe(ModItems.fragment_meteorite, new ItemStack(ModItems.powder_meteorite_tiny, 1)); + ShredderRecipes.setRecipe(ModBlocks.block_meteor, new ItemStack(ModItems.powder_meteorite, 10)); + ShredderRecipes.setRecipe(Items.enchanted_book, new ItemStack(ModItems.powder_magic, 1)); + ShredderRecipes.setRecipe(ModItems.arc_electrode_burnt, new ItemStack(ModItems.powder_coal, 1)); + ShredderRecipes.setRecipe(ModItems.arc_electrode_desh, new ItemStack(ModItems.powder_desh, 2)); + ShredderRecipes.setRecipe(ModBlocks.meteor_polished, new ItemStack(ModItems.powder_meteorite, 1)); + ShredderRecipes.setRecipe(ModBlocks.meteor_brick, new ItemStack(ModItems.powder_meteorite, 1)); + ShredderRecipes.setRecipe(ModBlocks.meteor_brick_mossy, new ItemStack(ModItems.powder_meteorite, 1)); + ShredderRecipes.setRecipe(ModBlocks.meteor_brick_cracked, new ItemStack(ModItems.powder_meteorite, 1)); + ShredderRecipes.setRecipe(ModBlocks.meteor_brick_chiseled, new ItemStack(ModItems.powder_meteorite, 1)); + ShredderRecipes.setRecipe(ModBlocks.meteor_pillar, new ItemStack(ModItems.powder_meteorite, 1)); + ShredderRecipes.setRecipe(ModBlocks.ore_rare, new ItemStack(ModItems.powder_desh_mix, 1)); + + ShredderRecipes.setRecipe(ModItems.crystal_iron, new ItemStack(ModItems.powder_iron, 3)); + ShredderRecipes.setRecipe(ModItems.crystal_gold, new ItemStack(ModItems.powder_iron, 3)); + ShredderRecipes.setRecipe(ModItems.crystal_redstone, new ItemStack(Items.redstone, 8)); + ShredderRecipes.setRecipe(ModItems.crystal_uranium, new ItemStack(ModItems.powder_uranium, 3)); + ShredderRecipes.setRecipe(ModItems.crystal_plutonium, new ItemStack(ModItems.powder_plutonium, 3)); + ShredderRecipes.setRecipe(ModItems.crystal_thorium, new ItemStack(ModItems.powder_thorium, 3)); + ShredderRecipes.setRecipe(ModItems.crystal_titanium, new ItemStack(ModItems.powder_titanium, 3)); + ShredderRecipes.setRecipe(ModItems.crystal_sulfur, new ItemStack(ModItems.sulfur, 8)); + ShredderRecipes.setRecipe(ModItems.crystal_niter, new ItemStack(ModItems.niter, 8)); + ShredderRecipes.setRecipe(ModItems.crystal_copper, new ItemStack(ModItems.powder_copper, 3)); + ShredderRecipes.setRecipe(ModItems.crystal_tungsten, new ItemStack(ModItems.powder_tungsten, 3)); + ShredderRecipes.setRecipe(ModItems.crystal_aluminium, new ItemStack(ModItems.powder_aluminium, 3)); + ShredderRecipes.setRecipe(ModItems.crystal_fluorite, new ItemStack(ModItems.fluorite, 8)); + ShredderRecipes.setRecipe(ModItems.crystal_beryllium, new ItemStack(ModItems.powder_beryllium, 3)); + ShredderRecipes.setRecipe(ModItems.crystal_lead, new ItemStack(ModItems.powder_lead, 3)); + ShredderRecipes.setRecipe(ModItems.crystal_schrabidium, new ItemStack(ModItems.powder_schrabidium, 3)); + ShredderRecipes.setRecipe(ModItems.crystal_rare, new ItemStack(ModItems.powder_desh_mix, 2)); + ShredderRecipes.setRecipe(ModItems.crystal_phosphorus, new ItemStack(ModItems.powder_fire, 8)); + ShredderRecipes.setRecipe(ModItems.crystal_trixite, new ItemStack(ModItems.powder_plutonium, 6)); + ShredderRecipes.setRecipe(ModItems.crystal_lithium, new ItemStack(ModItems.powder_lithium, 3)); + ShredderRecipes.setRecipe(ModItems.crystal_starmetal, new ItemStack(ModItems.powder_dura_steel, 6)); + + for(int i = 0; i < 16; i++) { + ShredderRecipes.setRecipe(new ItemStack(Blocks.stained_hardened_clay, 1, i), new ItemStack(Items.clay_ball, 4)); + ShredderRecipes.setRecipe(new ItemStack(Blocks.wool, 1, i), new ItemStack(Items.string, 4)); + } + } + + public static ItemStack getDustByName(String name) { + + List matches = OreDictionary.getOres("dust" + name); + + if(matches != null && !matches.isEmpty()) + return matches.get(0).copy(); + + return new ItemStack(ModItems.scrap); + } + + public static void setRecipe(Item in, ItemStack out) { + + shredderRecipes.put(new ComparableStack(in), out); + } + + public static void setRecipe(Block in, ItemStack out) { + + shredderRecipes.put(new ComparableStack(in), out); + } + + public static void setRecipe(ItemStack in, ItemStack out) { + + shredderRecipes.put(new ComparableStack(in), out); + } + + public static Map getShredderRecipes() { + + //convert the map only once to save on processing power (might be more ram intensive but that can't be THAT bad, right?) + if(neiShredderRecipes == null) + neiShredderRecipes = new HashMap(shredderRecipes); + + return neiShredderRecipes; + } + + public static ItemStack getShredderResult(ItemStack stack) { + + if(stack == null || stack.getItem() == null) + return new ItemStack(ModItems.scrap); + + ItemStack sta = shredderRecipes.get(new ComparableStack(stack).makeSingular()); + + /*if(sta != null) + System.out.println(stack.getDisplayName() + " resulted " + sta.getDisplayName()); + else + System.out.println(stack.getDisplayName() + " resulted null");*/ + + return sta == null ? new ItemStack(ModItems.scrap) : sta; + } +} diff --git a/com/hbm/inventory/container/ContainerCrystallizer.java b/com/hbm/inventory/container/ContainerCrystallizer.java index 3937ca03a..d13f887e7 100644 --- a/com/hbm/inventory/container/ContainerCrystallizer.java +++ b/com/hbm/inventory/container/ContainerCrystallizer.java @@ -20,6 +20,8 @@ public class ContainerCrystallizer extends Container { this.addSlotToContainer(new Slot(tedf, 0, 80, 35)); this.addSlotToContainer(new Slot(tedf, 1, 8, 53)); this.addSlotToContainer(new SlotMachineOutput(tedf, 2, 140, 35)); + this.addSlotToContainer(new Slot(tedf, 3, 26, 17)); + this.addSlotToContainer(new SlotMachineOutput(tedf, 4, 25, 53)); for(int i = 0; i < 3; i++) { @@ -51,10 +53,11 @@ public class ContainerCrystallizer extends Container { { return null; } - } - else if (!this.mergeItemStack(var5, 0, diFurnace.getSizeInventory(), false)) - { - return null; + } else { + + if (!this.mergeItemStack(var5, 0, 2, false)) + if (!this.mergeItemStack(var5, 3, 4, false)) + return null; } if (var5.stackSize == 0) diff --git a/com/hbm/inventory/gui/GUICrystallizer.java b/com/hbm/inventory/gui/GUICrystallizer.java index cd791789f..e1dad814c 100644 --- a/com/hbm/inventory/gui/GUICrystallizer.java +++ b/com/hbm/inventory/gui/GUICrystallizer.java @@ -2,6 +2,7 @@ package com.hbm.inventory.gui; import org.lwjgl.opengl.GL11; +import com.hbm.inventory.FluidTank; import com.hbm.inventory.container.ContainerCrystallizer; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityMachineCrystallizer; @@ -13,7 +14,7 @@ import net.minecraft.util.ResourceLocation; public class GUICrystallizer extends GuiInfoContainer { - private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_crystallizer.png"); + public static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_crystallizer.png"); private TileEntityMachineCrystallizer acidomatic; public GUICrystallizer(InventoryPlayer invPlayer, TileEntityMachineCrystallizer acidomatic) { @@ -24,6 +25,14 @@ public class GUICrystallizer extends GuiInfoContainer { this.ySize = 168; } + @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, acidomatic.power, acidomatic.maxPower); + acidomatic.tank.renderTankInfo(this, mouseX, mouseY, guiLeft + 44, guiTop + 17, 16, 52); + } + @Override protected void drawGuiContainerForegroundLayer(int i, int j) { String name = this.acidomatic.hasCustomInventoryName() ? this.acidomatic.getInventoryName() : I18n.format(this.acidomatic.getInventoryName()); @@ -37,5 +46,14 @@ public class GUICrystallizer extends GuiInfoContainer { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); Minecraft.getMinecraft().getTextureManager().bindTexture(texture); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + int i = (int)acidomatic.getPowerScaled(34); + drawTexturedModalRect(guiLeft + 8, guiTop + 51 - i, 176, 34 - i, 16, i); + + int j = acidomatic.getProgressScaled(23); + drawTexturedModalRect(guiLeft + 104, guiTop + 34, 192, 0, j, 16); + + Minecraft.getMinecraft().getTextureManager().bindTexture(acidomatic.tank.getSheet()); + acidomatic.tank.renderTank(this, guiLeft + 44, guiTop + 69, acidomatic.tank.getTankType().textureX() * FluidTank.x, acidomatic.tank.getTankType().textureY() * FluidTank.y, 16, 52); } } diff --git a/com/hbm/items/ModItems.java b/com/hbm/items/ModItems.java index b2ff79ece..468483bb7 100644 --- a/com/hbm/items/ModItems.java +++ b/com/hbm/items/ModItems.java @@ -226,6 +226,28 @@ public class ModItems { public static Item solid_fuel; public static Item rocket_fuel; + public static Item crystal_iron; + public static Item crystal_gold; + public static Item crystal_redstone; + public static Item crystal_uranium; + public static Item crystal_thorium; + public static Item crystal_plutonium; + public static Item crystal_titanium; + public static Item crystal_sulfur; + public static Item crystal_niter; + public static Item crystal_copper; + public static Item crystal_tungsten; + public static Item crystal_aluminium; + public static Item crystal_fluorite; + public static Item crystal_beryllium; + public static Item crystal_lead; + public static Item crystal_schrabidium; + public static Item crystal_rare; + public static Item crystal_phosphorus; + public static Item crystal_lithium; + public static Item crystal_starmetal; + public static Item crystal_trixite; + public static Item powder_lead; public static Item powder_neptunium; public static Item powder_schrabidium; @@ -645,6 +667,7 @@ public class ModItems { public static Item jetpack_tank; public static Item gun_kit_1; public static Item gun_kit_2; + public static Item cbt_device; public static Item can_empty; public static Item can_smart; @@ -1587,6 +1610,7 @@ public class ModItems { public static Item shimmer_sledge; public static Item shimmer_axe; public static Item bottle_opener; + public static Item pch; public static Item crowbar; @@ -2051,6 +2075,28 @@ public class ModItems { nugget_les = new ItemRadioactive(0.5F, false, true).setUnlocalizedName("nugget_les").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_les"); plate_combine_steel = new Item().setUnlocalizedName("plate_combine_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_combine_steel"); + crystal_iron = new Item().setUnlocalizedName("crystal_iron").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_iron"); + crystal_gold = new Item().setUnlocalizedName("crystal_gold").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_gold"); + crystal_redstone = new Item().setUnlocalizedName("crystal_redstone").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_redstone"); + crystal_uranium = new ItemRadioactive(0.75F).setUnlocalizedName("crystal_uranium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_uranium"); + crystal_thorium = new Item().setUnlocalizedName("crystal_thorium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_thorium"); + crystal_plutonium = new ItemRadioactive(3.0F).setUnlocalizedName("crystal_plutonium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_plutonium"); + crystal_titanium = new Item().setUnlocalizedName("crystal_titanium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_titanium"); + crystal_sulfur = new Item().setUnlocalizedName("crystal_sulfur").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_sulfur"); + crystal_niter = new Item().setUnlocalizedName("crystal_niter").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_niter"); + crystal_copper = new Item().setUnlocalizedName("crystal_copper").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_copper"); + crystal_tungsten = new Item().setUnlocalizedName("crystal_tungsten").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_tungsten"); + crystal_aluminium = new Item().setUnlocalizedName("crystal_aluminium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_aluminium"); + crystal_fluorite = new Item().setUnlocalizedName("crystal_fluorite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_fluorite"); + crystal_beryllium = new Item().setUnlocalizedName("crystal_beryllium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_beryllium"); + crystal_lead = new Item().setUnlocalizedName("crystal_lead").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_lead"); + crystal_schrabidium = new ItemRadioactive(10F, false, true).setUnlocalizedName("crystal_schrabidium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_schrabidium"); + crystal_rare = new Item().setUnlocalizedName("crystal_rare").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_rare"); + crystal_phosphorus = new ItemRadioactive(0.0F, true).setUnlocalizedName("crystal_phosphorus").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_phosphorus"); + crystal_lithium = new Item().setUnlocalizedName("crystal_lithium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_lithium"); + crystal_starmetal = new Item().setUnlocalizedName("crystal_starmetal").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_starmetal"); + crystal_trixite = new ItemRadioactive(10.0F).setUnlocalizedName("crystal_trixite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_trixite"); + powder_lead = new Item().setUnlocalizedName("powder_lead").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_lead"); powder_neptunium = new ItemRadioactive(2.5F, true).setUnlocalizedName("powder_neptunium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_neptunium"); powder_schrabidium = new ItemRadioactive(7.5F, true, true).setUnlocalizedName("powder_schrabidium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_schrabidium"); @@ -2430,6 +2476,7 @@ public class ModItems { cladding_rubber = new ItemCladding(0.075F).setUnlocalizedName("cladding_rubber").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cladding_rubber"); cladding_lead = new ItemCladding(0.2F).setUnlocalizedName("cladding_lead").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cladding_lead"); cladding_desh = new ItemCladding(0.4F).setUnlocalizedName("cladding_desh").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cladding_desh"); + cbt_device = new ItemSyringe().setUnlocalizedName("cbt_device").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":cbt_device"); can_empty = new Item().setUnlocalizedName("can_empty").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":can_empty"); can_smart = new ItemEnergy().setUnlocalizedName("can_smart").setContainerItem(ModItems.can_empty).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":can_smart"); @@ -3596,6 +3643,7 @@ public class ModItems { wrench = new WeaponSpecial(MainRegistry.tMatSteel).setUnlocalizedName("wrench").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":wrench"); wrench_flipped = new WeaponSpecial(MainRegistry.tMatElec).setUnlocalizedName("wrench_flipped").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":wrench_flipped"); memespoon = new WeaponSpecial(MainRegistry.tMatSteel).setUnlocalizedName("memespoon").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":memespoon"); + pch = new WeaponSpecial(MainRegistry.tMatHammmer).setUnlocalizedName("pch").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":pch"); multitool_hit = new ItemMultitoolPassive().setUnlocalizedName("multitool_hit").setCreativeTab(null).setTextureName(RefStrings.MODID + ":multitool_fist"); multitool_dig = new ItemMultitoolTool(4.0F, MainRegistry.enumToolMaterialMultitool, ItemMultitoolTool.getAllBlocks()).setFull3D().setUnlocalizedName("multitool_dig").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":multitool_claw"); @@ -3927,6 +3975,29 @@ public class ModItems { GameRegistry.registerItem(cordite, cordite.getUnlocalizedName()); GameRegistry.registerItem(ballistite, ballistite.getUnlocalizedName()); + //Crystals + GameRegistry.registerItem(crystal_iron, crystal_iron.getUnlocalizedName()); + GameRegistry.registerItem(crystal_gold, crystal_gold.getUnlocalizedName()); + GameRegistry.registerItem(crystal_redstone, crystal_redstone.getUnlocalizedName()); + GameRegistry.registerItem(crystal_uranium, crystal_uranium.getUnlocalizedName()); + GameRegistry.registerItem(crystal_thorium, crystal_thorium.getUnlocalizedName()); + GameRegistry.registerItem(crystal_plutonium, crystal_plutonium.getUnlocalizedName()); + GameRegistry.registerItem(crystal_titanium, crystal_titanium.getUnlocalizedName()); + GameRegistry.registerItem(crystal_sulfur, crystal_sulfur.getUnlocalizedName()); + GameRegistry.registerItem(crystal_niter, crystal_niter.getUnlocalizedName()); + GameRegistry.registerItem(crystal_copper, crystal_copper.getUnlocalizedName()); + GameRegistry.registerItem(crystal_tungsten, crystal_tungsten.getUnlocalizedName()); + GameRegistry.registerItem(crystal_aluminium, crystal_aluminium.getUnlocalizedName()); + GameRegistry.registerItem(crystal_fluorite, crystal_fluorite.getUnlocalizedName()); + GameRegistry.registerItem(crystal_beryllium, crystal_beryllium.getUnlocalizedName()); + GameRegistry.registerItem(crystal_lead, crystal_lead.getUnlocalizedName()); + GameRegistry.registerItem(crystal_schrabidium, crystal_schrabidium.getUnlocalizedName()); + GameRegistry.registerItem(crystal_rare, crystal_rare.getUnlocalizedName()); + GameRegistry.registerItem(crystal_phosphorus, crystal_phosphorus.getUnlocalizedName()); + GameRegistry.registerItem(crystal_lithium, crystal_lithium.getUnlocalizedName()); + GameRegistry.registerItem(crystal_starmetal, crystal_starmetal.getUnlocalizedName()); + GameRegistry.registerItem(crystal_trixite, crystal_trixite.getUnlocalizedName()); + //Fragments GameRegistry.registerItem(fragment_neodymium, fragment_neodymium.getUnlocalizedName()); GameRegistry.registerItem(fragment_cobalt, fragment_cobalt.getUnlocalizedName()); @@ -5135,6 +5206,7 @@ public class ModItems { GameRegistry.registerItem(schrabidium_hammer, schrabidium_hammer.getUnlocalizedName()); GameRegistry.registerItem(shimmer_sledge, shimmer_sledge.getUnlocalizedName()); GameRegistry.registerItem(shimmer_axe, shimmer_axe.getUnlocalizedName()); + GameRegistry.registerItem(pch, pch.getUnlocalizedName()); GameRegistry.registerItem(schrabidium_pickaxe, schrabidium_pickaxe.getUnlocalizedName()); GameRegistry.registerItem(schrabidium_axe, schrabidium_axe.getUnlocalizedName()); GameRegistry.registerItem(schrabidium_shovel, schrabidium_shovel.getUnlocalizedName()); @@ -5316,6 +5388,7 @@ public class ModItems { //Chaos GameRegistry.registerItem(chocolate_milk, chocolate_milk.getUnlocalizedName()); + GameRegistry.registerItem(cbt_device, cbt_device.getUnlocalizedName()); //Cladding GameRegistry.registerItem(cladding_paint, cladding_paint.getUnlocalizedName()); diff --git a/com/hbm/items/special/ItemSyringe.java b/com/hbm/items/special/ItemSyringe.java index 31c242fee..96216c69d 100644 --- a/com/hbm/items/special/ItemSyringe.java +++ b/com/hbm/items/special/ItemSyringe.java @@ -356,6 +356,17 @@ public class ItemSyringe extends Item { } } + if(this == ModItems.cbt_device) + { + if (!world.isRemote) + { + player.addPotionEffect(new PotionEffect(HbmPotion.bang.id, 30, 0)); + + stack.stackSize--; + world.playSoundAtEntity(player, "hbm:item.vice", 1.0F, 1.0F); + } + } + return stack; } diff --git a/com/hbm/items/tool/WeaponSpecial.java b/com/hbm/items/tool/WeaponSpecial.java index 72f0d6d87..5dfd5144f 100644 --- a/com/hbm/items/tool/WeaponSpecial.java +++ b/com/hbm/items/tool/WeaponSpecial.java @@ -10,11 +10,13 @@ import com.hbm.entity.projectile.EntityRubble; import com.hbm.handler.ArmorUtil; import com.hbm.items.ModItems; import com.hbm.main.MainRegistry; +import com.hbm.potion.HbmPotion; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.passive.EntityHorse; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.EnumRarity; @@ -63,6 +65,37 @@ public class WeaponSpecial extends ItemSword { world.playSoundAtEntity(entity, "hbm:weapon.bonk", 3.0F, 1.0F); } + if(this == ModItems.pch) { + + world.playSoundAtEntity(entity, "hbm:weapon.bodysplat", 10.0F, 1.0F); + + if(entity instanceof EntityHorse) { + + for(int i = 0; i < 10; i++) { + EntityHorse horse = (EntityHorse) ((EntityHorse) entity).createChild((EntityHorse)entity); + horse.setPositionAndRotation(entity.posX, entity.posY, entity.posZ, entity.rotationYaw, entity.rotationPitch); + horse.setGrowingAge(-24000); + world.spawnEntityInWorld(horse); + } + + return false; + } + + if (!world.isRemote) + { + entity.addPotionEffect(new PotionEffect(HbmPotion.bang.id, 20, 0)); + } + + Vec3 vec = entityPlayer.getLookVec(); + double dX = vec.xCoord * 10; + double dY = vec.yCoord * 10; + double dZ = vec.zCoord * 10; + + entity.motionX += dX; + entity.motionY += dY; + entity.motionZ += dZ; + } + if(this == ModItems.bottle_opener) { if (!world.isRemote) { @@ -239,6 +272,9 @@ public class WeaponSpecial extends ItemSword { list.add("Even though it says \"+1000000000"); list.add("damage\", it's actually \"onehit anything\""); } + if(this == ModItems.pch) { + list.add("How am I not locked up yet?"); + } if(this == ModItems.ullapool_caber) { list.add("High-yield Scottish face removal."); list.add("A sober person would throw it..."); diff --git a/com/hbm/lib/Library.java b/com/hbm/lib/Library.java index 5480eed98..b37416730 100644 --- a/com/hbm/lib/Library.java +++ b/com/hbm/lib/Library.java @@ -52,12 +52,8 @@ public class Library { static Random rand = new Random(); - public static List book1 = new ArrayList(); - public static List book2 = new ArrayList(); - public static List book3 = new ArrayList(); - public static List book4 = new ArrayList(); - public static List book5 = new ArrayList(); - + //this is a list of UUIDs used for various things, primarily for accessories. + //for a comprehensive list, check RenderAccessoryUtility.java public static String HbMinecraft = "192af5d7-ed0f-48d8-bd89-9d41af8524f8"; public static String LPkukin = "937c9804-e11f-4ad2-a5b1-42e62ac73077"; public static String Dafnik = "3af1c262-61c0-4b12-a4cb-424cc3a9c8c0"; @@ -74,12 +70,10 @@ public class Library { public static String ZippySqrl = "03c20435-a229-489a-a1a1-671b803f7017"; public static String Schrabby = "3a4a1944-5154-4e67-b80a-b6561e8630b7"; + //the old list that allowed superuser mode for the ZOMG + //currently unused public static List superuser = new ArrayList(); - public static void initBooks() { - - } - public static void applyRadData(Entity e, float f) { if(!(e instanceof EntityLivingBase)) diff --git a/com/hbm/lib/RefStrings.java b/com/hbm/lib/RefStrings.java index a986c72e8..280a79a8f 100644 --- a/com/hbm/lib/RefStrings.java +++ b/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 (3522)"; + public static final String VERSION = "1.0.27 BETA (3528)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/com/hbm/main/ClientProxy.java b/com/hbm/main/ClientProxy.java index 212c5dbd7..22693f8fb 100644 --- a/com/hbm/main/ClientProxy.java +++ b/com/hbm/main/ClientProxy.java @@ -31,83 +31,14 @@ import com.hbm.entity.mob.*; import com.hbm.entity.particle.*; import com.hbm.entity.projectile.*; import com.hbm.items.ModItems; -import com.hbm.particle.ParticleContrail; -import com.hbm.particle.ParticleExSmoke; -import com.hbm.particle.ParticleRadiationFog; -import com.hbm.particle.ParticleRocketFlame; -import com.hbm.particle.ParticleSmokePlume; +import com.hbm.particle.*; import com.hbm.render.block.*; import com.hbm.render.entity.*; -import com.hbm.render.entity.effect.ElectricityRenderer; -import com.hbm.render.entity.effect.FogRenderer; -import com.hbm.render.entity.effect.GasFlameRenderer; -import com.hbm.render.entity.effect.GasRenderer; -import com.hbm.render.entity.effect.MultiCloudRenderer; -import com.hbm.render.entity.effect.RenderBigNuke; -import com.hbm.render.entity.effect.RenderBlackHole; -import com.hbm.render.entity.effect.RenderCloudFleija; -import com.hbm.render.entity.effect.RenderCloudRainbow; -import com.hbm.render.entity.effect.RenderCloudSolinium; -import com.hbm.render.entity.effect.RenderDeathBlast; -import com.hbm.render.entity.effect.RenderEMPBlast; -import com.hbm.render.entity.effect.RenderFallout; -import com.hbm.render.entity.effect.RenderFireball; -import com.hbm.render.entity.effect.RenderFlare; -import com.hbm.render.entity.effect.RenderNoCloud; -import com.hbm.render.entity.effect.RenderSmallNukeMK3; -import com.hbm.render.entity.effect.SSmokeRenderer; -import com.hbm.render.entity.effect.SpillRenderer; -import com.hbm.render.entity.effect.TSmokeRenderer; -import com.hbm.render.entity.item.RenderBomber; -import com.hbm.render.entity.item.RenderMinecartTest; -import com.hbm.render.entity.item.RenderMovingItem; -import com.hbm.render.entity.mob.RenderCyberCrab; -import com.hbm.render.entity.mob.RenderHunterChopper; -import com.hbm.render.entity.mob.RenderNuclearCreeper; -import com.hbm.render.entity.mob.RenderTaintCrab; -import com.hbm.render.entity.mob.RenderTaintedCreeper; -import com.hbm.render.entity.mob.RenderTeslaCrab; -import com.hbm.render.entity.projectile.RenderBaleflare; -import com.hbm.render.entity.projectile.RenderBeam; -import com.hbm.render.entity.projectile.RenderBeam2; -import com.hbm.render.entity.projectile.RenderBeam3; -import com.hbm.render.entity.projectile.RenderBeam4; -import com.hbm.render.entity.projectile.RenderBeam5; -import com.hbm.render.entity.projectile.RenderBeam6; -import com.hbm.render.entity.projectile.RenderBombletSelena; -import com.hbm.render.entity.projectile.RenderBombletTheta; -import com.hbm.render.entity.projectile.RenderBoxcar; -import com.hbm.render.entity.projectile.RenderBullet; -import com.hbm.render.entity.projectile.RenderChopperMine; -import com.hbm.render.entity.projectile.RenderFOEQ; -import com.hbm.render.entity.projectile.RenderFallingNuke; -import com.hbm.render.entity.projectile.RenderLN2; -import com.hbm.render.entity.projectile.RenderLaser; -import com.hbm.render.entity.projectile.RenderMeteor; -import com.hbm.render.entity.projectile.RenderMiniMIRV; -import com.hbm.render.entity.projectile.RenderMiniNuke; -import com.hbm.render.entity.projectile.RenderMirv; -import com.hbm.render.entity.projectile.RenderOminousBullet; -import com.hbm.render.entity.projectile.RenderRainbow; -import com.hbm.render.entity.projectile.RenderRocket; -import com.hbm.render.entity.projectile.RenderRubble; -import com.hbm.render.entity.projectile.RenderSRocket; -import com.hbm.render.entity.projectile.RenderShrapnel; -import com.hbm.render.entity.projectile.RenderTom; -import com.hbm.render.entity.rocket.RenderBoosterMissile; -import com.hbm.render.entity.rocket.RenderCarrierMissile; -import com.hbm.render.entity.rocket.RenderMinerRocket; -import com.hbm.render.entity.rocket.RenderMissileCustom; -import com.hbm.render.entity.rocket.RenderMissileDoomsday; -import com.hbm.render.entity.rocket.RenderMissileGeneric; -import com.hbm.render.entity.rocket.RenderMissileHuge; -import com.hbm.render.entity.rocket.RenderMissileMirv; -import com.hbm.render.entity.rocket.RenderMissileNuclear; -import com.hbm.render.entity.rocket.RenderMissileStrong; -import com.hbm.render.entity.rocket.RenderMissileTaint; -import com.hbm.render.entity.rocket.RenderMissileThermo; -import com.hbm.render.entity.rocket.RenderSoyuz; -import com.hbm.render.entity.rocket.RenderSoyuzCapsule; +import com.hbm.render.entity.effect.*; +import com.hbm.render.entity.item.*; +import com.hbm.render.entity.mob.*; +import com.hbm.render.entity.projectile.*; +import com.hbm.render.entity.rocket.*; import com.hbm.render.item.*; import com.hbm.render.loader.HmfModelLoader; import com.hbm.render.tileentity.*; @@ -216,7 +147,6 @@ public class ClientProxy extends ServerProxy ClientRegistry.bindTileEntitySpecialRenderer(TileEntityVaultDoor.class, new RenderVaultDoor()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityBlastDoor.class, new RenderBlastDoor()); - //RenderingRegistry.registerEntityRenderingHandler(EntityRocket.class, new RenderRocket()); RenderingRegistry.registerEntityRenderingHandler(EntityRocket.class, new RenderSnowball(ModItems.man_core)); MinecraftForgeClient.registerItemRenderer(ModItems.gun_rpg, new ItemRenderRpg()); @@ -252,7 +182,7 @@ public class ClientProxy extends ServerProxy RenderingRegistry.registerEntityRenderingHandler(EntityGrenadePlasma.class, new RenderSnowball(ModItems.grenade_plasma)); RenderingRegistry.registerEntityRenderingHandler(EntityGrenadeTau.class, new RenderSnowball(ModItems.grenade_tau)); RenderingRegistry.registerEntityRenderingHandler(EntityGrenadeLemon.class, new RenderSnowball(ModItems.grenade_lemon)); - RenderingRegistry.registerEntityRenderingHandler(EntityGrenadeMk2.class, new RenderSnowball(ModItems.grenade_mk2)); + RenderingRegistry.registerEntityRenderingHandler(EntityGrenadeMk2.class, new RenderGrenade()); RenderingRegistry.registerEntityRenderingHandler(EntityGrenadeZOMG.class, new RenderSnowball(ModItems.grenade_zomg)); RenderingRegistry.registerEntityRenderingHandler(EntityGrenadeASchrab.class, new RenderSnowball(ModItems.grenade_aschrab)); RenderingRegistry.registerEntityRenderingHandler(EntityGrenadePulse.class, new RenderSnowball(ModItems.grenade_pulse)); @@ -381,6 +311,7 @@ public class ClientProxy extends ServerProxy MinecraftForgeClient.registerItemRenderer(ModItems.shimmer_axe, new ItemRenderShim()); MinecraftForgeClient.registerItemRenderer(ModItems.stopsign, new ItemRenderShim()); MinecraftForgeClient.registerItemRenderer(ModItems.sopsign, new ItemRenderShim()); + MinecraftForgeClient.registerItemRenderer(ModItems.pch, new ItemRenderShim()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_brimstone, new ItemRenderObj()); diff --git a/com/hbm/main/CraftingManager.java b/com/hbm/main/CraftingManager.java index 69801fc02..2e45c91a3 100644 --- a/com/hbm/main/CraftingManager.java +++ b/com/hbm/main/CraftingManager.java @@ -38,6 +38,8 @@ public class CraftingManager { GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.bolt_compound, 1), new Object[] { "PDP", "PTP", "PDP", 'D', ModItems.bolt_dura_steel, 'T', ModItems.bolt_tungsten, 'P', "plateTitanium" })); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.pellet_coal, 1), new Object[] { "PFP", "FOF", "PFP", 'P', "dustCoal", 'F', Items.flint, 'O', ModBlocks.gravel_obsidian })); GameRegistry.addRecipe(new ItemStack(ModItems.plate_polymer, 8), new Object[] { "DD", 'D', ModItems.ingot_polymer}); + GameRegistry.addRecipe(new ItemStack(ModItems.plate_polymer, 16), new Object[] { "DD", 'D', ModItems.ingot_fiberglass}); + GameRegistry.addRecipe(new ItemStack(ModItems.plate_polymer, 16), new Object[] { "DD", 'D', ModItems.ingot_asbestos}); GameRegistry.addRecipe(new ItemStack(ModItems.plate_polymer, 4), new Object[] { "SWS", 'S', Items.string, 'W', Blocks.wool }); GameRegistry.addRecipe(new ItemStack(ModItems.plate_polymer, 4), new Object[] { "BB", 'B', Items.brick }); @@ -516,6 +518,7 @@ public class CraftingManager { GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.shimmer_handle, 1), new Object[] { "GP", "GP", "GP", 'G', "plateGold", 'P', "ingotPolymer" })); GameRegistry.addRecipe(new ItemStack(ModItems.shimmer_sledge, 1), new Object[] { "H", "G", "G", 'G', ModItems.shimmer_handle, 'H', ModItems.shimmer_head }); GameRegistry.addRecipe(new ItemStack(ModItems.shimmer_axe, 1), new Object[] { "H", "G", "G", 'G', ModItems.shimmer_handle, 'H', ModItems.shimmer_axe_head }); + GameRegistry.addRecipe(new ItemStack(ModItems.pch, 1), new Object[] { "CDC", "CBC", "CHC", 'C', ModItems.canned_jizz, 'D', ModItems.ducttape, 'B', ModItems.fluid_barrel_empty, 'H', ModItems.schrabidium_hammer }); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.definitelyfood, 1), new Object[] { "DDD", "SDS", "DDD", 'D', Blocks.dirt, 'S', "plateSteel" })); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.blade_tungsten, 2), new Object[] { "IP", "TP", "TI", 'P', "plateTitanium", 'T', "ingotTitanium", 'I', "ingotTungsten" })); GameRegistry.addRecipe(new ItemStack(ModItems.turbine_tungsten, 1), new Object[] { "BBB", "BSB", "BBB", 'B', ModItems.blade_tungsten, 'S', ModItems.ingot_dura_steel }); @@ -523,6 +526,7 @@ public class CraftingManager { GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.wrench, 1), new Object[] { " S ", " IS", "I ", 'S', "ingotSteel", 'I', "ingotIron" })); GameRegistry.addRecipe(new ItemStack(ModItems.wrench_flipped, 1), new Object[] { "S", "D", "W", 'S', Items.iron_sword, 'D', ModItems.ducttape, 'W', ModItems.wrench }); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.memespoon, 1), new Object[] { "CGC", "PSP", "IAI", 'C', ModItems.powder_cloud, 'G', ModBlocks.block_thorium, 'P', ModItems.photo_panel, 'S', ModItems.steel_shovel, 'I', ModItems.plate_polymer, 'A', "ingotAustralium" })); + GameRegistry.addShapelessRecipe(new ItemStack(ModItems.cbt_device, 1), new Object[] { ModItems.bolt_tungsten, ModItems.wrench }); GameRegistry.addShapelessRecipe(new ItemStack(ModItems.toothpicks, 3), new Object[] { Items.stick, Items.stick, Items.stick }); GameRegistry.addShapedRecipe(new ItemStack(ModItems.ducttape, 6), new Object[] { "FSF", "SPS", "FSF", 'F', Items.string, 'S', Items.slime_ball, 'P', Items.paper }); @@ -1519,6 +1523,7 @@ public class CraftingManager { GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.cladding_rubber, 1), new Object[] { "RCR", "CDC", "RCR", 'R', ModItems.plate_polymer, 'C', "dustCoal", 'D', ModItems.ducttape })); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.cladding_lead, 1), new Object[] { "DPD", "PRP", "DPD", 'R', ModItems.cladding_rubber, 'P', "plateLead", 'D', ModItems.ducttape })); GameRegistry.addRecipe(new ItemStack(ModItems.cladding_desh, 1), new Object[] { "DPD", "PRP", "DPD", 'R', ModItems.cladding_lead, 'P', ModItems.plate_desh, 'D', ModItems.ducttape }); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.machine_crystallizer, 1), new Object[] { "PMP", "STS", "DMD", 'P', "ingotPolymer", 'M', ModItems.motor, 'S', ModItems.blades_advanced_alloy, 'T', ModItems.tank_steel, 'D', "ingotDesh" })); } @@ -1598,5 +1603,27 @@ public class CraftingManager { GameRegistry.addSmelting(new ItemStack(Items.dye, 1, 15), new ItemStack(Items.slime_ball, 1), 0.0F); GameRegistry.addSmelting(new ItemStack(Blocks.gravel, 1), new ItemStack(Blocks.cobblestone, 1), 0.0F); GameRegistry.addSmelting(new ItemStack(ModBlocks.gravel_obsidian), new ItemStack(Blocks.obsidian), 0.0F); + + GameRegistry.addSmelting(ModItems.crystal_iron, new ItemStack(Items.iron_ingot, 2), 2.0F); + GameRegistry.addSmelting(ModItems.crystal_gold, new ItemStack(Items.gold_ingot, 2), 2.0F); + GameRegistry.addSmelting(ModItems.crystal_redstone, new ItemStack(Items.redstone, 6), 2.0F); + GameRegistry.addSmelting(ModItems.crystal_uranium, new ItemStack(ModItems.ingot_uranium, 2), 2.0F); + GameRegistry.addSmelting(ModItems.crystal_thorium, new ItemStack(ModItems.ingot_th232, 2), 2.0F); + GameRegistry.addSmelting(ModItems.crystal_plutonium, new ItemStack(ModItems.ingot_plutonium, 2), 2.0F); + GameRegistry.addSmelting(ModItems.crystal_titanium, new ItemStack(ModItems.ingot_titanium, 2), 2.0F); + GameRegistry.addSmelting(ModItems.crystal_sulfur, new ItemStack(ModItems.sulfur, 6), 2.0F); + GameRegistry.addSmelting(ModItems.crystal_niter, new ItemStack(ModItems.niter, 6), 2.0F); + GameRegistry.addSmelting(ModItems.crystal_copper, new ItemStack(ModItems.ingot_copper, 2), 2.0F); + GameRegistry.addSmelting(ModItems.crystal_tungsten, new ItemStack(ModItems.ingot_tungsten, 2), 2.0F); + GameRegistry.addSmelting(ModItems.crystal_aluminium, new ItemStack(ModItems.ingot_aluminium, 2), 2.0F); + GameRegistry.addSmelting(ModItems.crystal_fluorite, new ItemStack(ModItems.fluorite, 6), 2.0F); + GameRegistry.addSmelting(ModItems.crystal_beryllium, new ItemStack(ModItems.ingot_beryllium, 2), 2.0F); + GameRegistry.addSmelting(ModItems.crystal_lead, new ItemStack(ModItems.ingot_lead, 2), 2.0F); + GameRegistry.addSmelting(ModItems.crystal_schrabidium, new ItemStack(ModItems.ingot_schrabidium, 2), 2.0F); + GameRegistry.addSmelting(ModItems.crystal_rare, new ItemStack(ModItems.powder_desh_mix, 1), 2.0F); + GameRegistry.addSmelting(ModItems.crystal_phosphorus, new ItemStack(ModItems.powder_fire, 6), 2.0F); + GameRegistry.addSmelting(ModItems.crystal_lithium, new ItemStack(ModItems.lithium, 2), 2.0F); + GameRegistry.addSmelting(ModItems.crystal_starmetal, new ItemStack(ModItems.ingot_starmetal, 2), 2.0F); + GameRegistry.addSmelting(ModItems.crystal_trixite, new ItemStack(ModItems.ingot_plutonium, 4), 2.0F); } } diff --git a/com/hbm/main/MainRegistry.java b/com/hbm/main/MainRegistry.java index 4fe16fdc3..7643b4a22 100644 --- a/com/hbm/main/MainRegistry.java +++ b/com/hbm/main/MainRegistry.java @@ -5,7 +5,6 @@ import net.minecraft.creativetab.CreativeTabs; import net.minecraft.dispenser.BehaviorProjectileDispense; import net.minecraft.dispenser.IPosition; import net.minecraft.entity.IProjectile; -import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.Item.ToolMaterial; @@ -374,6 +373,7 @@ public class MainRegistry BulletConfigSyncingUtil.loadConfigsForSync(); CellularDungeonFactory.init(); Satellite.register(); + VersionChecker.checkVersion(); Library.superuser.add("192af5d7-ed0f-48d8-bd89-9d41af8524f8"); Library.superuser.add("5aee1e3d-3767-4987-a222-e7ce1fbdf88e"); @@ -381,10 +381,6 @@ public class MainRegistry Library.superuser.add("3af1c262-61c0-4b12-a4cb-424cc3a9c8c0"); Library.superuser.add("4729b498-a81c-42fd-8acd-20d6d9f759e0"); Library.superuser.add("c3f5e449-6d8c-4fe3-acc9-47ef50e7e7ae"); - //until he manages to do the most basic thing and INSTALL NEI - //Library.superuser.add("122fe98f-be19-49ca-a96b-d4dee4f0b22e"); - - Library.initBooks(); aMatSchrab.customCraftingMaterial = ModItems.ingot_schrabidium; aMatHaz.customCraftingMaterial = ModItems.hazmat_cloth; @@ -1252,7 +1248,7 @@ public class MainRegistry OreDictionary.registerOre("oreSchrabidium", ModBlocks.ore_schrabidium); OreDictionary.registerOre("oreSulfur", ModBlocks.ore_sulfur); OreDictionary.registerOre("oreNiter", ModBlocks.ore_niter); - OreDictionary.registerOre("oreSapeter", ModBlocks.ore_niter); + OreDictionary.registerOre("oreSalpeter", ModBlocks.ore_niter); OreDictionary.registerOre("oreCopper", ModBlocks.ore_copper); OreDictionary.registerOre("oreTungsten", ModBlocks.ore_tungsten); OreDictionary.registerOre("oreAluminum", ModBlocks.ore_aluminium); @@ -1321,68 +1317,10 @@ public class MainRegistry @EventHandler public static void PostLoad(FMLPostInitializationEvent PostEvent) { - MachineRecipes.registerShredder(); + ShredderRecipes.registerShredder(); + ShredderRecipes.registerOverrides(); CrystallizerRecipes.register(); - - MachineRecipes.overridePreSetRecipe(new ItemStack(ModItems.scrap), new ItemStack(ModItems.dust)); - MachineRecipes.overridePreSetRecipe(new ItemStack(ModItems.dust), new ItemStack(ModItems.dust)); - MachineRecipes.overridePreSetRecipe(new ItemStack(Blocks.glowstone), new ItemStack(Items.glowstone_dust, 4)); - MachineRecipes.overridePreSetRecipe(new ItemStack(Blocks.quartz_block, 1, 0), new ItemStack(ModItems.powder_quartz, 4)); - MachineRecipes.overridePreSetRecipe(new ItemStack(Blocks.quartz_block, 1, 1), new ItemStack(ModItems.powder_quartz, 4)); - MachineRecipes.overridePreSetRecipe(new ItemStack(Blocks.quartz_block, 1, 2), new ItemStack(ModItems.powder_quartz, 4)); - MachineRecipes.overridePreSetRecipe(new ItemStack(Blocks.quartz_stairs), new ItemStack(ModItems.powder_quartz, 3)); - MachineRecipes.overridePreSetRecipe(new ItemStack(Blocks.stone_slab, 1, 7), new ItemStack(ModItems.powder_quartz, 2)); - MachineRecipes.overridePreSetRecipe(new ItemStack(Items.quartz), new ItemStack(ModItems.powder_quartz)); - MachineRecipes.overridePreSetRecipe(new ItemStack(Blocks.quartz_ore), new ItemStack(ModItems.powder_quartz, 2)); - MachineRecipes.overridePreSetRecipe(new ItemStack(ModBlocks.ore_nether_fire), new ItemStack(ModItems.powder_fire, 6)); - MachineRecipes.overridePreSetRecipe(new ItemStack(Blocks.packed_ice), new ItemStack(ModItems.powder_ice, 1)); - MachineRecipes.overridePreSetRecipe(new ItemStack(ModBlocks.brick_light), new ItemStack(Items.clay_ball, 4)); - MachineRecipes.overridePreSetRecipe(new ItemStack(ModBlocks.concrete), new ItemStack(Blocks.gravel, 1)); - MachineRecipes.overridePreSetRecipe(new ItemStack(ModBlocks.concrete_smooth), new ItemStack(Blocks.gravel, 1)); - MachineRecipes.overridePreSetRecipe(new ItemStack(ModBlocks.brick_concrete), new ItemStack(Blocks.gravel, 1)); - MachineRecipes.overridePreSetRecipe(new ItemStack(ModBlocks.brick_concrete_mossy), new ItemStack(Blocks.gravel, 1)); - MachineRecipes.overridePreSetRecipe(new ItemStack(ModBlocks.brick_concrete_cracked), new ItemStack(Blocks.gravel, 1)); - MachineRecipes.overridePreSetRecipe(new ItemStack(ModBlocks.brick_concrete_broken), new ItemStack(Blocks.gravel, 1)); - MachineRecipes.overridePreSetRecipe(new ItemStack(ModBlocks.brick_obsidian), new ItemStack(ModBlocks.gravel_obsidian, 1)); - MachineRecipes.overridePreSetRecipe(new ItemStack(Blocks.obsidian), new ItemStack(ModBlocks.gravel_obsidian, 1)); - MachineRecipes.overridePreSetRecipe(new ItemStack(Blocks.stone), new ItemStack(Blocks.gravel, 1)); - MachineRecipes.overridePreSetRecipe(new ItemStack(Blocks.cobblestone), new ItemStack(Blocks.gravel, 1)); - MachineRecipes.overridePreSetRecipe(new ItemStack(Blocks.stonebrick), new ItemStack(Blocks.gravel, 1)); - MachineRecipes.overridePreSetRecipe(new ItemStack(Blocks.gravel), new ItemStack(Blocks.sand, 1)); - MachineRecipes.overridePreSetRecipe(new ItemStack(Blocks.sand), new ItemStack(ModItems.dust, 2)); - MachineRecipes.overridePreSetRecipe(new ItemStack(Blocks.brick_block), new ItemStack(Items.clay_ball, 4)); - MachineRecipes.overridePreSetRecipe(new ItemStack(Blocks.brick_stairs), new ItemStack(Items.clay_ball, 3)); - MachineRecipes.overridePreSetRecipe(new ItemStack(Items.flower_pot), new ItemStack(Items.clay_ball, 3)); - MachineRecipes.overridePreSetRecipe(new ItemStack(Items.brick), new ItemStack(Items.clay_ball, 1)); - MachineRecipes.overridePreSetRecipe(new ItemStack(Blocks.sandstone), new ItemStack(Blocks.sand, 4)); - MachineRecipes.overridePreSetRecipe(new ItemStack(Blocks.sandstone_stairs), new ItemStack(Blocks.sand, 6)); - MachineRecipes.overridePreSetRecipe(new ItemStack(Blocks.clay), new ItemStack(Items.clay_ball, 4)); - MachineRecipes.overridePreSetRecipe(new ItemStack(Blocks.hardened_clay), new ItemStack(Items.clay_ball, 4)); - MachineRecipes.overridePreSetRecipe(new ItemStack(Blocks.tnt), new ItemStack(Items.gunpowder, 5)); - MachineRecipes.overridePreSetRecipe(new ItemStack(ModItems.powder_quartz), new ItemStack(ModItems.powder_lithium_tiny, 1)); - MachineRecipes.overridePreSetRecipe(new ItemStack(ModItems.powder_lapis), new ItemStack(ModItems.powder_cobalt_tiny, 1)); - MachineRecipes.overridePreSetRecipe(new ItemStack(ModItems.fragment_neodymium), new ItemStack(ModItems.powder_neodymium_tiny, 1)); - MachineRecipes.overridePreSetRecipe(new ItemStack(ModItems.fragment_cobalt), new ItemStack(ModItems.powder_cobalt_tiny, 1)); - MachineRecipes.overridePreSetRecipe(new ItemStack(ModItems.fragment_niobium), new ItemStack(ModItems.powder_niobium_tiny, 1)); - MachineRecipes.overridePreSetRecipe(new ItemStack(ModItems.fragment_cerium), new ItemStack(ModItems.powder_cerium_tiny, 1)); - MachineRecipes.overridePreSetRecipe(new ItemStack(ModItems.fragment_lanthanium), new ItemStack(ModItems.powder_lanthanium_tiny, 1)); - MachineRecipes.overridePreSetRecipe(new ItemStack(ModItems.fragment_actinium), new ItemStack(ModItems.powder_actinium_tiny, 1)); - MachineRecipes.overridePreSetRecipe(new ItemStack(ModItems.fragment_meteorite), new ItemStack(ModItems.powder_meteorite_tiny, 1)); - MachineRecipes.overridePreSetRecipe(new ItemStack(ModBlocks.block_meteor), new ItemStack(ModItems.powder_meteorite, 10)); - MachineRecipes.overridePreSetRecipe(new ItemStack(Items.enchanted_book), new ItemStack(ModItems.powder_magic, 1)); - MachineRecipes.overridePreSetRecipe(new ItemStack(ModItems.arc_electrode_burnt), new ItemStack(ModItems.powder_coal, 1)); - MachineRecipes.overridePreSetRecipe(new ItemStack(ModItems.arc_electrode_desh), new ItemStack(ModItems.powder_desh, 2)); - MachineRecipes.overridePreSetRecipe(new ItemStack(ModBlocks.meteor_polished), new ItemStack(ModItems.powder_meteorite, 1)); - MachineRecipes.overridePreSetRecipe(new ItemStack(ModBlocks.meteor_brick), new ItemStack(ModItems.powder_meteorite, 1)); - MachineRecipes.overridePreSetRecipe(new ItemStack(ModBlocks.meteor_brick_mossy), new ItemStack(ModItems.powder_meteorite, 1)); - MachineRecipes.overridePreSetRecipe(new ItemStack(ModBlocks.meteor_brick_cracked), new ItemStack(ModItems.powder_meteorite, 1)); - MachineRecipes.overridePreSetRecipe(new ItemStack(ModBlocks.meteor_brick_chiseled), new ItemStack(ModItems.powder_meteorite, 1)); - MachineRecipes.overridePreSetRecipe(new ItemStack(ModBlocks.meteor_pillar), new ItemStack(ModItems.powder_meteorite, 1)); - - for(int i = 0; i < 16; i++) { - MachineRecipes.overridePreSetRecipe(new ItemStack(Blocks.stained_hardened_clay, 1, i), new ItemStack(Items.clay_ball, 4)); - MachineRecipes.overridePreSetRecipe(new ItemStack(Blocks.wool, 1, i), new ItemStack(Items.string, 4)); - } + CentrifugeRecipes.register(); FluidContainerRegistry.instance.registerContainer(new FluidContainer(new ItemStack(Items.water_bucket), new ItemStack(Items.bucket), FluidType.WATER, 1000)); FluidContainerRegistry.instance.registerContainer(new FluidContainer(new ItemStack(Items.lava_bucket), new ItemStack(Items.bucket), FluidType.LAVA, 1000)); @@ -1863,8 +1801,8 @@ public class MainRegistry final String CATEGORY_TOOLS = "11_tools"; recursionDepth = createConfigInt(config, CATEGORY_TOOLS, "11.00_recursionDepth", "Limits veinminer's recursive function. Usually not an issue, unless you're using bukkit which is especially sensitive for some reason.", 1000); - recursiveStone = createConfigBool(config, CATEGORY_TOOLS, "11.01_recursionDepth", "Determines whether veinminer can break stone", true); - recursiveNetherrack = createConfigBool(config, CATEGORY_TOOLS, "11.02_recursionDepth", "Determines whether veinminer can break netherrack", true); + recursiveStone = createConfigBool(config, CATEGORY_TOOLS, "11.01_recursionDepth", "Determines whether veinminer can break stone", false); + recursiveNetherrack = createConfigBool(config, CATEGORY_TOOLS, "11.02_recursionDepth", "Determines whether veinminer can break netherrack", false); config.save(); diff --git a/com/hbm/main/ModEventHandler.java b/com/hbm/main/ModEventHandler.java index fae9bc2ad..3b48c6ceb 100644 --- a/com/hbm/main/ModEventHandler.java +++ b/com/hbm/main/ModEventHandler.java @@ -14,6 +14,7 @@ import com.hbm.entity.mob.EntityNuclearCreeper; import com.hbm.entity.projectile.EntityBurningFOEQ; import com.hbm.entity.projectile.EntityMeteor; import com.hbm.handler.ArmorUtil; +import com.hbm.handler.VersionChecker; import com.hbm.items.ModItems; import com.hbm.items.armor.ArmorFSB; import com.hbm.lib.Library; @@ -47,6 +48,7 @@ import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; import net.minecraft.tileentity.TileEntitySign; import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; @@ -67,8 +69,15 @@ public class ModEventHandler @SubscribeEvent public void onPlayerLogin(PlayerEvent.PlayerLoggedInEvent event) { - if(event.player.worldObj.isRemote) + System.out.println("eeeeee"); + + if(!event.player.worldObj.isRemote) { event.player.addChatMessage(new ChatComponentText("Loaded world with Hbm's Nuclear Tech Mod " + RefStrings.VERSION + " for Minecraft 1.7.10!")); + + if(VersionChecker.newVersion) { + event.player.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + "New version " + VersionChecker.versionNumber + " is available!")); + } + } } @SubscribeEvent @@ -619,7 +628,39 @@ public class ModEventHandler EntityPlayerMP player = event.player; String message = event.message; - //only if debug mode is enabled, which it is not by default + //boolean conditions for the illiterate, edition 1 + //bellow you can see the header of an if-block. inside the brackets, there is a boolean statement. + //that means nothing other than its value totaling either 'true' or 'false' + //examples: 'true' would just mean true + //'1 > 3' would equal false + //'i < 10' would equal true if 'i' is smaller than 10, if equal or greater, it will result in false + + //let's start from the back: + + //this part means that the message's first character has to equal a '!': -------------------------+ + // | + //this is a logical AND operator: -------------------------------------------------------------+ | + // | | + //this is a reference to a field in | | + //Library.java containing a reference UUID: --------------------------------------+ | | + // | | | + //this will compare said UUID with | | | + //the string representation of the | | | + //current player's UUID: ----------+ | | | + // | | | | + //another AND operator: --------+ | | | | + // | | | | | + //this is a reference to a | | | | | + //boolean called | | | | | + //'enableDebugMode' which is | | | | | + //only set once by the mod's | | | | | + //config and is disabled by | | | | | + //default. "debug" is not a | | | | | + //substring of the message, nor | | | | | + //something that can be toggled | | | | | + //in any other way except for | | | | | + //the config file: | | | | | | + // V V V V V V if(MainRegistry.enableDebugMode && player.getUniqueID().toString().equals(Library.HbMinecraft) && message.startsWith("!")) { String[] msg = message.split(" "); diff --git a/com/hbm/main/NEIConfig.java b/com/hbm/main/NEIConfig.java index b3625a97d..8665af5d7 100644 --- a/com/hbm/main/NEIConfig.java +++ b/com/hbm/main/NEIConfig.java @@ -41,6 +41,8 @@ public class NEIConfig implements IConfigureNEI { API.registerUsageHandler(new FluidRecipeHandler()); API.registerRecipeHandler(new PressRecipeHandler()); API.registerUsageHandler(new PressRecipeHandler()); + API.registerRecipeHandler(new CrystallizerRecipeHandler()); + API.registerUsageHandler(new CrystallizerRecipeHandler()); //Some things are even beyond my control...or are they? API.hideItem(new ItemStack(ModItems.memory)); diff --git a/com/hbm/main/ResourceManager.java b/com/hbm/main/ResourceManager.java index 61ba18f27..158e3cb8f 100644 --- a/com/hbm/main/ResourceManager.java +++ b/com/hbm/main/ResourceManager.java @@ -295,6 +295,7 @@ public class ResourceManager { public static final IModelCustom shimmer_sledge = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/shimmer_sledge.obj")); public static final IModelCustom shimmer_axe = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/shimmer_axe.obj")); public static final IModelCustom stopsign = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/weapons/stopsign.obj")); + public static final IModelCustom pch = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/pch.obj")); public static final IModelCustom brimstone = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/brimstone.obj")); public static final IModelCustom hk69 = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/hk69.obj")); @@ -303,6 +304,8 @@ public class ResourceManager { public static final IModelCustom ks23 = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/ks23.obj")); public static final IModelCustom flamer = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/flamer.obj")); public static final IModelCustom flechette = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/flechette.obj")); + + public static final IModelCustom grenade_frag = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/grenade_frag.obj")); ////Texture Items @@ -311,6 +314,7 @@ public class ResourceManager { public static final ResourceLocation shimmer_axe_tex = new ResourceLocation(RefStrings.MODID, "textures/models/shimmer_axe.png"); public static final ResourceLocation stopsign_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/stopsign.png"); public static final ResourceLocation sopsign_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/sopsign.png"); + public static final ResourceLocation pch_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/pch.png"); public static final ResourceLocation brimstone_tex = new ResourceLocation(RefStrings.MODID, "textures/models/brimstone.png"); public static final ResourceLocation hk69_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/hk69.png"); @@ -329,6 +333,8 @@ public class ResourceManager { public static final ResourceLocation flechette_trigger = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/flechette_trigger.png"); public static final ResourceLocation flechette_stock = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/flechette_stock.png"); + public static final ResourceLocation grenade_mk2 = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/grenade_mk2.png"); + ////Obj Entities diff --git a/com/hbm/render/entity/projectile/RenderGrenade.java b/com/hbm/render/entity/projectile/RenderGrenade.java new file mode 100644 index 000000000..0fcc58ddc --- /dev/null +++ b/com/hbm/render/entity/projectile/RenderGrenade.java @@ -0,0 +1,35 @@ +package com.hbm.render.entity.projectile; + +import org.lwjgl.opengl.GL11; + +import com.hbm.main.ResourceManager; + +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; + +public class RenderGrenade extends Render { + + @Override + public void doRender(Entity p_76986_1_, double x, double y, double z, float p_76986_8_, float p_76986_9_) { + + GL11.glPushMatrix(); + GL11.glTranslatef((float)x, (float)y + 0.125F, (float)z); + GL11.glRotatef(p_76986_1_.prevRotationYaw + (p_76986_1_.rotationYaw - p_76986_1_.prevRotationYaw) * p_76986_9_ - 90.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(p_76986_1_.prevRotationPitch + (p_76986_1_.rotationPitch - p_76986_1_.prevRotationPitch) * p_76986_9_, 0.0F, 0.0F, 1.0F); + + GL11.glRotatef(90, 0F, 1F, 0F); + GL11.glScaled(0.125, 0.125, 0.125); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_CULL_FACE); + bindTexture(ResourceManager.grenade_mk2); + ResourceManager.grenade_frag.renderAll(); + + GL11.glPopMatrix(); + } + + @Override + protected ResourceLocation getEntityTexture(Entity p_110775_1_) { + return ResourceManager.grenade_mk2; + } +} diff --git a/com/hbm/render/item/ItemRenderShim.java b/com/hbm/render/item/ItemRenderShim.java index 341c07ac5..94b465e49 100644 --- a/com/hbm/render/item/ItemRenderShim.java +++ b/com/hbm/render/item/ItemRenderShim.java @@ -25,7 +25,7 @@ public class ItemRenderShim implements IItemRenderer { @Override public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { - return false; + return type == ItemRenderType.ENTITY && (helper == ItemRendererHelper.ENTITY_BOBBING || helper == ItemRendererHelper.ENTITY_ROTATION); } @Override @@ -48,6 +48,8 @@ public class ItemRenderShim implements IItemRenderer { Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.stopsign_tex); if(item.getItem() == ModItems.sopsign) Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.sopsign_tex); + if(item.getItem() == ModItems.pch) + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.pch_tex); if(item.getItem() == ModItems.shimmer_sledge || item.getItem() == ModItems.shimmer_axe) { GL11.glRotatef(-135.0F, 0.0F, 0.0F, 1.0F); @@ -63,6 +65,11 @@ public class ItemRenderShim implements IItemRenderer { GL11.glRotatef(90F, 0.0F, 1.0F, 0.0F); } + if(item.getItem() == ModItems.pch) { + GL11.glRotatef(45.0F, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(0.7F, 0.0F, 0.0F); + } + if(item.getItem() == ModItems.shimmer_sledge) ResourceManager.shimmer_sledge.renderAll(); if(item.getItem() == ModItems.shimmer_axe) @@ -70,6 +77,12 @@ public class ItemRenderShim implements IItemRenderer { if(item.getItem() == ModItems.stopsign || item.getItem() == ModItems.sopsign) ResourceManager.stopsign.renderAll(); + if(item.getItem() == ModItems.pch) { + GL11.glShadeModel(GL11.GL_SMOOTH); + ResourceManager.pch.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); + } + default: break; } GL11.glPopMatrix(); diff --git a/com/hbm/saveddata/satellites/SatelliteHorizons.java b/com/hbm/saveddata/satellites/SatelliteHorizons.java index 0b543ff25..a7d8330f3 100644 --- a/com/hbm/saveddata/satellites/SatelliteHorizons.java +++ b/com/hbm/saveddata/satellites/SatelliteHorizons.java @@ -10,6 +10,7 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; +import net.minecraft.world.chunk.IChunkProvider; public class SatelliteHorizons extends Satellite { @@ -43,6 +44,10 @@ public class SatelliteHorizons extends Satellite { EntityTom tom = new EntityTom(world); tom.setPosition(x + 0.5, 600, z + 0.5); + + IChunkProvider provider = world.getChunkProvider(); + provider.loadChunk(x >> 4, z >> 4); + world.spawnEntityInWorld(tom); for(Object p : world.playerEntities) diff --git a/com/hbm/tileentity/machine/TileEntityBarrel.java b/com/hbm/tileentity/machine/TileEntityBarrel.java index 2f727ea89..caf24335e 100644 --- a/com/hbm/tileentity/machine/TileEntityBarrel.java +++ b/com/hbm/tileentity/machine/TileEntityBarrel.java @@ -122,8 +122,12 @@ public class TileEntityBarrel extends TileEntityMachineBase implements IFluidAcc @Override public void fillFluidInit(FluidType type) { + fillFluid(this.xCoord + 1, this.yCoord, this.zCoord, getTact(), type); + fillFluid(this.xCoord - 1, this.yCoord, this.zCoord, getTact(), type); fillFluid(this.xCoord, this.yCoord + 1, this.zCoord, getTact(), type); fillFluid(this.xCoord, this.yCoord - 1, this.zCoord, getTact(), type); + fillFluid(this.xCoord, this.yCoord, this.zCoord + 1, getTact(), type); + fillFluid(this.xCoord, this.yCoord, this.zCoord - 1, getTact(), type); } @Override diff --git a/com/hbm/tileentity/machine/TileEntityMachineCentrifuge.java b/com/hbm/tileentity/machine/TileEntityMachineCentrifuge.java index dab8dc44f..e49ee1aab 100644 --- a/com/hbm/tileentity/machine/TileEntityMachineCentrifuge.java +++ b/com/hbm/tileentity/machine/TileEntityMachineCentrifuge.java @@ -1,7 +1,7 @@ package com.hbm.tileentity.machine; import com.hbm.interfaces.IConsumer; -import com.hbm.inventory.MachineRecipes; +import com.hbm.inventory.CentrifugeRecipes; import com.hbm.items.machine.ItemBattery; import com.hbm.lib.Library; import com.hbm.packet.AuxElectricityPacket; @@ -214,7 +214,7 @@ public class TileEntityMachineCentrifuge extends TileEntity implements ISidedInv { return false; } - ItemStack[] itemStack = MachineRecipes.getCentrifugeProcessingResult(slots[0]); + ItemStack[] itemStack = CentrifugeRecipes.getOutput(slots[0]); if(itemStack == null) { return false; @@ -238,7 +238,7 @@ public class TileEntityMachineCentrifuge extends TileEntity implements ISidedInv private void processItem() { if(canProcess()) { - ItemStack[] itemStack = MachineRecipes.getCentrifugeProcessingResult(slots[0]); + ItemStack[] itemStack = CentrifugeRecipes.getOutput(slots[0]); if(slots[2] == null && itemStack[0] != null) { diff --git a/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java b/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java index dea9a5e9b..07113a659 100644 --- a/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java +++ b/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java @@ -1,11 +1,34 @@ package com.hbm.tileentity.machine; +import java.util.ArrayList; +import java.util.List; + +import com.hbm.handler.FluidTypeHandler.FluidType; +import com.hbm.interfaces.IConsumer; +import com.hbm.interfaces.IFluidAcceptor; +import com.hbm.inventory.CrystallizerRecipes; +import com.hbm.inventory.FluidTank; +import com.hbm.items.machine.ItemBattery; +import com.hbm.lib.Library; import com.hbm.tileentity.TileEntityMachineBase; -public class TileEntityMachineCrystallizer extends TileEntityMachineBase { +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + +public class TileEntityMachineCrystallizer extends TileEntityMachineBase implements IConsumer, IFluidAcceptor { + + public long power; + public static final long maxPower = 100000; + public static final int demand = 1000; + public static final int acidRequired = 500; + public short progress; + public static final short duration = 600; + + public FluidTank tank; public TileEntityMachineCrystallizer() { - super(3); + super(5); + tank = new FluidTank(FluidType.ACID, 8000, 0); } @Override @@ -18,7 +41,174 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase { if(!worldObj.isRemote) { + power = Library.chargeTEFromItems(slots, 1, power, maxPower); + tank.loadTank(3, 4, slots); + + if(canProcess()) { + + progress++; + power -= demand; + + if(progress > duration) { + progress = 0; + tank.setFill(tank.getFill() - acidRequired); + processItem(); + + this.markDirty(); + } + + } else { + progress = 0; + } + + tank.updateTank(xCoord, yCoord, zCoord, this.worldObj.provider.dimensionId); + + NBTTagCompound data = new NBTTagCompound(); + data.setShort("progress", progress); + data.setLong("power", power); + this.networkPack(data, 25); } } + + public void networkUnpack(NBTTagCompound data) { + + this.power = data.getLong("power"); + this.progress = data.getShort("progress"); + } + + private void processItem() { + ItemStack result = CrystallizerRecipes.getOutput(slots[0]); + + if(result == null) //never happens but you can't be sure enough + return; + + if(slots[2] == null) + slots[2] = result; + else if(slots[2].stackSize < slots[2].getMaxStackSize()) + slots[2].stackSize++; + + this.decrStackSize(0, 1); + } + + private boolean canProcess() { + + //Is there no input? + if(slots[0] == null) + return false; + + if(power < demand) + return false; + + if(tank.getFill() < acidRequired) + return false; + + ItemStack result = CrystallizerRecipes.getOutput(slots[0]); + + //Or output? + if(result == null) + return false; + + //Does the output not match? + if(slots[2] != null && (slots[2].getItem() != result.getItem() || slots[2].getItemDamage() != result.getItemDamage())) + return false; + + //Or is the output slot already full? + if(slots[2] != null && slots[2].stackSize >= slots[2].getMaxStackSize()) + return false; + + return true; + } + + public long getPowerScaled(int i) { + return (power * i) / maxPower; + } + + public int getProgressScaled(int i) { + return (progress * i) / duration; + } + + @Override + public void setFillstate(int fill, int index) { + tank.setFill(fill); + } + + @Override + public void setFluidFill(int fill, FluidType type) { + tank.setFill(fill); + } + + @Override + public void setType(FluidType type, int index) { + tank.setTankType(type); + } + + @Override + public List getTanks() { + return new ArrayList() {{ add(tank); }}; + } + + @Override + public int getFluidFill(FluidType type) { + return tank.getFill(); + } + + @Override + public int getMaxFluidFill(FluidType type) { + return tank.getMaxFill(); + } + + @Override + public void setPower(long i) { + this.power = i; + } + + @Override + public long getPower() { + return power; + } + + @Override + public long getMaxPower() { + return maxPower; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + + power = nbt.getLong("power"); + tank.readFromNBT(nbt, "tank"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + + nbt.setLong("power", power); + tank.writeToNBT(nbt, "tank"); + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemStack) { + + if(i == 0 && CrystallizerRecipes.getOutput(itemStack) != null) + return true; + + if(i == 1 && itemStack.getItem() instanceof ItemBattery) + return true; + + return false; + } + + @Override + public boolean canExtractItem(int i, ItemStack itemStack, int j) { + return i == 2; + } + + @Override + public int[] getAccessibleSlotsFromSide(int side) { + + return side == 0 ? new int[] { 2 } : (side == 1 ? new int[] { 0 } : new int[] { 1 }); + } } diff --git a/com/hbm/tileentity/machine/TileEntityMachineShredder.java b/com/hbm/tileentity/machine/TileEntityMachineShredder.java index 4d7d5e110..9cdd7799d 100644 --- a/com/hbm/tileentity/machine/TileEntityMachineShredder.java +++ b/com/hbm/tileentity/machine/TileEntityMachineShredder.java @@ -1,7 +1,7 @@ package com.hbm.tileentity.machine; import com.hbm.interfaces.IConsumer; -import com.hbm.inventory.MachineRecipes; +import com.hbm.inventory.ShredderRecipes; import com.hbm.items.machine.ItemBattery; import com.hbm.items.machine.ItemBlades; import com.hbm.lib.Library; @@ -321,7 +321,7 @@ public class TileEntityMachineShredder extends TileEntity implements ISidedInven if(slots[i] != null && hasSpace(slots[i])) { ItemStack inp = slots[i].copy(); - ItemStack outp = MachineRecipes.getShredderResult(inp); + ItemStack outp = ShredderRecipes.getShredderResult(inp); boolean flag = false; for (int j = 9; j < 27; j++) @@ -367,7 +367,7 @@ public class TileEntityMachineShredder extends TileEntity implements ISidedInven public boolean hasSpace(ItemStack stack) { - ItemStack result = MachineRecipes.getShredderResult(stack); + ItemStack result = ShredderRecipes.getShredderResult(stack); if (result != null) for (int i = 9; i < 27; i++) { diff --git a/com/hbm/tileentity/machine/TileEntityMachineTurbine.java b/com/hbm/tileentity/machine/TileEntityMachineTurbine.java index 1f6b413e9..740881961 100644 --- a/com/hbm/tileentity/machine/TileEntityMachineTurbine.java +++ b/com/hbm/tileentity/machine/TileEntityMachineTurbine.java @@ -226,6 +226,7 @@ public class TileEntityMachineTurbine extends TileEntity implements ISidedInvent tanks[0].setType(0, 1, slots); tanks[0].loadTank(2, 3, slots); + Library.chargeItemsFromTE(slots, 7, power, maxPower); Object[] outs = MachineRecipes.getTurbineOutput(tanks[0].getTankType());